3

データベースからの結果を行ごとに 3 つの結果に分割したいと考えています。これは私が持っているコードです:

include("connect.php");

$result = mysql_query("SELECT * FROM movies ORDER BY title");
$num = mysql_num_rows ($result);

if ($num > 0 ) {
    $i=0;
    while ($i < $num) {
        $id = stripslashes(mysql_result($result,$i,"id"));
        $title = stripslashes(mysql_result($result,$i,"title"));
        $description = stripslashes(mysql_result($result,$i,"description"));
        $length = stripslashes(mysql_result($result,$i,"length"));
        $link = stripslashes(mysql_result($result,$i,"link"));
        $rating = stripslashes(mysql_result($result,$i,"rating"));
        $cover = stripslashes(mysql_result($result,$i,"icover"));

        $row .= '<tr><td><a href="view.php?id='.$id.'"><img width=130 height=190 src="images/covers/'.$cover.'" /></a></td><td valign="top">'.$title.'<br />'.$rating.'<br />Run Time: '.$length.'</td><td><a href="update.php?id='.$id.'">Update</a></td><td><a href="delete.php?id='.$id.'">Delete</a></td></tr>';

        ++$i; 
    }
} 
else { 
    $row = '<tr><td colspan="2" align="center">Nothing found</td></tr>'; 
}

mysql_close();
4

3 に答える 3

2

誰かが指摘したように、N回ごとに何かをしたい場合は、通常、次の形式のチェックが必要です。

if ( $i > 0 && $i % $N == 0) {
    // Do your Nth something here
}

$i は現在の反復回数であり、もちろん $N は中断する頻度です。したがって、この場合、$N = 3 であり、ブレーク ロジックは if ステートメントの本体に入ります。

そうは言っても、それ以上のことが関係しているようです。行ごとに複数の列が既にあるため、コードはテーブルですでにかなりの量を実行しています。これらの複数の列の 3 つのセットが本当に必要でしたか、それとも行のグループ化などの別のことを意味していましたか?

于 2012-12-11T19:12:03.920 に答える
0

$row を if ステートメントで定義するのを忘れていると思います。この場合、変数は while 内のローカル変数になります

include("connect.php");

 $result = mysql_query("SELECT * FROM movies ORDER BY title");
 $num = mysql_num_rows ($result);
 $row = '';

 if ($num > 0 ) {
    $i=0;


   while ($i < $num) {

   $id = stripslashes(mysql_result($result,$i,"id"));
   $title = stripslashes(mysql_result($result,$i,"title"));
   $description = stripslashes(mysql_result($result,$i,"description"));
   $length = stripslashes(mysql_result($result,$i,"length"));
   $link = stripslashes(mysql_result($result,$i,"link"));
   $rating = stripslashes(mysql_result($result,$i,"rating"));
   $cover = stripslashes(mysql_result($result,$i,"icover"));

   $row .= '<tr>
   <td><a href="view.php?id='.$id.'"><img width=130 height=190 src="images/covers/'.$cover.'" /></a></td>
   <td valign="top">'.$title.'<br />'.$rating.'<br />Run Time: '.$length.'</td>
   <td><a href="update.php?id='.$id.'">Update</a></td>
   <td><a href="delete.php?id='.$id.'">Delete</a></td>
  </tr>';

  ++$i; }
 } else { $row = '<tr><td colspan="2" align="center">Nothing found</td></tr>'; }

  mysql_close();

  print($row);
于 2012-12-11T19:18:55.700 に答える
0

これは、あなたがやろうとしていることの助けになると思います。もちろん、ニーズに合わせてテーブルのスタイルを設定する必要があります。コード内の列数は、必要に応じて設定できます。

$mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
        if ($mysqli->connect_errno)
        {
            echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
            $mysqli->close();
        }

    $values = $mysqli->query("SELECT * FROM movies ORDER BY title");
    $cols = 3;
    $i =1;
    echo "<table>".PHP_EOL;
    echo "<tr>".PHP_EOL;
while($row = $values->fetch_assoc())
    { 
        $id             = $row['id'];
        $title          = $row['title'];
        $description    = $row['description'];
        $length         = $row['length'];
        $link           = $row['link'];
        $rating         = $row['rating'];
        $cover          = $row['icover'];
    if (is_int($i / $cols))
        {
            echo "<td >".PHP_EOL;
            //what ever you want to include goes here
            echo "</td>".PHP_EOL;
            echo "</tr>".PHP_EOL;
            echo "<tr>".PHP_EOL;
        }
        else
            {
                echo "<td >".PHP_EOL;
                //what ever you want to include goes here
                echo "</td>".PHP_EOL;
            }
            $i++;
    }
        echo "</tr>".PHP_EOL; 
        echo "</table>".PHP_EOL;
于 2012-12-11T19:51:10.773 に答える