我正在为MySql DB开发自定义CRUD。 (请原谅我的英语)未正确存储导航历史记录和会话信息中未记录的脚本访问
注:其没有被正确拷贝编辑的脚本(其中一个是第一位的dupplicate ..
我试图阻止Backspace键导航插入,更新和删除脚本,因为那些可以产生insconsitent数据库条目
CRUD产生列表,插入,查看,更新和删除脚本和附加信息insert_DB,update_DB和delete_DB脚本,它们携带适当的DB函数或提醒用户对脚本的回拨函数并将其重定向到主页。
为了防止这些页面的双重执行,插入,更新和删除页面会记录一个会话变量$ _SESSION ['Process'],其中包含要执行的下一个进程。
DB脚本检查适当的$ _SESSION ['Process']值并继续执行DB操作。如果成功,则将浏览器重定向到特定表的列表页面。
继续前进,这工作正常。但是,在用户被重定向到List List脚本之后,如果用户点击“backspace”,则用户不会被重定向到DB脚本(这会默默地失败并提醒用户),而是会被调用insert,view或update脚本,滑动数据库脚本。数据库脚本不记录在浏览器历史记录中。此外,初始的List脚本不显示正确的会话值。
例如: (这些实施例不限于示出预期的功能,并且不覆盖最好pratices,也不DB连接,等等)
ListTest.php
<?php
session_start();
$_SESSION['DBName'] = "segucom_Responsive";
echo"Request DB Data collection form <br />";
echo "Session(Insert) as Received: ", print_r($_SESSION), "<br/>";
$_SESSION [ 'Process' ] = "";
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
?>
<form method="post" name="InsertCheck" action="ListFormTest.php" >
<p><input type="hidden" name="ListRequest" value="1" ></p>
<input type="submit" value="submit" />
</form>
ListFormTest .PHP
<?php
session_start();
echo"Collect data and sent to DB Insert script <br />";
echo "Session(Insert) as Received: ", print_r($_SESSION), "<br/>";
$_SESSION [ 'Process' ] = "Insert";
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
?>
<form action="ListDBTest.php" method="post" name="InsertCheck" >
<p>Input Some data <input type="text" name="Data" ></p>
<input type="submit" value="submit" />
</form>
ListDBTest.php
<?php
session_start();
echo"Receive data and insert in to DB, Chek for Scorrect Session Process value <br />";
echo "Session(Insert) as Received: ", print_r($_SESSION), "<br/>";
if ($_SESSION[ 'Process' ] != "Insert") {
$_SESSION [ 'Process' ] = "Ilegal";
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
echo '<script type="text/javascript"> alert ("ILEGAL FORM ACCESS,");
window.location="ListTest.php";</script>';
}
$_SESSION [ 'Process' ] = "Legal";
echo "Session(Insert) as Set", print_r($_SESSION), "<br/>";
include "../../cgh/tcl.txt";
$conn = connect();
$sql = "INSERT INTO Test (`Data`) VALUES ('" . $_POST[ 'Data' ] . "');";
$res = $conn->query($sql) or die("Could not write Record, $sql " . print_r($conn->errorInfo()));
if ($res != FALSE) {
$_SESSION[ 'Process' ] = "Processed";
/*sleep(10);*/
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
echo '<script type="text/javascript"> alert ("Record Inserted");
window.location= "ListTest.php"; </script>';
} else {
$_SESSION [ 'Process' ] = "DB_Error";
/*sleep(10);*/
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
echo '<script type="text/javascript"> alert ("Record Not Inserted");
window.location= "ListTest.php";
</script>';
die();
}
?>
我能做些什么有那些按预期工作的脚本?
我搜索了StackOverflow并在搜索结果中没有提供有用的建议,其中一些导致使用定时器和延迟,但引用了AJAX或上传延迟。
我试图无济于事,几个aproaches以保证会议书面方式和HTML刷新,如:
session_write_close();
sleep(10);
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
<body onLoad="document.location.reload();">
在此先感谢
您可以检查后的数据,同时查询。前者为 。如果(isset($ _ POST)){ 做你的SQL查询。 } – kevin
非常感谢Kevin,我可能会采取你推荐的方法,但我真的很想知道我在做什么我的方法错了。前段时间我有类似的问题,我忘记了解决方案。 – Abhik