这是一个排序脚本。我想通过投票来订购我的帖子。我在函数中使用if语句来检查选择了什么顺序并根据它显示帖子。
以下函数在我的查询中插入数据。
function vote_orderby( $orderby )
{
global $vote_sort;
if( $vote_sort == "most_voted") {
// order by most votes
return "votes DESC"; //inserts into query
}
// return default order by if no votes
return $orderby;
}
HTML
$vote_sort = "most_voted"; //should be picked up by function
..function
..loop
我想生成,
$query = "SELECT * FROM posts ORDER BY votes DESC";
但是帖子是按日期排序的。它可以在没有if语句的情况下工作,这可以确保我没有MYSQL错误。
如何将$vote_sort
值传递给函数?
注意:我知道SQL注入风险,我会很快过滤掉所有内容。
答案 0 :(得分:0)
你可能想要这样的东西:
function vote_orderby( $orderby='most_voted' ) {
if( $orderby == "most_voted") {
// order by most votes
return "votes DESC"; //inserts into query
}
// return default order by if no votes
return $orderby;
}
在您的查询中,您需要与此相似的内容
// this will give you the default;
$orderby = vote_orderby();
$query = 'SELECT * FROM posts ORDER BY ' . $orderby;
或
// this will give you the name;
$orderby = vote_orderby('NAME DESC');
$query = 'SELECT * FROM posts ORDER BY ' . $orderby;
但您可能只想将一个变量设置为sort方法并将其传递给查询。在函数中执行此操作有点过分,或者您可以将整个查询添加到其中并返回正确的查询。
答案 1 :(得分:0)
要回答您的评论并展开迈克尔上面的解决方案,以下是您可能想要做的事情......
function vote_orderby($orderby) {
switch($orderby) {
// Sort by most votes
case 'most_voted': $sort = 'votes DESC'; break;
// Sort by least votes
case 'least_voted': $sort = 'votes ASC'; break;
// Default to most votes if does not match any other option
default: $sort = 'votes DESC'; break;
}
return $sort; // Return query statement
}
然后你的查询语句就像......
$sortby = $_GET['sort']; // However you want to get the way to sort
// If $sortby is empty, it will default to most_voted via function
$order = vote_orderby($sortby);
$query = "SELECT * FROM posts ORDER BY ".$order;
这更像是一种对系统进行编码的永久方式,可以防止人们注入您的MYSQL查询,轻微错误也不会导致未来。
过去我编写了很多类似的系统,这是最好的方法之一。