2013-03-03 24 views
0

我想使用從第一個下拉列表中選擇的值使用PHP和Mysql填充第二個下拉列表,並且不刷新頁面。我認爲這會很簡單,但不能得到它的工作,所以任何幫助將不勝感激。使用PHP和MySQL來填充下拉列表

到目前爲止,我有以下幾點:

HTML表單(form.php的)

<select name="list1" id="list1"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

<select name="list2" id="list2"> 

</select> 

的JavaScript(form.php的範圍內)

<script type="text/javascript"> 
    $("#list1").change(function() { 
    $("#list2").load("get_list2.php?id=" + $("#list1").val()); 
    }); 
</script> 

get_list2 .php

require_once("config.php"); 

$q1 = mysql_query("SELECT * FROM mytable WHERE id = '$_GET[id]'"); 
while($row1 = mysql_fetch_assoc($q1)){ 
    echo "<option>".$row1['item']."</option>"; 
} 

謝謝!

+4

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://www.brightmeup.info/article.php?a_id=2)。 – insertusernamehere 2013-03-03 15:59:45

+1

嘗試使用id自己調用get_list2.php並查看返回的內容。 – Anonymous 2013-03-03 15:59:54

+0

你的代碼似乎很容易被SQL注入。不要在這樣的狀態網中直接使用'$ _GET'。看看[Bobby Tables](http://bobby-tables.com) – insertusernamehere 2013-03-03 16:00:59

回答

4

像其他成員所說的,你應該使用PDO(具有準備語句)而不是mysql_。

一種可能的實現:

HTML(form.php的)

<select name="list1" id="list1"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

<select name="list2" id="list2"></select> 

<script type="text/javascript"> 
$("#list1").change(function() { 
    $.ajax({ 
     url : "get_list2.php?id=" + $(this).val(),       
     type: 'GET',     
     dataType:'json',     
     success : function(data) { 
      if (data.success) { 
       $('#list2').html(data.options); 
      } 
      else { 
       // Handle error 
      } 
     } 
    }); 
}); 
</script> 

PHP(get_list2.php)

require_once("config.php"); 

$id = $_GET['id']; 

if (!isset($id) || !is_numeric($id)) 
    $reponse = array('success' => FALSE); 
else { 
    // Where $db is a instance of PDO 

    $query = $db->prepare("SELECT * FROM mytable WHERE id = :id"); 
    $query->execute(array(':id' => $id)); 
    $rows = $query->fetchAll(PDO::FETCH_ASSOC); 

    $options = ""; 
    foreach ($rows as $row) { 
     $options .= '<option value="'. $row .'">'. $row .'</option>'; 
    } 

    $response = array(
     'success' => TRUE, 
     'options' => $options 
    ); 
} 

header('Content-Type: application/json'); 
echo json_encode($response); 

PS:沒有測試,但它應該工作...我猜測。

+0

感謝Guicara這對我來說是一個很大的幫助! – mckeegan375 2013-03-03 16:40:20

+0

不客氣;)我更新了我的帖子:選項(<選項...)現在由PHP腳本構建。它爲客戶更加優化。 – Guicara 2013-03-03 16:46:50