Javascript 在Select Change上更改PHP变量使用Ajax并在SQL查询中使用

Javascript 在Select Change上更改PHP变量使用Ajax并在SQL查询中使用,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我一直在尝试使用Ajax将select值的值发送到PHP文件,然后在SQL查询中使用,但似乎无法使其正常工作 我的选择选项 <select id="select"> <option value="yes">Yes</option> <option value="no">No</option> <option value="1">1</option> <option value="2">

我一直在尝试使用Ajax将select值的值发送到PHP文件,然后在SQL查询中使用,但似乎无法使其正常工作

我的选择选项

<select id="select">
  <option value="yes">Yes</option>
  <option value="no">No</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>
然后在我的PHP文件中,我尝试了这个

if(isset($_POST["selected"]))
{
 $selectedValue = $_POST['selected'];
 $query = "SELECT * FROM customers WHERE delivered='$selectedValue'";
}
还有这个

$selectedValue = $_POST['selected'];
$query = "SELECT * FROM customers WHERE delivered='$selectedValue'";

警报会弹出正确的值,但不会更新PHP文件中的变量?

请尝试下面的代码获取参数的值

$(document).ready(function () {
 $('#select').on('change', function () {    
    alert($(this).val());
    $.ajax({
      type: "POST",
      url: "phpsqlajax_genxml3_state.php",
      data: {
        selected: $(this).val()
      },
      success: function (data) {
        console.log(data);
        // Stuff
      },
      error: function (data) {
        console.log(data);
        // Stuff
      }
  });
 });
});
在php代码中使用

$selectedValue = $_POST['selected'];
第一件事:

而不是写:


var selectValue=$“选择选项:已选定”。val

您只需使用:

var selectValue=$'select'.val

第二件事:

您已经在函数外部设置了select的值,因此当“更改”侦听器运行时,selectValue的值已经设置,您永远不会覆盖它

您需要将变量的值设置为以下值:

$(document).ready(function() {
  $('select').on('change', function() {
    var selectValue = $(this).val();
第三件事:

如注释中所述,您正在以下代码中查找键selectValue:

$selectedValue=$\u POST['selectValue']

当您应该寻找:

$selectedValue=$_POST['selected']

因为这就是您通过AJAX发送的内容,这里:

data: {
   selected: selectValue
}
第四件事:

您根本没有对用户的输入进行消毒,从而使您可以进行SQL注入

$query = "SELECT * FROM customers WHERE delivered='$selectedValue'";

为了防止SQL注入,您需要考虑更新到PDO:

$document.readyfunction{ $'select'。在'change'上,函数{ 警告这个值; var selectValue=$this.val; $.ajax{ 类型:POST,, url:phpsqlajax_genxml3_state.php, 数据:{ 已选:选择值 }, 成功:函数数据{ 警报数据; //东西 }, 错误:函数数据{ //东西 } }; }; }; 对 不 1. 2.
在ajax中,您调用数据变量名称selected,但在PHP中,您指的是selectValue。尝试更改。此行var selectValue=$选择选项:selected.val;必须在函数中,才能在更改select.var selectValue=$“select option:selected”.val;时获取值,此代码将始终为您提供第一个下拉值,即使您在传递相同的第一个选定值时进行了更改,因为这是documentready函数之外的值。请将selected:selectValue更改为“selected:this.value”。其次,在Php中使用的变量名是错误的,请使用“$selectedValue=$\u POST['selected'];”假设您的PHP是从phpsqlajax_genxml3_state.PHP运行的,并且该文件实际上正在运行,我不明白为什么这不起作用$query=SELECT*FROM交付客户=“$selectedValue”;查询可以工作,但当我执行$selectedValue=$\u POST['selected']时就不能工作$query=SELECT*FROM交付客户=“$selectedValue”;我没有投反对票,但我明白为什么有人投了反对票。除了@MarmikPatels之外的所有答案都不能解决代码中的所有问题。我已经对上述所有内容进行了更改,但我的PHP文件中的变量仍然没有更新?如果您使用var_dump$selectedValue;它是否显示了正确的值?@MarkOverton如果我执行var\u dump$selectedValue,则得到NULL;如果您可以使用新代码更新您的问题,那么可能会更容易,这样我就可以尝试解决它仍然不起作用的原因。当我这样做时,我会收到值的警报,但另一个警报说“[object XMLDocument]”请使用警报$this.val;对于第二个警报,请使用console.logdataWhat is the issue?为什么OP应该尝试这个代码?请继续读。这是做什么用的?它为什么/如何回答这个问题?请继续读下去。
$query = "SELECT * FROM customers WHERE delivered='$selectedValue'";