我正在使用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 :(得分:2)
我在考虑将整个查询字符串作为函数传递 参数通过POST请求
绝对不要这样做!让浏览器(即用户)直接针对您的数据库运行查询确实是真正错误的安全做法。我在早期犯了这个错误,我的网站很快就出现了。
您的PHP文件应该接受参数,验证它们,然后使用它们来运行查询
1。您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
来自用户,则您不希望将其直接包含在查询中(这适用于任何用户提供的值)。相反,您应该使用预准备语句和参数化查询