我正在尝试使用另一个下拉框中的选择来填充下拉框。我已经想出如何使用数据库中的数据填充列表,似乎问题在于在不提交表单的情况下从同一页面上的第一个下拉框中获取他们选择的内容。这是我目前所拥有的。
<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 方面真的没有任何经验,所以如果有一种方法可以在没有这些的情况下做到这一点,那将会很有帮助,但如果没有,我愿意学习他们在这种情况下的应用。
最佳答案
不幸的是,您需要某种客户端脚本来调用外部 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();
}?>
关于PHP - 从下拉框中获取选择以在同一页面上的另一个下拉框中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591523/