【发布时间】:2012-09-16 23:19:34
【问题描述】:
目前我有一个简单的搜索查询,其工作原理如下:
$username = $_SESSION['username'];
$chosencategory = $_GET['category'];
$price = $_GET['price'];
$search = $_GET['search'];
$terms = explode(" ", $search);
if ($price && $chosencategory){
$sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST (:search IN BOOLEAN MODE) AND category='$chosencategory' ORDER BY price $price";
$q = $conn->prepare($sql) or die("failed!");
$q->bindValue(':search',"%".$search."%",PDO::PARAM_STR);
$q->execute();
}
例如,当用户选择“显示价格从最低到最高”时,发送到$_GET['price'] = ASC 的值,但是我不确定这是否是对结果进行排序的安全方法,有没有人有更好的方式?
这种方法也不是最好的,因为当用户选择“显示价格从最低到最高”之类的排序选项时,下拉框会回显已发送到 $_GET['price'] 的值,即“ASC " 所以在表单发送后的下拉框中会显示为 ASC!
对不起,如果这令人困惑,如果您希望我重新解释这一点,请发表评论,非常感谢任何帮助或建议!
【问题讨论】:
-
这种情况下order by只有两个值,为什么不硬编码呢?
<option value="ASC" <?php if($_GET["price"] == "ASC") { echo " selected='selected'"; } ?>>Low to high</option>或类似的东西。你也可以使用数组和循环来做同样的事情。 -
完美!正是我需要的!谢谢你
-
您为什么不准备所有值或至少检查 ASC/DESC?等
-
您所做的事情不安全,如果您还没有被黑客入侵,那么您将会被黑客入侵!绑定所有值。您已经完成了 90% 的路程。
-
感谢您的反馈!我将如何绑定其余的值?
标签: php mysql search pdo sql-order-by