2012-09-01 60 views
0

我想填充兩個選擇框使用mysql選擇查詢的結果。我運行查詢一次,並使用輸出變量循環並相應地設置選擇標籤的選項。問題是,第一個選擇框按預期填充,但第二個沒有。它仍然是空的。下面是我的代碼分配相同的PHP源不同的選擇元素

<?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> 
+1

近我是http://stackoverflow.com/a/12218232/413354的副本 – moopet

回答

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

0

您需要在第二個選擇框呈現之前重新運行查詢,或者先將其結果緩存到數組中。一旦你使用mysql_fetch_ *,它已經被讀取,你需要倒帶光標或者重新開始/

另外,遠離mysql_ *並使用PDO或mysqli代替。

0

當你到了第二個選擇框,所有記錄都已經取出,所以什麼都不會發生有。

你應該做的是在開始html代碼之前將al記錄提取到數組中。

然後在html代碼中使用foreach語句來遍歷數組。

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); 
相關問題