我正在使用这个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表示输入框中的值。
这可能吗?
提前致谢。
答案 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>