我的Ajax没有将值传递给php页面

时间:2014-08-20 16:57:50

标签: php jquery mysql ajax

我有连接到MySQL数据库的phppage.php:

<?php

    $list = 'A,B,C';

    $cxn   = mysqli_connect("localhost", $username, $password, $database) or die("Didn't connect");        
    $query = "SELECT * FROM Questions3 WHERE 1 IN ($list) ORDER BY RAND() LIMIT 10";

    $result = mysqli_query($cxn,$query) or die ("Didn't work");

    while( $row = mysqli_fetch_assoc($result) )
    {
        echo "<div>";
        echo $row['columnname'];
        echo "</div>";
    }

这会抽出10个随机数据库条目,其中A,B或C列的值为“1”。

此页面可以自行运行。但我实际上需要使用AJAX(我是新手),使用复选框从另一个页面调用它。而不是

$list = 'A,B,C' 

我需要

$list = "data1"

我主页上的jQuery是:

$(document).ready(function(){
  $("button").click(function(e){
    e.preventDefault();
    var data1 = 'A,B,C';
    $.ajax({url:"phppage.php", type:"POST", data:data1, success:function(result){
      $("#display").html(result);
    }});
  });
})

html是:

<button>Press</button>
<div id="display">Data should show here</div>    

(显然在这个简化版本中我​​忽略了复选框)。

然而,当我按下按钮时,我显示“没有工作”。所以我的JQuery中的“data1”没有转移到我的PHP列表中。

我的AJAX有什么问题:如何传输“data1”字符串?

3 个答案:

答案 0 :(得分:2)

问题在于您使用javascript发送数据的方式:

// data1 is a string
data:data1

data键需要键 - 值对,因此您必须执行以下操作:

data: {'mydata': data1}

然后你会在$_POST['mydata']中使用php中的字符串。

当你使用发布值/用户输入时,你应该确保通过在输入变量上使用预准备语句或mysqli_real_escape_string()来避免sql注入。

另请注意,在mysql中使用IN时,要使用的每个值都必须单独绑定,在使用预准备语句时不能绑定范围。

最后,您要检查数字1还是有一个名为1的列?如果是后者,则需要在反引号中引用它:

SELECT * FROM Questions3 WHERE `1` IN (?,?,?) ORDER BY RAND() LIMIT 10
                               ^^^ here

答案 1 :(得分:1)

我建议首先考虑盲目接受POST数据的风险,而不是某种形式的sanitization。也就是说,问题的直接答案(从Ajax示例获取数据到PHP示例)是告诉PHP检查传入的POST数据:

$list = $_POST['my_first_variable'];

我看到的另一个问题是您将变量( data1 )抽入您的data:参数,但未指定变量的名称。为了与上面的示例代码保持一致,您可以将调用调整为: $.ajax({url:"phppage.php", type:"POST", data:{my_first_variable: data1}, success:function(result){

理想情况下,您可以将POST数据作为名称/值对提交。 PHP确实能够使用input://将原始POST数据作为单个字符串读取,但这不是传输此类数据的标准方法。

答案 2 :(得分:-1)

$result = mysqli_query($cxn,$query)应为$result = mysqli_query($query, $cxn)