2015-03-31 98 views
0

我在建立一个数据库系统时遇到了一个非常恼人的问题。这很难解释,但我会尝试。 该系统用于记录修理厂。 它使用PHP,MySQL,Javascript和Jquery构建。 运行在一个群晖DS212 +与DSM 5.1 我有问题,3个文件:MySQL自动重复删除

vr_edit.php 
vr_edit_save.php 
vr_edit_cancel.php 

当开始repport该文件生成一个新的记录:

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显然保存数据。

在你有posibillty取消报告编辑表单:

<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 

这一切运作良好,但现在的问题踢当我创建一个新的repport我已经删除了一个之后。它获得与删除的相同的id(vrnr),并且很好,它应该是。 但突然它会在没有任何脚本被调用的情况下再次删除记录。它就像是随机的。有时它会在几秒钟内完成,有时会在一分钟后完成,有时甚至完全没有。

我一直在努力寻求解决方案,但没有结果。 我做了一个日志系统,一个基于文件的和一个基于数据库的日志系统。但是当我打开日志系统时,这个错误神奇地消失了。

我迷失在此,任何人都可以帮助我吗?

+1

您不应该使用GET请求来删除或修改数据,请始终使用POST。这将避免浏览器尝试获取链接以加快浏览速度,意外重新加载等问题。 – jeroen 2015-03-31 08:54:13

+0

@jeroen - 感谢您的评论。你认为这是什么造成这种情况?如果关闭浏览器并再次打开页面,则不会发生。它只会删除之前删除的记录标识。所以如果是浏览器这样做的话,它只会在它做完之前做到。 – 2015-03-31 09:40:22

+0

它当然看起来像它;这听起来像您的浏览器正在重新加载以前加载的页面。 – jeroen 2015-03-31 10:13:23

回答

0

解决方法是使用POST而不是GET作为评论中建议的@jeroen。