Как исправить комментарии со страницы php, которые неоднократно публиковались при перезагрузке страницы? - PullRequest
0 голосов
/ 06 апреля 2020

Привет, я пытаюсь сделать комментарий для веб-сайта, используя только php (без базы данных), почти успешно. Но комментарии постоянно публикуются снова и снова для каждой перезагрузки страницы. Как это исправить?

Мои коды в comment.php

<form action="comment.php" method="post">
<label for="name">Name:</label><br/>
<input type="text" name="yourname"><br>
<label for="name">Comment:</label> <br/>
<textarea name="comment" id="comment" cols="30" rows="10"></textarea><br/>
<input type="submit" value="submit">
</form>

<?php
$yourname = $_POST['yourname'];
$comment = $_POST['comment'];
$data = $yourname . "<br>" . $comment . "<br><br>";
$myfile = fopen("comment.txt", "a"); 
fwrite($myfile, $data); 
fclose($myfile);
$myfile = fopen("comment.txt", "r");
echo fread($myfile,filesize("comment.txt"));
?>

Ожидаемый вывод,

Когда пользователь вводит имя, комментирует и отправляет, он должен оставить комментарий. (При перезагрузке он не должен повторять последний опубликованный комментарий снова)

Получается вывод,

Когда пользователь вводит имя, комментарий и отправляет , оставь комментарий. Но, когда перезагрузите / refre sh этой страницы, он снова публикует последний комментарий. Если еще раз перезагрузил, снова выкладываю последний комментарий. это повторяется при каждой перезагрузке страницы.

Пожалуйста, помогите мне исправить мой код. Это будет очень полезно. Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вы можете использовать PRG Pattern , чтобы избежать многократных отправок.

Прежде всего, проверьте, является ли метод запроса POST. Если это так, сохраните комментарий и затем перенаправьте назад (или любую другую страницу, которую вы хотите):

<?php
$myfile = fopen('comment.txt', 'a');

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $yourname = $_POST['yourname'];
    $comment = $_POST['comment'];
    $data = $yourname . "<br>" . $comment . "<br><br>"; 
    fwrite($myfile, $data); 
    fclose($myfile);
    header('Location: comment.php');
    die();
}

$myfile = fopen('comment.txt', 'r');
echo fread($myfile, filesize('comment.txt'));
?>
0 голосов
/ 06 апреля 2020

Первое обучение PHP. Повезло тебе. Хотя, может быть, лучше проведешь время и научишься Python. В любом случае у вас есть 2 вещи, происходящие здесь.

Во-первых, каждый раз, когда пользователь переходит на страницу, блок php выполняется независимо от того, была ли отправлена ​​какая-либо информация. Вы хотите обернуть свой код php в оператор if, например:

if( count($_POST) )
{
 $yourname = $_POST['yourname'];
 $comment = $_POST['comment'];
 $data = $yourname . "<br>" . $comment . "<br><br>";
 $myfile = fopen("comment.txt", "a"); 
 fwrite($myfile, $data); 
 fclose($myfile);
 $myfile = fopen("comment.txt", "r");
 echo fread($myfile,filesize("comment.txt"));
}

Ваша вторая проблема заключается в том, что, как только вы что-то поместили в POST, каждый раз, когда вы перезагружаете страницу (через F5), а не как при перезагрузке из сеанса fre sh необходимо очистить массив POST. Есть много способов сделать это, я думаю, что лучше всего придерживаться этого после этого эха:

foreach( $_POST as $key=>$val )
{
   unset( $_POST[$key] );
}

См. Эту ссылку для получения дополнительной информации - [ Сброс переменных записи после отправки формы

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...