2

我正在尝试使用另一个下拉框中的选择来填充下拉框。我已经想出了如何使用数据库中的数据填充列表,似乎问题在于在不提交表单的情况下从同一页面的第一个下拉框中获取他们选择的内容。这就是我到目前为止所拥有的。

<select name = "trainer_has_update_pokemon">
<p>Trainer</p>
<?php
$query = "SELECT name FROM Trainer";

if ($stmt = $mysqli->prepare($query)) {
$stmt->execute();
$stmt->bind_result($name);
while ($stmt->fetch()) {
    echo"<option>$name</option>";
}


$stmt->close();
}


?>
</select>

<?php
$trainer_name = $_GET['trainer_has_update_pokemon'];
?>

<p>Pokemon</p>
<select name = "type_of_update_pokemon">
<?php
$query = "SELECT DISTINCT p.name FROM Pokemon p WHERE p.owner_id = (SELECT t.trainer_id FROM Trainer t WHERE t.name = '$trainer_name')";
if ($stmt = $mysqli->prepare($query)) {
$stmt->execute();
$stmt->bind_result($pkmn_name);
while ($stmt->fetch()) {
    echo"<option>$pkmn_name</option>";
}
$stmt->close();
}
?>

我真的没有 Javascript 或 AJAX 方面的经验,所以如果没有这些方法可以做到这一点,那将是有帮助的,但如果没有,我愿意在这种情况下学习他们的应用程序。

4

1 回答 1

1

不幸的是,您将需要某种客户端脚本来调用外部 php 页面,以便实时提取数据。一个快速的模型看起来像:

javascript:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function(){ //document ready
    $('select[name="trainer_has_update_pokemon"]').change(function(){ // when trainer_has_update_pokemon changes
        $.ajax({
            type:"POST", //send a post method
            url:'ajax.php', // path to ajax page
            data:"trainer_name="+$(this).val(), //set trainer_name to value
            success:function(response){ // retrieve response from php
                $('select[name="type_of_update_pokemon"]').html(response); // update select
            }
        });
    });
});
</script>

PHP(我命名为 ajax.php):

<?php
/* ADD YOUR DATABASE CONNECTION */
$trainer_name = $_POST['trainer_name']; // DONT FORGET TO ESCAPE!!
$query = "SELECT DISTINCT p.name FROM Pokemon p WHERE p.owner_id = (SELECT t.trainer_id FROM Trainer t WHERE t.name = '$trainer_name')";
if ($stmt = $mysqli->prepare($query)) {
    $stmt->execute();
    $stmt->bind_result($pkmn_name);
    while ($stmt->fetch()) {
        echo"<option>$pkmn_name</option>";
    }
    $stmt->close();
}?>
于 2012-11-27T19:33:36.187 回答