У меня действительно раздражающая проблема с системой баз данных, которую я строю. Это довольно сложно объяснить, но я попробую.
Система для документирования ремонта в мастерской.
Это сборка с использованием PHP, MySQL, Javascript и Jquery.
Работа на Synology DS212 + с DSM 5.1
У меня есть 3 файла в вопросе:
vr_edit.php
vr_edit_save.php
vr_edit_cancel.php
При запуске отчета этот файл генерирует новую запись:
vr_edit.php?edit=new
$sth = $conn->prepare($sql_str);
$sth->execute($dataArr);
$vrnr = $conn->lastInsertId();
header("Location: ".$goto);
и перенаправляет браузер на:
vr_edit.php?edit=45000
Затем vr_edit читает запись и показывает форму для ее редактирования. Это отправляется в vr_edit_save, который, очевидно, сохраняет данные.
В форме редактирования вы можете отменить отчет:
<button style="width: 165px; margin-top: 8px;" type="button" id="anullerknap" onclick="location.href=('vr_edit_cancel.php?vrnr=46008&setid=46008&cancelReturn=%2FVR3000-TEST%2Findex.php'); return false;"><u>A</u>nullér</button>
vr_edit_cancel.php:
$sql_str = "DELETE FROM `v_rapporter` WHERE vrnr = ".$vrnr." AND status = 'oprettet' LIMIT 1";
$sth = $conn->prepare($sql_str);
$sth->execute();
$sql_str = "ALTER TABLE `v_rapporter` AUTO_INCREMENT = 1;";
$sth = $conn->prepare($sql_str);
$sth->execute();
unset($sth);
unset($sql_str);
unset($conn);
header("Location: ".$goTo);//This points to old location before creating new record
Все это работает хорошо, но теперь проблема вступает в силу. Когда я создаю новый отчет после того, как я его удалил. Он получает тот же идентификатор (vrnr), что и удаленный, и это нормально, так и должно быть.
Но неожиданно он снова удаляет запись без вызова скрипта. И это как бы совершенно случайно. Иногда это происходит через несколько секунд, иногда через минуту, а иногда и вовсе.
Я усердно работал над решением, но безрезультатно.
Я сделал систему регистрации, основанную на файлах и базу данных. Но когда я включаю систему регистрации, ошибка волшебным образом исчезает.
Я потерялся в этом, кто-нибудь может мне помочь?
Решением этой проблемы было использование POST вместо GET, как предложено @jeroen в комментариях.
Других решений пока нет …