Intereting Posts
Отправка электронной почты с помощью PHP и обеспечение ее блокировки Как я должен возвращать несколько переменных в функцию (для лучшей практики)? PHP Image Uploader – IE "pjpeg" Тип MIME, не работает Может кто-нибудь объяснить немного об этом утверждении о функции mysqli close? Как проверить URL-адрес, но игнорировать, если http: // или пустым? Частная система чата MYSQL-запрос ORDERBY и GROUPBY Безопасный запрос ajax GET / POST для сервера Asterisk AGI: Как получить или установить значение глобальной переменной? Как использовать php count вставить пару слов (string) в MySQL Пребывание на той же странице без обновления после добавления в базу данных Twitch API – не может получить токен аутентификации с помощью PHP Неопределенная ошибка индекса при $ em-> clear () в Symfony2 Текст водяного знака с использованием imagettftext Легкий вопрос о том, как писать мои записи в виде массива PHP Вход CURL по сценарию на сайт Joomla

PHP и MYSQL: как я могу игнорировать пустые переменные из

если у меня есть 4 переменные, и я хочу выбрать значения DISTINCT формы базы данных

<?php $var1 = ""; //this variable can be blank $var2 = ""; //this variable can be blank $var3 = ""; //this variable can be blank $var4 = ""; //this variable can be blank $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE **keywords ='$var1' OR author='$var2' OR date='$var3' OR forums='$var4'** "); ?> 

примечание: некоторые или все переменные ($ var1, $ var2, $ var3, $ var4) могут быть пустыми

что я хочу: я хочу игнорировать пустые поля

скажем, что $ var1 (keywords) пуст, он выберет все пустые записи, но я хочу, чтобы $ var1 был пуст, результат будет подобен

 $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE author='$var2' OR date='$var3' OR forums='$var4' "); 

если $ var2 пуст, результат будет подобен

 $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE keywords ='$var1' OR date='$var3' OR forums='$var4' "); 

если $ var1 и $ var2 пусты, результат будет подобен

 $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE date='$var3' OR forums='$var4' "); 

и так далее

Попробуй это.

 $vars = array( 'keywords' => '', // instead of var1 'author' => '', // instead of var2 'date' => '', // instead of var3 'forums' => '', // instead of var4 ); $where = array(); foreach ($vars as $varname => $varvalue) { if (trim($varvalue) != '') $where[] = "`$varname` = '" . mysql_real_escape_string($varvalue) . "'"; } $result = mysql_query("SELECT DISTINCT title, description FROM table WHERE " . join(" OR ", $where)); 

Спасибо, что каждый конкретный экспериментX .. Ваш ответ помог мне получить правильную функцию. Я просто заменил (isset) на (! Empty) .. Тогда каждая вещь будет больше, чем ОК

 $vars = array( (!empty($_GET["var1"]))? " keyword = '". $_GET["var1"] ."' ": null, (!empty($_GET["var2"]))? " author = '". $_GET["var2"] ."' ": null, (!empty($_GET["var3"]))? " date = '". $_GET["var3"] ."' ": null, (!empty($_GET["var4"]))? " forums = '". $_GET["var4"] ."' ": null ); function myfilterarray($var) { return !empty($var)?$var: null; } $newvars = array_filter($vars, 'myfilterarray'); $where = join(" OR ", $newvars); $sql = "SELECT DISTINCT title, description FROM table ".(($where)?"WHERE ".$where: null); echo $sql; 

с этой функцией, если есть пустая переменная, ею будет пренебрегать

Еще раз спасибо за ваше полезное предложение

сделайте строку строки выбора перед вызовом mysql_query (…), чтобы сделать что-то в этом роде:

 $queryString = "Select DISTINCT title, description FROM table WHERE"; if(!empty($var1)) $queryString .= " keywords = $var1"; 

и т. д. для всех ваших переменных. вы также можете реализовать цикл for и цикл через переменную $ var1 – $ var # и проверить на пустое ($ var #)

Почему вы не просто создаете структуру if else? подобно

 if ($var1!="" && $var2!="" && $var3!="" && $var4!=""){ $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE keywords ='$var1' OR author='$var2' OR date='$var3' OR forums='$var4' ") } else if ($var2!="" && $var3!="" && $var4!=""){ $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE author='$var2' OR date='$var3' OR forums='$var4' "); } else if { ... } 

(Я только что разместил ниже в своем дублирующем сообщении, поэтому я снова разместил здесь ниже)

Простите меня, если что-то не так, очень поздно, и я просто набрал это в блокноте в Windows, без среды для тестирования. * Используйте с осторожностью * 🙂

 $vars = array( 'blah1' => '', 'blah2' => '', 'blah3' => '', ); $sql_statement = "SELECT first, last FROM names WHERE"; $clause = ""; foreach($vars as $k=$v) { $k = trim($k); if(!empty($k)) { $clause .= " `$k` = '$v' OR"; } } $clause = rtrim($clause, "OR"); // $clause should have what you want. 

Ну, есть способы сделать это, но самый короткий способ, который я нашел, – создать массив следующей формы

 $vars = array( (isset($_GET["var1"]))? " keyword = '". $_GET["var1"] ."' ": null, (isset($_GET["var2"]))? " author = '". $_GET["var2"] ."' ": null, (isset($_GET["var3"]))? " date = '". $_GET["var3"] ."' ": null, (isset($_GET["var4"]))? " forums = '". $_GET["var4"] ."' ": null ); function myfilterarray($var) { return !empty($var)?$var: null; } $newvars = array_filter($vars, 'myfilterarray'); $where = join(" OR ", $newvars); $sql = "SELECT DISTINCT title, description FROM table ".(($where)?"WHERE ".$where: null); echo $sql; 

Ваш результат для http://localhost/?var1=sadfsadf&var2=sadfasdf&var3=asdfasdf

  SELECT DISTINCT title, description FROM table WHERE keyword = 'sadfsadf' OR author = 'sadfasdf' OR date = 'asdfasdf' 

Ваш результат для http://localhost/?

 SELECT DISTINCT title, description FROM table