0

mysql selectクエリの結果を使用して、2つの選択ボックスを埋めようとしています。クエリを1回実行し、出力変数を使用してループし、それに応じてselectタグのオプションを設定します。問題は、最初の選択ボックスが期待どおりに入力されますが、2番目の選択ボックスは入力されないことです。それは何でも空のままです。これが私のコードです

    <?php

    $con = mysql_connect('localhost','root','') or die('Could Not Connect'.mysql_error());
    mysql_select_db('irctc', $con)or die('Could Not Select'.mysql_error());;
    $result = mysql_query("select * from stationcodes", $con)or die('Could not select'.mysql_error());
    ?>
    <html>
    <head>
    </head>
    <body>
        <table>
            <tr>
                <td>Source</td>
                <td>:-</td>
                <td><select id='src'>
                    <option value=''>Select Source Station</option>
                    <?php  while($row = mysql_fetch_array($result))
                    { ?>
                        <option value='<?php echo $row['StationCode']; ?>'><?php echo $row['StationName']; ?></option>
                    <?php } ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Destination</td>
                <td>:-</td>
                <td><select id='dst'>
                    <option value=''>Select Destination Station</option>
                    <?php  while($row = mysql_fetch_array($result))
                    { ?>
                        <option value='<?php echo $row['StationCode']; ?>'><?php echo $row['StationName']; ?></option>
                    <?php } ?>
                    </select>
                </td>
            </tr>
        </table>
    </body>
    </html>
4

4 に答える 4

0

2番目の選択ボックスがレンダリングされる前にクエリを再実行するか、最初にその結果を配列にキャッシュする必要があります。mysql_fetch_ *を使用すると、それが読み取られ、カーソルを巻き戻すか、もう一度開始する必要があります/

さらに、mysql_ *から離れて、代わりにPDOまたはmysqliを使用してください。

于 2012-09-01T19:20:10.183 に答える
0

結果の反復を再開する前に、データポインタを最初に「巻き戻す」必要があります。mysql_data_seek(0);「宛先」を作成する前に、これを行うために使用します。

            <td><select id='dst'>
                <option value=''>Select Destination Station</option>
                <?php  mysql_data_seek(0);         // reset data pointer to 1st row
                       while($row = mysql_fetch_array($result))
                { ?>
                    <option value='<?php echo $row['StationCode']; ?>'><?php echo $row['StationName']; ?></option>
                <?php } ?>
                </select>
            </td>

また、使用しないでくださいmysql_mysqli_またはに切り替えますPDO。また、コードをビューから分離し、任意のタイプのテンプレートエンジン(など)を使用するのに役立ちますSmarty

于 2012-09-01T19:20:58.890 に答える
0

2番目の選択ボックスに到達すると、すべてのレコードがすでにフェッチされているため、そこでは何も起こりません。

HTMLコードを開始する前に、すべてのレコードを配列にフェッチする必要があります。

次に、htmlコードで、foreachステートメントを使用して配列をループします。

于 2012-09-01T19:22:17.563 に答える
0

データベースの結果を配列に格納して、複数回使用できるようにします。

$records = array();
while ($row = mysql_fetch_array($result)) $records[] = $row;

また、同じアルゴリズムを複数回記述しないようにするには、代わりに呼び出す関数を定義します。次に例を示します。

function select($attrs, $options, $selected=null) {
    $ret = '<select';
    if (is_array($attrs)) {
        foreach ($attrs as $name => $val) {
            $ret .= ' '.htmlspecialchars($name).'="'.htmlspecialchars($value);
        }
    }
    $ret .= '>';
    foreach ($options as $option) {
        $ret .= '<option';
        if (isset($option['value'])) {
            $ret .= ' value="'.htmlspecialchars($option['value']).'"';
            if ($selected === $option['value']) {
                $ret .= ' selected="selected"';
            }
        }
        $ret .= '>';
        if (isset($option['label'])) {
            $ret .= htmlspecialchars($option['label']);
        }
        $ret .= '</option>';
    }
    $ret .= '</select>';
    return $ret;
}

次に、必要なのは、さまざまなパラメーターを使用してこの関数を呼び出すことだけです。

$options = array();
while ($row = mysql_fetch_array($result)) {
    $options[] = array(
        'value' => $row['StationCode'],
        'label' => $row['StationName']
    }
}

$srcOptions = array_merge(array(array('label'=>'Select Source Station')), $options);
echo select(array('id'=>'src'), $srcOptions);

$dstOptions = array_merge(array(array('label'=>'Select Destination Station')), $options);
echo select(array('id'=>'dst'), $dstOptions);
于 2012-09-01T19:39:42.700 に答える