Ошибка, если в форме PHP ничего не задано

Мне было интересно, как избежать ошибки при первой загрузке страницы, и она содержит форму, необходимую для функции / операции.
Проблема: я получаю ошибку, потому что форма не была отправлена ​​и переменные внутри необходимы для запуска остальной части скрипта.

Терпите мою формулировку, я начинающий.

Но давайте возьмем то, с чем я работаю, например, это все на одной странице.

Если это первая загрузка моей страницы, и я ничего не ввожу в форму, я получаю Неопознанный индекс: "переменная $", которую я использую для своей формы.

Прямо сейчас я пробегаю простое учебное пособие по strpos, которое в основном превратилось в поисковую систему, купленную в walmart.

Index.php

<html>

<head>

<title> Project # </title>
<link href="../css/stylesheet.css" rel="stylesheet" type="text/css">

</head>

<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">

    <input type="text" placeholder="Search" name="search">
    <input type="submit" name="submit" value="search">
</form>

<?php
$article = " Nulla mauris odio, vehicula in, condimentum sit amet, tempus id, metus. Donec at nisi sit amet felis blandit posuere. Aliquam erat volutpat. Cras lobortis orci in quam porttitor cursus. Aenean dignissim. Curabitur facilisis sem at nisi laoreet placerat. Duis sed ipsum ac nibh mattis feugiat. Proin sed purus. Vivamus lectus ipsum, rhoncus sed, scelerisque sit amet, ultrices in, dolor. Aliquam vel magna non nunc ornare bibendum. Sed libero. Maecenas at est. Vivamus ornare, felis et luctus dapibus, lacus leo convallis diam, eget dapibus augue arcu eget arcu.";

echo $article;

$search = $_POST['search'];

if(!isset($_SERVER['submit'])){

    if(strpos($article, $search) !== false){

echo "<br> We found what you were looking for.. ";


    }
    else{

        echo " <br> nope, remember we probably need exact matches here.";
    }

}
else {
    echo "<br> form is not set ";
}
?>


</body>

</html> 

2 ответа

Решение

$_POST["search"] изначально не существует, поэтому вам нужно проверить, если $_POST["search"] установлено.

$article = " Nulla mauris odio, vehicula in, condimentum sit amet, tempus id, metus. Donec at nisi sit amet felis blandit posuere. Aliquam erat volutpat. Cras lobortis orci in quam porttitor cursus. Aenean dignissim. Curabitur facilisis sem at nisi laoreet placerat. Duis sed ipsum ac nibh mattis feugiat. Proin sed purus. Vivamus lectus ipsum, rhoncus sed, scelerisque sit amet, ultrices in, dolor. Aliquam vel magna non nunc ornare bibendum. Sed libero. Maecenas at est. Vivamus ornare, felis et luctus dapibus, lacus leo convallis diam, eget dapibus augue arcu eget arcu.";

echo $article;

if(isset($_POST["search"])) {
    $search = $_POST['search'];

    if(!isset($_SERVER['submit'])){

        if(strpos($article, $search) !== false){
            echo "<br> We found what you were looking for.. ";
        }else{
            echo " nope, remember we probably need exact matches here.";
        }
    }else {
        echo "<br> we couldn't find it ";
    }
}

Есть много способов проверить, действительно ли пользователь предоставил какой-то ввод, а не просто отправил форму, ничего не печатая. HTML сам по себе позволяет использовать требуемую функцию, чтобы автоматически выдавать пользователю ошибку, если поле пустое.

В качестве альтернативы вы можете использовать Javascript, чтобы сделать его немного более наглядным, например, здесь. Как бы то ни было, оба вышеупомянутых метода могут быть обойдены, поэтому, если все это не сработает, вам нужно убедиться, что у вас есть какая-то "основная" защита, с которой пользователь не может обойтись, именно тогда PHP вступает в игру. Поскольку это серьезный сторонний язык, пользователь не может связываться с ним. Вы можете сделать следующее, чтобы убедиться, что поля заполнены.

if(!isset($_POST['someField']) || empty($_POST['someField'])) {
    // Error message, as the field is empty
} else {
    // Sanitize user input or do other checks.
}

"!" до isset (); просто переворачивает функцию, поэтому isset(); проверяет, установлено ли значение где "!" говорит, что не установлено. Что касается "||" это просто оператор PHP для ИЛИ, поэтому мы проверяем, не установлено ли поле ИЛИ, если оно пустое.

Если вы используете все вышеперечисленное, то, с точки зрения пользователей, это будет совершенно ясно, что сайт хочет заполнить определенное поле.

редактировать

Вы пустой (); не проверяет пробелы, поэтому используйте это:

if(!isset($_POST['someField']) || empty(trim($_POST['someField']))) {
    // Some error message
} else {
   // Fields not empty!
}
Другие вопросы по тегам