[英]How can I pass a value through AJAX to alter SQL search query and return the result to HTML?
我正在尝试创建一个网页,该网页将用户偏好设置(通过复选框)设置为他们想要的报价类别。 提交后,我使用ajax访问一个PHP文件,该文件又访问一个SQL数据库并返回该类别的引用。
我的目标是允许用户选择一个或多个类别,并使他们的选择从数据库中返回一个属于其类别的随机行。 我已经到了从数据库返回随机行的地步,但是不确定如何将值传递给SQL查询以根据其首选项更改查询。
这是AJAX:
$.ajax({
url: 'php/function.php', data: "", dataType: 'json',
success: function(data)
{
var quote = data[0];
$('#content').html(quote);
}
这是PHP:
$result = mysql_query('SELECT * FROM motivators WHERE Category LIKE "%success%" ORDER BY RAND() LIMIT 1');
$array = mysql_fetch_row($result);
echo json_encode($array);
如何传递一个或多个值来代替%success%?
您可以像这样传递变量:
$.ajax({
type: 'POST',
url: 'php/function.php',
data: {
'foo': 'bar',
},
success: function(data){
var quote = data[0];
$('#content').html(quote);
}
});
然后,在您的PHP脚本中,您可以访问$_POST['foo']
,该$_POST['foo']
应填充bar
。
这就是.ajax()调用的data:
部分的内容:
data: 'formfield=somevalue'
然后在PHP中:
$formfield = $_GET['somevalue'];
请注意,您不要在一个SQL查询,否则可能导致SQL注入攻击打开直接使用这个值。 我强烈建议您停止使用不推荐使用的mysql _ *()函数库,并切换到现代mysqli或PDO库。 一旦使用了这些,带有适当占位符的简单准备语句将使您的生活变得容易得多。
要从ajax调用中获取数据,请将其传递给调用的data参数,如下所示:
var param_value;
var param2_value;
$.ajax({
url: 'php/function.php', data: {param: param_value, param2: param2_value}, dataType: 'json', type: "POST",
success: function(data)
{
var quote = data[0];
$('#content').html(quote);
}
注意上面的类型:POST,这意味着传递的数据值将存储在$ _POST数组的键中:$ _POST ['param'],$ _ POST ['param2']
然后只需在查询中使用双引号(“”而不是“”),然后将所需的php变量插入其中。
$result = mysql_query("SELECT * FROM motivators WHERE Category LIKE '%$success%' ORDER BY RAND() LIMIT 1");
确保避免对查询中插入的任何内容进行转义,以避免SQL注入漏洞。
您可以将值作为url参数发送,例如http://mysite.com/search.php?q=some parameter
。
这是一个例子:
//AJAX functionality for search
function search(str){
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){
resp = xmlhttp.responseText;
document.getElementById("resultBox").innerHTML=resp;
}
}
//Set URL parameters here
xmlhttp.open("GET","search.php?q="+str,true);
xmlhttp.send();
}
在服务器端:
//Search query
$search_q = $_GET["q"];
//Searching
$result = mysqli_query($con, "SELECT * FROM persons WHERE FirstName LIKE '%$search_q%'");
while($row = mysqli_fetch_array($result))
{
echo ' <p>' . $row[FirstName] . '</p>';
echo ' <p>' . $row[LastName] . '</p>';
}
这很简单,但是您想要什么。 (未提及安全性。请小心!)
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.