Я пытаюсь передать пустое поле в php при поиске в моей базе данных. В настоящее время это работает для меня, но так как я новичок в mysql
а также php
Я был бы признателен за альтернативное или лучшее решение для моего проекта.
if (isset($_POST['submit'])){
$val1 = trim($_POST['tester']);
if($val1 == NULL){$val1 = "IS NOT NULL";} else {$val1 = "= '$val1'";}
$val2 = trim($_POST['test']);
if($val2 == NULL){$val2 = "IS NOT NULL";} else {$val2 = "= '$val2'";}
}
require ('connect.php');
$query = "SELECT * FROM report WHERE Tester $val1 AND Test $val2";
$testerdb = mysqli_query($db,$query);
Ну, первая проблема в том, что вы не проверяете, действительно ли существуют ваши данные $ _POST.
Я предлагаю вам написать какой-нибудь помощник, например, класс Request со следующими методами
public static function post($index)
{
return isset($_POST[$index]) ? $_POST[$index] : NULL;
}
public static function get($index)
{
return isset($_GET[$index]) ? $_GET[$index] : NULL;
}
Например, если вы ищете несколько полей с AND
Я могу предложить вам использовать массив ($wheres = array();
) которые вы можете добавить свои поля ($wheres[] = "Tester = $val"
), а затем вам просто нужно проверить, пуст ли ваш массив или нет. Если нет, просто взорвите его implode
функция: ($where = implode(' AND ', $wheres);
)
Итак, полный пример
$wheres = array();
if($tester = Request::post('tester'))
{
$wheres[] = '`tester` = '.$tester;
}
else
{
$wheres[] = '`tester` IS NOT NULL';
}
if($test = Request::post('test'))
{
$wheres[] = '`test` = '.$test;
}
else
{
$wheres[] = '`test` IS NOT NULL';
}
$where = sizeof($wheres) ? "WHERE ".implode(" AND ", $wheres) : "";
require ('connect.php');
$query = "SELECT * FROM report $where";
$testerdb = mysqli_query($db,$query);
Или вы можете Google для Query Builders
Постскриптум Никогда не забывайте избегать данных, которые вы собираетесь отправить в базу данных 🙂
Других решений пока нет …