Задать вопрос
morto
@morto
вечный ученик

Как в моем коде сделать проверку на пробел?

Есть форма, где нужно ввести имя и текст. Нужно проверить поле текст на пустоту (проверку если ничего не ввели делает html, но пробелы все равно проскакивают) и вывести ошибку если это так, но я не понимаю, как это сделать в моем коде, ибо тогда что-то ломается.

CODE:

<?php

error_reporting(0);

$filename = "style.css";

$mysql = new mysqli("localhost", "root", "", "gbook");

$err = '';

mysqli_set_charset($mysql, "utf8");




global $mysql;
if (!empty(trim($_POST['textForm']))) {
    if (isset($_POST['nameForm']) && $_POST['nameForm'] != '') {

        $sql = mysqli_query($mysql, "INSERT INTO `comments` (`name`, `text`) VALUES ('{$_POST['nameForm']}', '{$_POST['textForm']}')");
        Header("Location: " . $_SERVER['PHP_SELF']);
        exit;
    } else {

        $sql = mysqli_query($mysql, "INSERT INTO `comments` (`name`, `text`) VALUES ('Anonim', '{$_POST['textForm']}')");
        Header("Location: " . $_SERVER['PHP_SELF']);
        exit;
    }
} else if (empty(trim($_POST['textForm']))) {
    $err = "Вы не заполнили форму";
}






function OutputComments()
{
    global $mysql;
    $query = 'SELECT date,name,text FROM comments ORDER BY `id` DESC LIMIT 3';
    $result = mysqli_query($mysql, $query);
    $array = array();
    while ($data = $result->fetch_array(SQLITE3_ASSOC)) {
        $array[] = $data;
    }
    if (count($array) > 0) {
        foreach ($array as $row) {
            $id = $row['id'];

            $name = $row['name'];

            $letter = $row['text'];

            $date = $row['date'];
?>

            <div class="gBook__comment">
                <div class="comment-header">
                    <div class="comment-date">
                        <?php echo $date ?>
                    </div>
                    <div class="comment-name">

                        <?php echo $name ?>

                    </div>
                </div>
                <div class="comment-text">
                    <?php echo $letter ?>
                </div>

            </div>

<?php
        }
    }


    mysqli_free_result($result);
}
?>


HTML:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css?<?php echo filemtime($filename); ?>">
</head>

<body>
    <div class="gBook">
        <div class="gBook__comments">


            <?php



            OutputComments();
            echo $err;
            ?>


        </div>
        <form action="" method="post" class="gBook__form-item">
            <input type="text" name="nameForm" class="item__nameForm"><br>
            <textarea required name="textForm" class="item__textForm" pattern = "&nbsp;"></textarea><br>
            <input type="submit" class="item__btnForm"><br>
        </form>
    </div>

</body>

</html>
  • Вопрос задан
  • 211 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
В общем конечно весь тот код - одна сплошная ошибка.
Проблема в том, что автор видео, у которого ты списывал этот код, сам знает не больше тебя. Но при этом лезет учить других. Такая вот печальная история с пхп образованием у нас в стране.

Начать можно с проверки на пробел. Хотя нет. Начать надо со строчки
error_reporting(0);
за которую надо бить по рукам линейкой. А лучше сразу ботинками.
чтобы никогда, даже в тяжелой ремиссии после запоя, не возникало даже краешка мысли так делать. И чтобы везде, где бы не встречалась команда error_reporting();, у нее был всегда только один вариант - E_ALL
error_reporting(E_ALL);

Теперь вернемся к нашим пробелам.
Для $_POST['textForm'] она делается, но вот для $_POST['nameForm'] уже почему-то нет.
Хотя казалось бы - почему бы не применить один и тот же подход для обоих полей?
То есть тупо написать точно так же, if (trim($_POST['nameForm'])) {? Только убрав !empty(), поскольку она здесь как собаке пятая нога.

Дальше надо немного помыслить логически. И обнарудить, что у тебя два совершенно идентичных участка кода, которые различаются только одной переменной. Это значит, что надо именно эту переменную в условии и определять, а остальное вынести из него.
if (trim($_POST['textForm'])) {
    if (trim($_POST['nameForm'])) {
        $name = $_POST['nameForm'];
    } else {
        $name = 'Anonim';   
    }
    // выполняем запрос
}

при этом не забываем, что в РНР можно использовать сокращенную форму условного присвоения значения переменой вместо этого развесистого ифа. И вы итоге получить куда более осмысленный код
<?php
error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysql = new mysqli("localhost", "root", "", "gbook");
$mysql->set_charset("utf8");

$filename = "style.css";
$err = '';

$text = trim($_POST['textForm']);
$name = trim($_POST['nameForm']);
if ($text) {
        $name = $name ?: 'Anonim';   
        $stmt = $mysql->prepare("INSERT INTO `comments` (`name`, `text`) VALUES (?,?)");
        $stmt->bind_param("ss", $name, $text);
        $stmt->execute();
        Header("Location: " . $_SERVER['PHP_SELF']);
        exit;
} else {
    $err = "Вы не заполнили форму";
}


Кода в два раза меньше, но при этом он осмысленный, аккурантый и безопасный
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@drawnofmymind
Сделать это надо именно в PHP и чтобы это работало в моем коде
- невозможно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы