Почему этот код работает, когда я обновляю страницу? Что-то не так с условием isset ($ _ POST [‘topuj’])? «Топуй» — это название кнопки.
<?php
if(isset($_COOKIE['prihlaseny'])) {
require('db.php');
$meno1 = $_COOKIE['prihlaseny'];
$prikaz = $mysql->query("SELECT * FROM `uzivatelia` WHERE `meno`='{$meno1}'");
while($a = $prikaz->fetch_assoc()) {
$kredit = $a[kredity_topovania];
$plus = $a[topovanie];
if( $kredit > 0) {
echo "<form method='post'>";
if( $kredit == 1) echo "Máš $kredit kredit.";
if( $kredit == 2 || $kredit == 3 || $kredit == 4) echo "Máš $kredit kredity.";
if( $kredit > 4) echo "Máš $kredit kreditov.";
echo "<br /><button name='topuj' value='$a[id]' />Topovať</button>
</form>
";}
}
if( isset($_POST['topuj'])) {
$id = $_POST['topuj'];
$mysql->query("UPDATE `uzivatelia` SET topovanie='$plus'+1, kredity_topovania='$kredit'-1 WHERE id='{$id}'");
}
Скорее всего, вы испытываете «проблема двойного представления»
Если последним HTTP-запросом, сделанным браузером, был запрос POST с полезной нагрузкой данных (в вашем случае ввод данных из формы), и вы обновили / перезагрузили веб-страницу, браузер повторно отправит данные POST.
Который, очевидно, вызовет ваш isset($_POST['topuj'])
состояние.
Браузер обычно выдает предупреждение, что он собирается сделать это.
Если вы разрабатываете и хотите избежать этого, я бы вернулся к форме, повторно введя URL-адрес в адресной строке или щелкнув ссылку обратно на форму.
Для производственного приложения вы можете захотеть реализовать лучшее решение, чтобы пользователь не мог перезагрузить страницу.
Например, перенаправить пользователя со страницы после успешной отправки, но есть и много (возможно, лучших) решений.
Других решений пока нет …