Итак, у меня проблемы с проверкой пустого значения. Как я могу решить эту проблему? Я хочу проверить, существует ли category_name в базе данных (она работает), и я хочу проверить, пуст ли ввод (это не работает). Вот мой код:

PHP:

 <?php
    error_reporting(E_ERROR);
    include("../db_config.php");
    $category = mysqli_real_escape_string($conn, $_POST['category']);
    $result = "SELECT * FROM category WHERE category_name='$category'";
    $rs = mysqli_query($conn,$result);
    $data = mysqli_fetch_array($rs);
    if($data > 1 || $category === NULL)
    {
        echo "<script>
        alert('Category name already exist or the value is empty.');
        window.location.href='category.php';
        </script>";
    }

    else
    {   
        $sql[0] = "INSERT INTO category (category_name) VALUES ('$category')";
        if(mysqli_query($conn, $sql[0]))
        { 
                header("Location:category.php");
                exit();
        } 
        else
        {
        echo "ERROR: Could not able to execute $sql[0]. " . mysqli_error($conn);
        }
    $conn->close();
    }
?>

HTML:

 <form action="category_insert.php" method="post" enctype="multipart/form-data">
        <input type="hidden" name="mode" value="add">
        Name:<br />
        <input type="text" name="category" placeholder="Category name"><br><br>
        <input type="submit" value="Submit"><br><br>
    </form>
0
user6447590 29 Июн 2016 в 21:07
2
mysqli_real_escape_string никогда не вернется NULL. НИКОГДА .
 – 
u_mulder
29 Июн 2016 в 21:09
1
$category === NULL не в том месте. Вам нужно сначала использовать здесь empty() / !empty(), а затем назначить его.
 – 
Funk Forty Niner
29 Июн 2016 в 21:09
Сделайте поле категории обязательным .
 – 
Rick S
29 Июн 2016 в 21:09
Сравните его с пустой строкой "" или посчитайте длину строки, чтобы убедиться, что в ней что-то есть.
 – 
RisingSun
29 Июн 2016 в 21:12
1
Это подойдет для первого прохода, но вы никогда не должны полагаться исключительно на удаленного или ненадежного клиента, который сделает вашу проверку за вас.
 – 
Darwin von Corax
29 Июн 2016 в 21:13

1 ответ

Лучший ответ

Функция mysqli_real_escape_string возвращает экранированную строку (как вы можете прочитать в документации здесь http://php.net/manual/en/mysqli.real-escape-string.php), поэтому невозможно ожидать NULL в переменной $category. Замените эту часть вашего кода

if($data > 1 || $category === NULL)

С этим

if($data > 1 || empty($category))
1
zajonc 29 Июн 2016 в 21:13
Спасибо, это исправлено. 5 минут и я не могу принять твой ответ
 – 
user6447590
29 Июн 2016 в 21:16