Я пытаюсь заполнить второй раскрывающийся список, используя значение, выбранное из первого раскрывающегося списка с использованием PHP и MysSQL, и без обновления страницы. Я думал, что это будет просто, но не может заставить его работать, поэтому любая помощь будет высоко оценена.
Пока у меня есть следующее:
Форма 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>"; }
Благодаря!
Как и другие участники, вы должны использовать 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: не проверено, но должно работать … Наверное.