2015-12-15 2 views
3

У меня есть запрос с 3 полями ввода, и я хочу, чтобы запрос показывал результаты, если один или два или все 3 ввода заполнены. Таким образом, я попытался с равен нулю, но это не работает, или я могу сделать это с помощью и/или запроса?mysql показать все, если входное значение пуст

$sql = "SELECT * FROM profiles"; 
    $sql .= " WHERE (profilename = '". $_POST["profilename"] ."' OR profilename IS NULL) "; 
    $sql .= " AND (ort = '". $_POST["ort"] ."' OR ort IS NULL) "; 
    $sql .= "AND (jahren = '" . $_POST["alter"] . "' OR jahren IS NULL) "; 

Большое вам спасибо за помощь!

+0

Вместо «И» 'использования OR ', так как вы хотите показать результаты, даже если заполнено одно поле. – Jas

ответ

0

Попробуйте это:

$sql = " 
    SELECT * FROM profiles 
    WHERE (profilename = '$_POST[profilename]' OR profilname = NULL) 
    OR (ort = '$_POST[ort]' OR ort = NULL) 
    OR (jahren = '$_POST[alter]' OR jahren = NULL) 
"; 

Совет:

Это $string = "Test $test also"; лучше, чем $string = "Test " . $test . " also";. Только при добавлении ", нет для '.

ред ..

0

Проверьте любое поле ввода был заполнен, прежде чем вы бы отправить запрос:

if (isset($_POST['profilename']) || isset($_POST['ort']) || isset($_POST['alter'])){ 
    $clause = "where "; 
    $conds = []; 
    if (!empty($_POST['profilename'])) $conds[] = "profilename = '{$_POST['profilename']}'"; 
    if (!empty($_POST['ort'])) $conds[] = "ort = '{$_POST['ort']}'"; 
    if (!empty($_POST['alter'])) $conds[] = "alter = '{$_POST['alter']}'"; 
    if(count($conds) > 0){ 
     $clause .= (count($conds) == 1)? $conds[0] : implode(' AND ',$conds); 
     $sql = "SELECT * FROM profiles " . $clause; 
     ... 
     // sending query 
    } 

} 
0

Я бы обновить свой код на следующее:

$sql = "SELECT * FROM profiles WHERE 1=1"; 
/* We use 'WHERE 1=1' so that we can chain all of our filters after this 
using 'AND' (or 'OR' in other situations) regardless of whether we are using the first of these filters or not */ 

if(isset($_POST["profilename"]) && $_POST["profilename"] != "") 
    $sql .= " AND profilename = '". $_POST["profilename"] ."'"; 

if(isset($_POST["ort"]) && $_POST["ort"] != "") 
    $sql .= " AND ort = '". $_POST["ort"] ."'"; 

if(isset($_POST["alter"]) && $_POST["alter"] != "") 
    $sql .= " AND jahren = '" . $_POST["alter"] . "'"; 

Это проверит каждую переменную, прежде чем включать ее в запрос. Для дополнительных POST-переменных просто скопируйте их и вставьте их в том же формате.

На стороне записки, я предложил бы использовать подготовленные заявления, а не сбрасывать переменные POST рядный, чтобы избежать эксплойтов SQL-инъекции и т.д.

Подробнее здесь: PHP: Prepared statements and stored procedures

+0

Благодарим вас за ввод. Этот sql работает частично. он работает, когда я ввожу что-то в ort и меняю. но если я использую, например, profilename, то это не сработает. –

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