0

我正在尝试创建一个网页,该网页将接受用户对他们想要的报价类别的偏好(通过复选框)。提交后,我使用 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% ?

4

4 回答 4

1

您可以像这样传递变量:

$.ajax({
    type: 'POST',
    url: 'php/function.php',
    data: { 
        'foo': 'bar', 
    },
    success: function(data){
       var quote = data[0];
       $('#content').html(quote); 
    }
});

然后在您的 PHP 脚本中,您可以访问$_POST['foo']应该使用bar.

于 2013-05-17T20:46:42.530 回答
0

您可以将值作为 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>';
}

这很简单,但你想要什么。(没有提到安全性。小心!)
祝你好运!

于 2013-05-17T21:06:35.423 回答
0

这就是data:.ajax() 调用的一部分:

data: 'formfield=somevalue'

然后在 PHP 中:

$formfield = $_GET['somevalue'];

请注意,您不要直接在 SQL 查询中使用此值,这会使您容易受到 SQL 注入攻击。我强烈建议您停止使用已弃用的 mysql_*() 函数库并切换到现代 mysqli 或 PDO 库。一旦使用这些,一个简单的准备好的声明和适当的占位符会让你的生活变得更轻松。

于 2013-05-17T20:46:52.650 回答
0

要从 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 注入漏洞。

于 2013-05-17T20:48:13.720 回答