使用AJAX将变量传递给PHP以填充下拉菜单时出现问题

时间:2015-08-13 09:44:22

标签: javascript php mysql ajax

我试图用AJAX填充两个下拉菜单,这些菜单也链接到MySQL数据库。 下拉列表1 =品牌和下拉列表2 =模型

我唯一的问题是将变量从Dropdown 1传递到另一个页面,以便可以运行MySQL搜索。

这是AJAX功能:

function AjaxFunction()
{
var httpxml;
try
  {
  // Firefox, Opera 8.0+, Safari
  httpxml=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
          try
                    {
                 httpxml=new ActiveXObject("Msxml2.XMLHTTP");
                    }
            catch (e)
                    {
                try
            {
            httpxml=new ActiveXObject("Microsoft.XMLHTTP");
             }
                catch (e)
            {
            alert("Your browser does not support AJAX!");
            return false;
            }
            }
  }
function stateck()
    {
    if(httpxml.readyState==4)
      {
//alert(httpxml.responseText);
var myarray = JSON.parse(httpxml.responseText);
// Remove the options from 2nd dropdown list
for(j=document.testform.model.options.length-1;j>=0;j--)
{
document.testform.model.remove(j);
}
for (i=0;i<myarray.data.length;i++)
{
var optn = document.createElement("OPTION");
optn.text = myarray.data[i].ModelName;
optn.value = myarray.data[i].ModelName;  // You can change this to subcategory
document.testform.model.options.add(optn);

}
      }
    } // end of function stateck
    var url="dd.php";
var cat_id=document.getElementById('s1').value;
url=url+"?cat_id="+cat_id;
url=url+"&sid="+Math.random();
httpxml.onreadystatechange=stateck;
//alert(url);
httpxml.open("GET",url,true);
httpxml.send(null);
  }
</script>

这是相关表格的代码。这适用于生成第一个字段。

<form name="testform" method='POST' action='mainck.php'>
Name:<input type=text name=fname>
<?php
echo "<br>Select Brand <select name='brand' id='s1' onchange=AjaxFunction();>
<option value=''>Select One</option>";

$sql="SELECT DISTINCT Id, BrandName FROM tbl_brands order by BrandName"; // Query to collect data from table

foreach ($dbo->query($sql) as $row) {
echo "<option value=$row[Id]>$row[BrandName]</option>";
}
?>
</select>

然后它使用一个名为dd.php的页面,它从第一个下拉选择中获取变量,运行MySQL查询,然后将信息输出到第二个drowpdown。

<?php
@$cat_id=$_GET['Id'];
//$cat_id=2;
/// Preventing injection attack ////
if(!is_numeric($cat_id)){
echo "Data Error";
exit;
 }
/// end of checking injection attack ////
require "config.php";

$sql="SELECT ModelName FROM tbl_model WHERE tbl_model.Id IN (SELECT DISTINCT ModelId FROM tbl_products WHERE BrandId=$brand)";
$row=$dbo->prepare($sql);
$row->execute();
$result=$row->fetchAll(PDO::FETCH_ASSOC);

$main = array('data'=>$result);
echo json_encode($main);
?>
问题是页面没有得到变量。如果我注释掉@$cat_id=$_GET['Id'];然后将其替换为$cat_id=2;的设置变量,那么整个过程就会完美无缺。

问题:正在传递变量。主页面没有将变量发送到我的页面dd.php

2 个答案:

答案 0 :(得分:4)

在制作xmlhttp请求时,你的网址是这样的 url=url+"?cat_id="+cat_id;但是在你的dd.php中,你试图让$_GET['Id'];不在那里。

$_GET['Id'];替换为$_GET['cat_id'];

注意 - 永远不要使用@来抑制错误。隐藏某些东西并不会使它不存在。也可以在ide / editor中使用linter。

答案 1 :(得分:1)

从您在ajax函数上的网址中我可以看到您将变量发送为 cat_id ,但是您可以在php端将其捕获为 Id

两侧的变量名称必须相同。

尝试$ _GET ['cat_id']而不是$ _GET ['Id']。应该管用。