10/10/2018, 11:37

Làm sao để khi nhấn F5 không bị insert dữ liệu nưã

Khi lập trình PHP để insert dữ liệu vào table, thường có 1 trang có form nhập liệu và 1 trang action.php để thực hiện việc insert dữ liệu, vđề là khi nhấn submit -> action.php, xong xuôi mình nhấn F5 tại trang submit thì dữ liệu lại dc chèn vào table 1 lần nưã...cho mình cách giải quyết vđề này.
bka viết 13:47 ngày 10/10/2018
Khi nhập liệu và bấm f5 sau đó dữ liệu là giống nhau. Vậy tại sao bạn không kiểm tra dữ liệu đã tồn tại hay chưa trước khi isert là được mà. Hoặc dùng security code .
hackson viết 13:49 ngày 10/10/2018
unset($_POST); sau khi đã insert;
hoặc dùng session để kiễm tra.
phamduyvt viết 13:44 ngày 10/10/2018
trong database luôn tạo khóa chính để ko cho trùng dữ liệu khi insert vào
nguyen_lan2005 viết 13:48 ngày 10/10/2018
Với ASP.NET có thể khắc phục như sau:
private bool _refreshState;
private bool _isRefresh;

protected void btnAdd_Click(object sender, EventArgs e)
{
if (!_isRefresh)
{
//Thực hiện công việc nào dó.
}

}


protected override void LoadViewState(object savedState)
{
try
{
object[] AllStates = (object[])savedState;
base.LoadViewState(AllStates[0]);
_refreshState = bool.Parse(AllStates[1].ToString());
_isRefresh = _refreshState ==
bool.Parse(Session["__ISREFRESH"].ToString());
}
catch
{ }
}

protected override object SaveViewState()
{
Session["__ISREFRESH"] = _refreshState;
object[] AllStates = new object[2];
AllStates[0] = base.SaveViewState();
AllStates[1] = !(_refreshState);
return AllStates;
}

Chúc vui vẻ
================================================== ==

vào đây tải mã nguồn kèm theo sách của nhà sách Minh Khai và mã nguồn khác (luôn cập nhật).
chi tiết tại www.nguyenlan.com/down.aspx hoặc liên kết góc bên phải của www.nguyenlan.net

================
Khóa học, làm đề tài tốt nghiệp, hỗ trợ: www.nguyenlan.net
Hỗ trợ đọc và mua sách, chia sẻ lâu dài: www.nguyenlan.com
Nick YH: nguyenlansach
zoejoe viết 13:43 ngày 10/10/2018
Được gửi bởi phamduyvt
trong database luôn tạo khóa chính để ko cho trùng dữ liệu khi insert vào
Với autoincrease thì nó tự tăng lên thôi, không check giđược.
Có thể dùng session đặt cái timeout để giới hạn lại
herofit viết 13:49 ngày 10/10/2018
Được gửi bởi vn.disable
Khi lập trình PHP để insert dữ liệu vào table, thường có 1 trang có form nhập liệu và 1 trang action.php để thực hiện việc insert dữ liệu, vđề là khi nhấn submit -> action.php, xong xuôi mình nhấn F5 tại trang submit thì dữ liệu lại dc chèn vào table 1 lần nưã...cho mình cách giải quyết vđề này.
cái này sao mọi ngừoi giải quyết phức tạp nhỉ

còn mình mình quên để actt=insert trên query string. Khi insert kiểm tra có phải action insert hay không ? nếu phải mới insert. khi insert xong redirect về trang nào đó để thoát khỏi sự kiện submit
hackson viết 13:44 ngày 10/10/2018
Được gửi bởi herofit
cái này sao mọi ngừoi giải quyết phức tạp nhỉ

còn mình mình quên để actt=insert trên query string. Khi insert kiểm tra có phải action insert hay không ? nếu phải mới insert. khi insert xong redirect về trang nào đó để thoát khỏi sự kiện submit
Vậy cũng còn phức tạp

PHP Code:
// Proc part
if($_POST***91;'rock'***93; == $_SESSION***91;'mywork'***93; && $_POST***91;'rock'***93; != "") {
  // Accept action
}

// Reset/create action sesion
$_SESSION***91;'mywork'***93; = rand(000000, 999999);

....

// Form part
<form method=POST>
<input type=hidden name=rock value="<?=$_SESION***91;'mywork'***93;?>">
....
Cách này có rất nhiều tác dụng khác nữa
vn.disable viết 13:50 ngày 10/10/2018
vâỵ còn lệnh mysql_free_result() thì sao mọi ngươì ? nó ko dùng dc trong vấn đề này hả?
SweetLoveFC viết 13:48 ngày 10/10/2018
Sao các bạn không dùng $count=mysql_num_rows($result); nếu $count>1 thì dữ liệu đã tồn tại thì bạn switch sang để echo "Thông tin này đã tồn tại";
Bài liên quan
0