Столкнулся с проблемой повторной отправки формы. Прошу помощи, т.к. уже просто мозг вскипает.
Есть файл с функциями, файл в котором выводится статья, и форма комментирования под нее.
Проблема следующая:
Исполняется функция, которая добавляет комментарий к статье. После этого нужно как то избежать повторной отправки формы, чтоб не появлялось окно о повторной отправке данных вообще. header(Location: )
не работает поскольку до него уже были и функции и код.
Как возможно решить эту проблему?
Прошу прощения за глупый вопрос и за кучу кода. Собственно сам код.
<
?php
include_once 'functions.php';//подключаю файл с функциями
$full_article = showArticle();//функция получает из базы данных всю информацию о статье
$article_comments = selectArticleComments();//выводит комментарии для этой статьи из Базы данных
?>
<!--HEADER-->
<?php include_once '../inc/header.php'; ?>//подключаю хэдер
<div id="content">
<div class="container">//вывожу статью
<div class="row">
<section class="content__left col-sm-8">
<?php
foreach ($full_article as $full_art){
?>
<div class="block">
<h3><?= $full_art['title']; ?></h3><hr/>
<div>
<a><?= $full_art['views'] . ' '; ?>Просмотров</a>
</div>
<div class="block__content">
<div>
<img src="../media/images/<?= $full_art['img']; ?>">
</div>
<div class="full-text">
<?= $full_art['text']; ?>
</div>
</div>
</div>
<?php
}
?>
<div class="block" id="comment-add-form">//ФОРМА ДОБАВЛЕНИЯ КОММЕНТАРИЯ
<h3>Добавить комментарий</h3>
<div class="block__content">
<form class="form" method="post" action="../inc/article.php?id=<?php echo $article_comment['article_id'];?>">
<div class="form__group">
<div class="row">
<div class="col-md-6">
<input type="text" class="form__control" required="" name="name" placeholder="Имя">
</div>
<div class="col-md-6">
<input type="text" class="form__control" required="" name="email" placeholder="email">
</div>
</div>
</div>
<div class="form__group">
<textarea name="text" required="" class="form__control" placeholder="Текст комментария ..."></textarea>
</div>
<div class="form__group">
<input type="submit" class="form__control" name="do_post" value="Добавить комментарий">
</div>
</form>
</div>
</div>
</section>
<section class="content__right col-sm-4">
<!--SIDEBAR-->
<?php include '../inc/sidebar.php'?>
</section>
</div>
</div>
</div>
<footer id="footer">
<?php include '../inc/footer.php'?>
</footer>
</div>
<?php//ДОБАВЛЯЮ КОММЕНТАРИЙ
if (isset($_POST['do_post'])){
addComment();//ФУНКЦИЯ КОТОРАЯ ДОБАВЛЯЕТ КОММЕНТАРИЙ В БАЗУ ДАННЫХ
}//вставлять тут redirect нет смысла - он не сработает.
Попробуйте так:
Вверху:
<?php
include_once 'functions.php';//подключаю файл с функциями
$full_article = showArticle();//функция получает из базы данных всю информацию о статье
if (isset($_POST['do_post'])){
addComment();//ФУНКЦИЯ КОТОРАЯ ДОБАВЛЯЕТ КОММЕНТАРИЙ В БАЗУ ДАННЫХ
}
$article_comments = selectArticleComments();//выводит комментарии для этой статьи из Базы данных
?>
Это для того, чтобы во время перезагрузки страницы в $article_comments появился новый комментарий. Иначе - сообщение о комментарии есть, но видно его не будет. Внизу добавление комментария нужно убрать.
Это конечно при условии, что эта форма отправляется на эту же страницу. Если нет, тогда нужно смотреть код где обрабатывается $_POST. Если да, попробуйте action в форме оставить пустым так:
<form class="form" method="post" action="">
Вопрос решил похожим способом, как указанный вверху. Первым делом в шапке оставил только это
<?php
include_once 'functions.php';//подключаю функции
ob_start();//буферизация начата
?>
$full_article = showArticle();//функция получает из базы данных всю информацию о статье
перенес сверху непосредственно, в то место, где начинается
foreach ($full_article as $full_art){...}
a
$article_comments = selectArticleComments();
перенес туда, где начинается
foreach ($article_comments as $article_comment){...}
затем во всех подключаемых файлах вроде header, sidebar и т.д. удалил ненужные include(потому что хедер и аналогичные элементы подключаются в index.php или article.php. таким образом избежал ненужных повторов) я новичок в этом, потому подключать файлы везде где только можно я люблю))) В самом низу документа код
<?php
if (isset($_POST['do_post'])){
addComment();//добавление комментария в БД
header("Location: " . $_SERVER['HTTP_REFERER']);//возвращаем пользователя на ту же страницу(поскольку она имеет вид не просто article.php а article.php?id=4 т.е. в зависимости от id статьи. адрес меняется)
}
P.S. данный способ работает.Возможно он не идеален, но я лишь учусь. Всем огромное спасибо за помощь. Возможно кому-то тоже это поможет.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени сутокИмеется массив (только числовой) $_POST['ch'] и массив $_POST['osel'] (так же числовой)
Есть две даты с временем в формате DATETIME (напр2017-12-28 15:00 и 2017-12-29 12:00 )
В цикле wordpress есть запрос get_posts произвольного типа, в выводе которого нужно исключить мета поле cp_category со значением "Шины" и полностью мета...