2016-07-24 51 views
2

我正在使用Ajax请求分页处理一些数据。当其中一个页码按钮被按下时,它将发送一个请求到一个单独的文件来生成表格中的下一页。如何通过Ajax请求传递查询

在我的主网页,我会碰到这样的:

$query = "Select * from table WHERE field = 'something' LIMIT 5"; 
$result = mysqli_query($con, $query); 
$row = mysqli_fetch_assoc($result); 

// dump results as table 

当我写剧本,以创建一个新的XMLHTTP请求对象,以我的“paginate.php”的文件,我怎么能携带该查询到文件,因为它可能会根据用户输入动态更改?

我想通过POST请求传递整个查询字符串作为函数参数,但我想知道是否有一个更有效的方法来做到这一点。

+0

你为什么不只是传递参数,并在PHP中,使用mysqli的编制statments? – cpugourou

+1

你绝对不希望以任何方式让你的问题暴露在JavaScript ... – cpugourou

回答

2

我是通过一个POST请求的思维只是路过整个查询字符串的函数 参数

绝对做到这一点!这真的是真的糟糕的安全做法让浏览器(即用户)直接针对您的数据库运行查询。在早期我犯了这个错误,我的网站很快就没了。

你的PHP文件应该接受参数,验证它们,然后用它们来运行查询

您XHR对象发送:page_number=5

2.你的PHP验证输入和动态建立查询:

//set page to 1 if none was provided. 
$pg = isset($_POST['page_number'])? (int)$_POST['page_number']: 1; 
$pg = max(1,$pg); // lowest allowed pg number is 1 

一旦你有页码,并且你确定它是一个整数(不是一些恶毒的SQL逗号第二发送到您的服务器的用户),您可以在查询中使用它:

$size = 5; //# of results per page 
$start = ($pg-1) * 5; 
$query = "SELECT * from myTable WHERE field='something' LIMIT $start,$size"; 

注意,如果该字段值something来自用户,你不希望直接将其包含在查询(这适用于任何用户提供的值)。相反,你应该使用准备好的发言参数化查询

资源:https://www.owasp.org/index.php/SQL_Injection

+0

谢谢你的链接和信息!我完全理解你在答案中的意思,但看起来我需要研究准备好的陈述并回到这个问题! –

+0

@TimothyFisher没问题。快乐的编码。 – BeetleJuice