【问题标题】:PHP - Getting a selection from a dropdown box for use in another dropdown box on the same pagePHP - 从下拉框中获取选择以在同一页面上的另一个下拉框中使用
【发布时间】:2012-11-27 19:23:05
【问题描述】:

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

<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 方面并没有任何经验,所以如果没有这些方法可以做到这一点,那将是有帮助的,但如果没有,我愿意在这种情况下学习他们的应用程序。

【问题讨论】:

  • 没有,除了 AJAX 之外别无他法(除了在初始页面加载时加载整个数据库,然后用 javascript 更改组合框)

标签: php database drop-down-menu mysqli


【解决方案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();
}?>

【讨论】:

  • 我遵循您对 JS 和 ajax 所做的事情,并且我已经调整了我的代码以使用它,但是一旦我选择了一个培训师,它仍然使下拉框为空。而且我确定我的数据库上有 pokemon,并且我已经使用 phpMyAdmin 来测试我的 SQL 查询。
  • 一些建议。使用 firebug(在 Firefox 中)的控制台选项卡,确保请求成功完成。接下来,尝试使用上面的alert(response)$('input[name="type_of_update_pokemon"]').html(response); 和内部success:function(){}
  • 我使用 firebug 控制台查看了它,但没有任何结果。我应该从alert(response) 部分得到什么?
  • 只有在您更改第一个选择时才会在控制台中显示某些内容。而且,您的警报应该显示您从 ajax.php 页面回显的任何内容
  • 当我更改第一个选择时,控制台中没有出现任何内容,因此因为它似乎没有得到我正在更改选择,所以它不会向 ajax.php 页面发送任何内容或返回任何东西。
猜你喜欢
  • 2013-11-12
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多