Тема: Очищення масиву $_POST[]
Зараз пишу скрипт коментарів для блогу. Все працює. Додає до бд, виводить вже додані. Загалом ось код:
// для виведення успіху/помилок при надсиланні коментарів
$success = '';
$error_name = '';
$error_email = '';
$error_comment = '';
$error = false;
// $post_id перевіряється/присвоюється з адреси
if ( isset($_POST['send_comment']) ) {
$name = '';
$name = trim( $_POST['name'] );
$name = strip_tags($name);
$name = htmlspecialchars($name);
$_SESSION['name'] = $name;
$email = '';
$email = trim( $_POST['email'] );
$email = strip_tags($email);
$email = htmlspecialchars($email);
$_SESSION['email'] = $email;
$comment = '';
$comment = strip_tags($_POST['comment']);
$comment = trim($comment);
$comment = htmlspecialchars($comment);
$_SESSION['comment'] = $comment;
if ( $name == '' ) {
$error_name = "Введіть ім'я!";
$error = true;
} else if ( strlen($name) > 25 ){
$error_name = "Задовге ім'я!";
$error = true;
}
if ( $email == '' ) {
$error_email = "Введіть пошту!";
$error = true;
} else if ( !preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i', $email) ) {
$error_email = "Введіть дійсну пошту!";
$error = true;
}
if ( $comment == '' ) {
$error_comment = "Введіть коментар!";
$error = true;
}
if ( !$error ) {
$name = mysqli_real_escape_string($link, $name);
$email = mysqli_real_escape_string($link, $email);
$email = mysqli_real_escape_string($link, $comment);
$result = add_comment($link, $name, $email, $comment, $post_id);
$success = '<p class="success">Коментар додано!</p>';
unset($_SESSION['name']);
unset($_SESSION['email']);
unset($_SESSION['comment']);
session_destroy();
header("Location: ".$_SERVER['REQUEST_URI']); // напрявляємо користувача на ту ж саму сторінку
}
}
<div class="send-comment post-box">
<h4>Залиш відгук:</h4>
<?php echo $success; ?>
<form action="/simpleblog/post/<?php echo $post_id; ?>" method="post">
<label><span class="strong">Ім'я</span>
<input type="text" name="name" required placeholder="Ім'я" maxlength="25" value="<?php if (isset($_SESSION['name'])) echo $_SESSION['name']; ?>">
</label>
<p><span class="error"><?php echo $error_name; ?></span></p>
<label><span class="strong">Пошта</span>
<input type="email" name="email" required placeholder="Пошта" value="<?php if (isset($_SESSION['email'])) echo $_SESSION['email']; ?>">
</label>
<p><span class="error"><?php echo $error_email; ?></span></p>
<label><span class="strong">Відгук</span>
<textarea required placeholder="Відгук" name="comment"><?php if (isset($_SESSION['comment'])) echo $_SESSION['comment']; ?></textarea>
</label>
<p><span class="error"><?php echo $error_comment; ?></span></p>
<input type="submit" name="send_comment">
</form>
</div>
Ніби все скинув. Загалом в мене після відсилання коментаря і перезавантаженні сторінки вискакувало таке:
Я розумію чому так. Але як правильно вирішити проблему не знаю. Додав на 65 рядку:
header("Location: ".$_SERVER['REQUEST_URI']);
Так, тепер немає цієї проблеми. Але так стираються змінні
$success = '';
$error_name = '';
$error_email = '';
$error_comment = '';
Як так бути? Полазив у гуглі і знайшов тільки один комент, що можна винести перевірку у окремий файл(зараз в мене все відсилається на той же, де можна додати коментар). Але в мене виходить та ж проблема: не можу зробити, щоб ті декілька змінних можна було з потрібними збереженими значеннями відправити і вивести на тій сторінці, де форма.
Хтось вже стикався з такою проблемою?
UPD Знайшов ось таке рішення: https://habrahabr.ru/post/149376/#comment_5050492
Але судячи з коментарів воно не найкраще. Як гадаєте?