-1

この while ループはエコーを実行していません。mysql_num_fields($result); をテストしました。そしてそれは私に16を与えるので、$iがすでに$jよりも大きいというわけではありません。何もしないだけで、私も無限になるわけではありません。

while ($row = mysql_fetch_array($result))  
{ 
    $i = 1;
    $j = mysql_num_fields($result);

    if ($i <= $j) {
        echo "<li>";
        echo "<a id='autoload' href='images/big/".$row['card$i'].".jpg' class='highslide'      onclick='return hs.expand(this, config1 )'>";
        echo "<img src='images/small/".$row['card$i']."jpg' alt''";
        echo " title='";
        echo $year." ". $brand." ".$playerfirst." ".$playerlast." ".$details."'/>";
        echo "</a>";
        echo "</li>";
        $i++;
    }
    else {
        break;
    }
}

このクエリは 1 行しか返さないと言うべきだったと思います。次に、いくつかの異なる列 (card1、card2、card3...card16) から数値を取得し、上記のように画像ファイル名として入力する必要があります。また、私はすべての mysqli とインジェクションからの保護を理解しています。この種のプロジェクトでは、本当に心配する必要はありません。

4

4 に答える 4

1

mysql_num_fieldsSQL クエリによって返されたテーブルの列数を返します。すべての行が変わるわけではありません。ループごとに実行するべきではありません。

さらに、$i,$j行を削除して if ステートメントを に変更すると、if(false)これが現在行っているのとまったく同じことが行われます。この問題を修正するには、if ステートメントを完全に削除します...

php と mysqlのチュートリアルが必要です。

于 2012-08-22T20:58:20.970 に答える
1

PHPマニュアルから

フェッチされた行に対応する文字列の配列を返します。それ以上行がない場合は FALSE を返します。返される配列の型は、result_type の定義方法によって異なります。MYSQL_BOTH (デフォルト) を使用すると、連想インデックスと数値インデックスの両方を持つ配列が得られます。MYSQL_ASSOC を使用すると、連想インデックスのみが取得され (mysql_fetch_assoc() が機能するため)、MYSQL_NUM を使用すると、数値インデックスのみが取得されます (mysql_fetch_row() が機能するため)。

結果の 2 つ以上の列に同じフィールド名がある場合、最後の列が優先されます。同じ名前の他の列にアクセスするには、列の数値インデックスを使用するか、列のエイリアスを作成する必要があります。エイリアス化された列の場合、元の列名でコンテンツにアクセスすることはできません。

while は結果ごとにのみ実行されます。あなたはする必要があるだけです

while ($row = mysql_fetch_array($result))  
{ 

    echo "<li>";
    echo "<a id='autoload' href='images/big/".$row['card'].".jpg' class='highslide'      onclick='return hs.expand(this, config1 )'>";
    echo "<img src='images/small/".$row['card']."jpg' alt''";
    echo " title='";
    echo $year." ". $brand." ".$playerfirst." ".$playerlast." ".$details."'/>";
    echo "</a>";
    echo "</li>";
    

}

これを行うと、各結果のみが循環します。結果から行がある間、これを行います。一番上に戻って、まだ行がある場合はもう一度やり直してください

于 2012-08-22T20:58:27.750 に答える
0

誰もが言っているように、このコードはすべて一緒に作り直す必要があります。しかし、質問を理解するために、16列の1行があります。リストアイテムのhtmlを16回印刷したい。必要なのはforループです。ifループは1回だけ実行されます。

for($i=1; $i <= $j; $i++) {
     /* print some html */
      echo "<li>";
      echo "<a id='autoload' href='images/big/".$row['card$i'].".jpg' class='highslide'      onclick='return hs.expand(this, config1 )'>";
      echo "<img src='images/small/".$row['card$i']."jpg' alt''";
      echo " title='";
      echo $year." ". $brand." ".$playerfirst." ".$playerlast." ".$details."'/>";
      echo "</a>";
      echo "</li>";
}
于 2012-08-22T21:52:45.643 に答える
0

これは、あなたのコードが今日行うことです:

/* as long as i can fetch a database row */
while($row=mysql_fetch_array($result))  
{ 
   /* reset the counter i */
   $i=1;

   /* count the number of fields */
   $j=mysql_num_fields($result);

   /* as long as its at leas one field ($i is always 1) */
   if ($i <= $j)
   {

      /* print some html */
      echo "<li>";
      echo "<a id='autoload' href='images/big/".$row['card$i'].".jpg' class='highslide'      onclick='return hs.expand(this, config1 )'>";
      echo "<img src='images/small/".$row['card$i']."jpg' alt''";
      echo " title='";
      echo $year." ". $brand." ".$playerfirst." ".$playerlast." ".$details."'/>";
      echo "</a>";
      echo "</li>";

      /* increase counter to 2 (always gets to 2 as i always is 1 before) */
      $i++;
  }

  /* if there was zero field */
  else
  {
      /* break the loop */
      break;
  }

  /* loop by jumping ut to reset counter i */
}
于 2012-08-22T20:58:51.667 に答える