2013-03-29 2 views
0

Заранее спасибо за проверку этого вопроса.MySQL/PHP - переменная пользовательского фильтра для возврата всех значений

У меня есть серия элементов выбора HTML, в которых пользователь может определить, какие данные они хотят возвращать из базы данных MySQL. Каждый из вариантов хранится в переменной. Некоторые из параметров позволяют пользователю выбирать «Нет предпочтений», и в этом случае оператор sql должен принять переменную, позволяющую ему возвращать все поля этого конкретного столбца.

Я использую PHP для справки.

Существует ли это, или это плохой код? настоящий СКП оператор принимает переменные в этом формате

AND `operationalTier1`='$userOps' 
AND `modelName`='$userEndpoint' 
AND `status`='$userStatus' 
AND `sourceName`='$userSource' 
AND `metSLA`='$userSLA' 

выбрана для пользователя выбирать в этом формате

<h3>Data Filters</h3> 
      <p>Case Created</p> 
      <form action="index.php" method="post"> 
      <p>Ops Tier 1</p> 
      <select name="ops_1_select"> 
       <option>No Preference</option> 
       <option>Add/Create</option> 
       <option>Delete/Remove</option> 
       <option>Fix</option> 
       <option>Inform</option> 
      </select> 

Setting опции переменной

if ($_POST['ops_1_select'] = "No Preference") 
      { 
       $userOps= XXXX 
      } else 
      { 
       $userOps= $_POST['ops_1_select']; 
      } 

Поэтому, если пользователь выбирает «Нет предпочтений», мне нужна переменная для хранения чего-то, что вернет все уровни ops из db, которые заменили бы XXXX

+0

Можете ли вы опубликовать код, который вы уже написали? – zajd

+0

Это смешанное с множеством других элементов, но я попытаюсь выявить ключевые части – user2217666

ответ

0

В вашем операторе if вы должны использовать оператор равенства (==), а не оператор присваивания (=). Оператор if всегда будет иметь значение true, и он установит значение выбранного вами ключа $ _POST. Изменение if ($_POST['ops_1_select'] = "No Preference") к if ($_POST['ops_1_select'] == "No Preference")

До:

if ($_POST['ops_1_select'] = "No Preference") 
      { 
       $userOps= XXXX 
      } else 
      { 
       $userOps= $_POST['ops_1_select']; 
      } 

После:

if ($_POST['ops_1_select'] == "No Preference") { 
    $userOps = "XXXX"; 
} else { 
    $userOps = $_POST['ops_1_select']; 
} 

Вы можете найти более подробную информацию here


Таким образом, на основе ваших комментариев по этому ответу я Поделитесь немного больше кода, я думаю, может помочь:

$fields = array('field1', 'field2', 'field3'); 
$query = 'text'; // should be everything up until your first WHERE 

for ($fields as $key => $val) { 
    if ($_POST[$val] == 'No Preference') { 
     // IS NOT NULL will return true as long as the field is set 
     $and = $val . ' IS NOT NULL'; 
    } else { 
     $and = $val . ' = "' . $_POST[$val] . '"'; 
    } 
    $query = $query . $and . ' AND '; 
} 

// Remove the trailing AND from $query, add anything else you need, run query 

Еще несколько заметок, ВАЛИДИТЕ ВАШИ ВХОДНЫЕ ДАННЫЕ! Если вы не используете PDO/mysqli или другой механизм абстракции базы данных, теперь самое время начать. Как и этот код очень уязвим для SQL-инъекции. Выезд this question

+0

Спасибо, что подобрали это, но знаете ли вы, какое значение я могу передать, чтобы просто вернуть все значения в экземпляре «Нет предпочтений» « – user2217666

+0

Зачем вам нужно передавать все значения? После того, как вы извлекли данные $ _POST, вы можете сделать другой оператор if, например: if ($ userOps == "XXXX") {// запускать запрос, который не заботится об их предпочтении} else {// запускать запрос, который делает заботиться о $ userOps} ' – zajd

+0

Учитывая, что есть несколько пользовательских выборок для фильтрации по этому поводу, это означает исключение из возможностей и комбинаций фильтрации – user2217666

0

Я бы использовал LIKE insted of = и добавил %.

AND `operationalTier1` LIKE '$userOps' 

И:

$userOps= '%'; 

Или вы можете удалить условие AND operationalTier1='$userOps' из вашего SQL заявление, когда No Preference установлен.

+0

Спасибо Marcel, проблема в том, что есть приблизительно 8 пользователей, поэтому, как бы я определил, были ли они или не выбрали вариант без создания сотен операторов sql для каждой возможной комбинации – user2217666

+0

Вы также можете добавить 'value ="% "' к опции выбора. для удаления операторов if. Но я не очень понимаю вашу проблему. –

+0

Трудно объяснить, что я должен был бы показать вам код, но его сотни строк в целом – user2217666

Смежные вопросы