我有连接到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”字符串?
答案 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)
。