如何通过 Ajax 请求传递查询
How to pass query through an Ajax request
我正在使用 Ajax 请求对一些数据进行分页。当按下其中一个页码按钮时,它将向一个单独的文件发送一个请求,以在 table.
中生成下一页
在我的主页上,我会有这样的东西:
$query = "Select * from table WHERE field = 'something' LIMIT 5";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_assoc($result);
// dump results as table
当我编写脚本来为我的 "paginate.php" 文件创建一个新的 xmlhttp 请求对象时,我如何才能将同样的查询带到文件中,因为它可能会根据用户输入动态变化?
我正在考虑通过 POST 请求将整个查询字符串作为函数参数传递,但我想知道是否有更有效的方法。
I was thinking of just passing the whole query string as a function
parameter via a POST request
绝对不要这样做!让浏览器(即用户)运行 直接查询您的数据库确实是 确实 糟糕的安全做法。我在早期犯了这个错误,我的网站很快就变成了 0wned。
您的 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
来自用户,您不希望将其直接包含在查询中(这适用于任何用户提供的值)。相反,您应该使用 准备好的语句 和 参数化查询
我正在使用 Ajax 请求对一些数据进行分页。当按下其中一个页码按钮时,它将向一个单独的文件发送一个请求,以在 table.
中生成下一页在我的主页上,我会有这样的东西:
$query = "Select * from table WHERE field = 'something' LIMIT 5";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_assoc($result);
// dump results as table
当我编写脚本来为我的 "paginate.php" 文件创建一个新的 xmlhttp 请求对象时,我如何才能将同样的查询带到文件中,因为它可能会根据用户输入动态变化?
我正在考虑通过 POST 请求将整个查询字符串作为函数参数传递,但我想知道是否有更有效的方法。
I was thinking of just passing the whole query string as a function parameter via a POST request
绝对不要这样做!让浏览器(即用户)运行 直接查询您的数据库确实是 确实 糟糕的安全做法。我在早期犯了这个错误,我的网站很快就变成了 0wned。
您的 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
来自用户,您不希望将其直接包含在查询中(这适用于任何用户提供的值)。相反,您应该使用 准备好的语句 和 参数化查询