1

このボードは初めてですが、これまでのところ気に入っています:)

私は現在、私の友人が彼女の個人的なWebサイトをやり直すのを手伝っていて、テーブルのロジックの壁に頭をぶつけています。

このテーブルは、4つの列/セル/ TDの行で構成されるテーブルに最新ニュースを表示することを想定しています(これ以上はありません)-次のようなものがあります: http://screencast.com/t/Rh39oh6ms0OL

つまり、基本的に、ニューステーブルから日付、サムネイル、ヘッドラインを選択するSQLクエリがあります(id descで並べ替えられているため、最新のものが最初に取得されます)。

私はいくつかのロジックを作成しましたが(以下のコードでわかるように)、テーブルの最初の行が表示されるだけです。私を正しい軌道に戻すことができる人はいますか?よろしくお願いします。

<table>
  <?php
  //PHP code used for building HTML table showing news-resumes
  //Written by:  Jesper Flindt
  //Date:       2012.07.30
  //Version:   1.0

  //Getting data from MySQL database
  $query  = "select date, thumbnail, headline from news order by id desc";
  $result = mysql_query($query) or die("Connection Error:" . mysql_error());

  //Setting variables
  $i   = 0;
  $p  = 0;

  //Starting row in table
  print('<tr>');

  //Looping through the resultset
  while($row = mysql_fetch_assoc($result))
  {
    //Limit row to 4 cells (TDs)
    if($i < 4)
    {
      //Display the date of the news as well as its thumbnail
      print('<td><div style="padding-left:8px;"><b>Tilf&oslash;jet d. '.$row['date'].'</b></div><div class="news_thumbframe"><img src="./upload/'.$row['thumbnail'].'" alt=""/></div></td>');
      $i++;
      $p++;
    }
    //If row is 4 cells wide, start new row
    else if($i % 4 == 0)
    {
      print('</tr><tr>');
      $i++;
      $p++;
    }
    //Every second row should display the news headline as well as a "Read More" link ("L&aelig;s mere" in danish)
    else if($i % 4 != 0 || $p % 4 == 0)
    {
      print('<td width="215" valign="top"><br /><div style="padding-left:8px;"><h2>'.$row['headline'].'</h2><a href="#">L&aelig;s mere</a></div></td>');
      $i++;
      $p++;
    }
    else
    {
      $i = 0;
      $p = 0;
    }
  }
  ?>
</table>
4

3 に答える 3

1

すべての結果(つまり、1つの列ではなく、1つのニュースエントリ全体if/elseif/elseif/else)に対して、構文を使用するため、if句の1つだけを実行します。それらは相互に排他的です。

含意:

これにより、データベース結果の4行ごとがスキップされます。

else if($i % 4 == 0)
{
  print('</tr><tr>');
  $i++;
  $p++;
}

これにより、4の倍数ではなく4より大きいすべての行がキャプチャされます。

else if($i % 4 != 0 || $p % 4 == 0)
    {
      print('<td width="215" valign="top"><br /><div style="padding-left:8px;"><h2>'.$row['headline'].'</h2><a href="#">L&aelig;s mere</a></div></td>');
      $i++;
      $p++;
    }

これは実行されません:

else
{
  $i = 0;
  $p = 0;
}

あなたの他の条件はすでにすべての可能性を使い果たしているからです。

  • 最初の句は4回実行されます。
  • 次に、2番目の句が1回実行され$i == 4ます。
  • これで、3番目の句が実行されます$i == 5, 6, 7
  • 2番目の句は$i == 8
  • 3番目の句は$i == 9, 10, 11

などなど

なぜ2つのカウンター変数があるのですか?私が見る限り、あなたは常に同じ場所でそれらをインクリメントし、同じ場所でそれらをゼロに設定します。違いは何ですか?

アップデート

コメントで言及したことを明確にするために:

else if($i % 4 != 0 || $p % 4 == 0)

||論理またはを示します。最初に最初の条件をチェックし、それが当てはまらない場合は2番目の条件をチェックします。それらのいずれかが真の場合、条件全体が真と見なされ、句が実行されます。

ただし、 trueの$i % 4 != 0場合、はfalseのみ$i % 4 == 0です。これは、前のelse if句が実行されたことを意味します。チェックはその部分にさえ到達しません $p

于 2012-07-31T11:59:37.893 に答える
0

見栄えが良いかもしれません

$result = mysql_query($query) or die("Connection Error:" . mysql_error());

$items = array();

while($row = mysql_fetch_assoc($result)){
   $items[] = array('date'=>$row['data'],
                    'thumbnail'=>$row['thumbnail'],
                    'headline'=>$row['headline'],);
}

$pairs = array_chunk($items,4);

foreach ($pairs as $pair){

  print '<tr>';

  foreach ($pair as $row){
    print('<td><div style="padding-left:8px;"><b>Tilf&oslash;jet d. '.$row['date'].'</b></div><div class="news_thumbframe"><img src="./upload/'.$row['thumbnail'].'" alt=""/></div></td>');
  }

  print '<tr/><tr>';

  foreach ($pair as $row){
    print('<td width="215" valign="top"><br /><div style="padding-left:8px;"><h2>'.$row['headline'].'</h2><a href="#">L&aelig;s mere</a></div></td>');

  }  
  print '<tr/>'; 
}
于 2012-07-31T12:09:42.557 に答える
0

コードを変更できるので、4セットごとに[サムネイル、日付]と[見出し]の両方を一緒に生成できます

PHP:

  //Setting variables
  $i   = 1;
  $img_date = '';  
  $headline =''; 

  //Looping through the resultset
  while($row = mysql_fetch_assoc($result))
  {
     //Building both  content for 4 columns
     $img_date .= '<td><div style="padding-left:8px;"><b>Tilf&oslash;jet d. '.$row['date'].'</b></div><div class="news_thumbframe"><img src="./upload/'.$row['thumbnail'].'" alt=""/></div></td>';

    $headline .='<td width="215" valign="top"><br /><div style="padding-left:8px;"><h2>'.$row['headline'].'</h2><a href="#">L&aelig;s mere</a></div></td>';


     if($i == 4) // Time build row
     {  
        // Building both thumbnail and headline row 
        echo "<tr id='thumb_date'>$img_date</tr>";
        echo "<tr id='headline'>$headline </tr>";

         //resetting  
        $i=1; 
        $img_date = '';  
        $headline ='';
      }
      else
        i++;

   }//end while
于 2012-07-31T12:30:00.200 に答える