Передача переменной в функцию - PullRequest
0 голосов
/ 29 ноября 2010

Это для сценария сортировки. Я хочу заказать свои сообщения по голосам. Я использую оператор 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, скоро все отфильтрую.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2010

Чтобы ответить на ваш комментарий и расширить решение Михаэля выше, вот что вы, возможно, захотите сделать ...

 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, и незначительные ошибки не приведут в будущем.

В прошлом я кодировал много подобных систем, и это один из лучших способов.

0 голосов
/ 29 ноября 2010

Вы, вероятно, хотите что-то вроде этого:

 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;

Но вы можетепросто хотите установить переменную для метода сортировки и передать ее в свой запрос.Делать это в функции - это немного излишне, или вы можете просто добавить весь запрос внутрь и вернуть правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...