Здравствуйте! Появилась проблема, которую надо решить. Я сейчас пишу небольшой модуль, небольшой магазинчик. В общем, основано там все на обработке $_POST данных. Есть формочка: HTML: <form id="prices" method="POST"> <input type="hidden" name="itemid" value="<?php echo $shop->item['gid']; ?>"> <input type="hidden" name="itemname" value="<?php echo $shop->item['name']; ?>"> <input name="buy" required type="range" min="1" max="64" onmousemove="if ( (this.value * this.value) && this.value > 0 ) this.nextElementSibling.value = 'Купить '+ Math.ceil(this.value * <?php echo $shop->item['amount']; ?>) +' единиц товара за '+ Math.ceil(this.value * <?php echo $shop->item['price']; ?>) +' рублей'" placeholder="Сколько хотите купить?"> <input name="pricbuy" type="submit" value="Купить за рубли"> </form> </form> Есть обработчик: PHP: if(isset($_POST['pricbuy'])) { $q = $shop->buyItemByMoney($user->userdata['name'], $_POST['itemid'], $_POST['itemname']); if(!$q) echo '<script>alert("Ошибка, возможно, недостаточно средств");</script>'; else echo '<script>alert("Успешная покупка");</script>'; } Прикол весь в том, что при нажатии на кнопку все нормально, покупается, но $_POST данные остаются в тех же значениях. И тупо обновив страницу покупка произойдет ещё раз, и это до тех пор, пока пользователь не вернётся обратно по кнопке "назад" (таковая имеется). Как можно решить данную проблему? Я пробовал пользоваться функцией unset после покупки, не помогает.
Ну так известно же. Редиректить надо на страницу с успехом. PHP: if (данные_из_POST_корректно_обработаны()) { header("Location: success.php"); die; }
Внесем уточнение - никто не запрещает использовать в качестве абстрактной "success.php" любую страницу сайта, хоть ту же, с которой была сделана отправка. Плюс, желательно банально очищать корзину после покупки, чтобы не было подобной проблемы. То есть, ориентироваться не только на то, что приходит от клиента, но и хранить дубликат его корзины, например, в сессии. Некоторые хранят в куках или в web-storage. Главное, чтобы после подтверждения покупки, любое из приведенных хранилищ очищалось. Тогда, если к нам приходит запрос на покупку такого-то товара, мы, не найдя его в корзине, просто отклоняем запрос. Но это специфика конкретно магазинов. В общем же случае, переадресация заголовком не должна быть частью или опорой вашей бизнес-логики, или какой-то мерой защиты. На самом деле это больше для пользователя, чтобы его не донимала и не пугала просьба повторной отправки формы. Исключительные ситуации все равно желательно как-то контролировать на уровне сервера.