0

MySQLデータベースから取得したものとまったく同じ情報をすべて表示する3つのコンボボックスを追加しようとしています。私が書いたコードは、続行する前に、3つのコンボボックスがすべて入力されるまでページ全体を待機させるようです。

<?
$query = "Select * from tblWriters order by surname";

for ($i = 1; $i <= 3; $i++) {

    $result = mysql_query($query);

    echo "<tr><td>Writer".$i." *</td><td>";
    echo "<select name='txtWriter".$i."' style='width: 200px;'>";
    echo "<option value ='' selected='selected'></option>";

    while ($row = mysql_fetch_array($result))
    {
         echo "<option value ='" . $row['id'] . "'> " . $row['surname'] . ", " . $row['name'] . "</option>";
    }

    echo "</select><td></tr>";
}
?>

このコードを最適化して、クエリが3回実行されないようにします。これは、ページの速度が低下する場所であると考えているためです。

入れたら

$ result = mysql_query($ query);

forループの外側では、2番目と3番目のコンボボックスは入力されません。結果のポインタをリセットすることを検討しましたが、それがどのように機能するのか理解できないようです。

また、whileループを再利用できるので、3回実行する必要はありませんか?

誰かが私を正しい方向に向けることができますか?私はPHPにかなり慣れておらず、自分で学ぼうとしています。どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

0

mysql_query()を再びループから外すと、ループの最初または最後でmysql_data_seek()を使用してmysql-result-pointerをリセットできます。

これにより、次のようになります。

 mysql_query($query);
 for($i=1;$i<=3;$i++);
 {
     mysql_data_seek(0); // reset datapointer

     // output querydata
 }

ただし、mysql-extensionは現在非推奨であり、新しいプロジェクトとコードにはmysqliまたはpdoを使用する必要があることを指摘する必要があります。

于 2012-05-19T00:01:54.020 に答える
0

クエリ結果を配列にキャッシュしてから、マークアップを生成します。

$query = "Select * from tblWriters order by surname";
$result = mysql_query($query);
$data = array();
while ($row = mysql_fetch_array($result))
{
    $data[] = $row;
}

for ($i = 1; $i <= 3; $i++) {

    echo "<tr><td>Writer".$i." *</td><td>";
    echo "<select name='txtWriter".$i."' style='width: 200px;'>";
    echo "<option value ='' selected='selected'></option>";
    foreach ($data as $row) {
       echo "<option value ='" . $row['id'] . "'> " . $row['surname'] . 
            ", " .   $row['name'] . "</option>";        
    }

    echo "</select><td></tr>";
}
于 2012-05-19T00:02:34.687 に答える