使用ajax检索数据库

时间:2011-03-31 13:38:42

标签: php mysql ajax

我正在使用这个example来检索带有ajax的数据库结果,并且它工作得很好。

现在我不想只使用一个下拉框来检索数据库结果,而是想添加一个输入框。用户从下拉框中选择一个值后,不应显示结果,用户需要在输入框中插入一个值以便显示结果。结果应该基于输入框中插入值的下拉框TOGETHER。

您可以在上面的示例中看到php文件,其中sql请求如下所示:

$q=$_GET["q"];
$sql="SELECT * FROM user WHERE id = '".$q."'";

我在想,也许新的sql请求应该是这样的:

$q=$_GET["q"];
$q=$_GET["d"];
$sql="SELECT * FROM user WHERE id = '".$q."' AND date = '".$d."'";

其中$ d表示输入框中的值。

这可能吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

1)W3Schools的例子使用了非常糟糕的PHP代码。例如,你复制粘贴那里的代码,你可能会继续使用它,甚至没有注意到它极易SQL Injection Attacks。始终清理用户输入,始终。否则,当您看到数据库和数据消失时,请不要惊慌。

2)Word'date'是MySQL字典中的保留字。它用于指定列的数据类型或格式化日期表达式以供在查询中使用。不要为列名使用保留字,你很可能会遇到错误,而且你会想知道你的代码看起来怎么回事。

3)总是在GUI中测试你的SQL(SQLYog是我最喜欢的)来检查它是否有效,以及你是否可以根据输入以某种方式打破它。

否则 - 是的,请尝试自己的建议,试错是最好的学习方法,因为它会永远坚持下去。

答案 1 :(得分:1)

当然,你只需要在ajax调用中添加变量:

<html>
<head>
    <script type="text/javascript">
    function showUser()
    {
    str=document.getElementById("users").value;
    txt=document.getElementById("txtinput").value;
    if (str==""||txt=="")
      {
      document.getElementById("txtHint").innerHTML="";
      return;
      }
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","getuser.php?q="+str+"&d="+txt,true);
    xmlhttp.send();
    }
    </script>
</head>
<body>

<form>
<select id="users" name="users" onchange="showUser()">
<option value="">Select a person:</option>
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
<input type="text" id="txtinput" onchange="showUser()"/>
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>

</body>
</html>