PDA

View Full Version : Cookie form, vấn đề nan giải :(



kangmin_pro
06-05-2010, 20:10
Hi Ae.

Em đang gặp một vấn đề mà có vẻ nếu ko giải quyết thì ko được.

Tức là sau khi em send form xong, back lui nó vẫn còn lưu cookie có thể nhấn send lần nữa hoặc chỉ cần nhất F5 khi send complete. Thế là một bản khác lại được send,

Có cách nào để tránh vấn đề này được ko ? nếu ko chắc hộp mail em thành 1 thùng rác spam mất :((

Please help..................

Cảm ơn 4rum DDTH rất nhiều :(

[=========> Bổ sung bài viết <=========]

Hình như coookie là vô dụng rồi, có del cũng thế.

Có anh nào biết, vd: 1.php , 2.php, 3.php, 4.php

Đi theo liên kết thì từ file 1.php đến file 2,3 rồi đến 4.php

Đang ở tại file 4.php khi nhấn nút back trên trình duyệt hoặt tổ hợp phím All lùi thì nó sẽ lùi về file 1.php ?

Có cách nào ko ạ ?

Hoặc có cách nào ko chó back lui ko ạ ?

Xin giúp đỡ...

Cảm ơn.

ngoc_viet08
06-05-2010, 22:53
google : redirect php
dùng hidden field để lưu url cho redirect lại .

kangmin_pro
06-05-2010, 23:25
google : redirect php
dùng hidden field để lưu url cho redirect lại .

Hi bạn, bạn có thể nói rõ hơn ko ?

Hay cho mình xin 1 demo dạng như câu hỏi của mình,

cảm ơn bạn nhiều lắm ( vì mình cũng ko biết phải chèn như thế nào để được như thế )

[=========> Bổ sung bài viết <=========]

Có A nào giúp được em vấn đề này ko :((

Làm sao để khi back lui ko trở lại trang chứa form ấy :(( chán quá, cứ từ trang thông báo đã gửi đi nhấn back nó lại về trang chứa form và cứ thế lại gửi tiếp 1 nội dung trùng lặp :((... HELP

ngoc_viet08
07-05-2010, 16:50
trong cái form đó thêm hidden field

<input type="hidden" name="url_for_redirect" value="url của form">

tại trang xử lý , sau khi thực hiện xử lý xong form .


$url_for_redirect = $_POST['url_for_redirect'];
header("Location: ".$url_for_redirect);


full code for test
file test_redirect.php


<?php
session_start();
if ($_POST){
$url_for_redirect = $_POST['url_for_redirect'];
//echo ;
header("Location: ".$url_for_redirect);
}
?>
<form action="test_redirect.php" method="post">
<input type="hidden" name="url_for_redirect" value="http://ddth.com">
<input type="submit" name="submit" value="submit">
</form>


chạy rùi nhấn back thử xem ?

kangmin_pro
07-05-2010, 17:07
Ko bít em test có sai ko nhưng em test nhanh thế này,

Em tạo 2 file, 1.php và test_redirect.php cùng một code:

<?php
session_start();
if ($_POST){
$url_for_redirect = $_POST['url_for_redirect'];
//echo ;
header("Location: ".$url_for_redirect);
}
?>
<form action="test_redirect.php" method="post">
<input type="hidden" name="url_for_redirect" value="http://ddth.com">
<input type="submit" name="submit" value="submit">
</form>


Từ file 1.php em nhấn vào submit nó chuyển sang http://ddth.com/ và em nhấn back từ http://ddth.com/ nó vẫn về lại file 1.php ?

Em đã test với IE và Firefox kết quả như nhau ?

A có thể nói kỷ hơn ko ạ ?

Cảm ơn anh rất rất nhiều...

ngoc_viet08
07-05-2010, 18:33
2 file 1 code ....
1 file test_redirect.php được rồi .
bấm back rồi f5 xem được nữa ko ?
bạn phải hỉu mình mún gì chứ ?

kangmin_pro
07-05-2010, 19:03
hi anh,

Em vẫn chưa hiểu đoạn này:

<input type="hidden" name="url_for_redirect" value="url của form">

url_for_redirect là name để nhạn dạng qua file xử lý.

Vậy phải thêm cái này ở mỗi form trong file form.html à ?

vd: <input type="text" name="tennguoigui" size="20">
<input type="text" name="email" size="20">

chẳn nhẻ phải thay hết tất cả các name trên về url_for_redirect ?

Hay sao anh ?

Và tình trạng của em là thế này, file form của em gắn mã:

<body onload="document.frm1.submit()" onLoad="loadMe();">
<form name="frm1" action='xuly.php' method='post'>

mã này để khi đến phần này sẽ tự động submit. Nếu sau khi submit xong, thông tin vẫn còn lưu trên các textbox chỉ cần back về lại file form.html thì lại một lần nữa thông tin bị gửi lặp lại.

Xin cho em biết ý của anh ạ.

Cảm ơn anh rất nhiều :x

ngoc_viet08
07-05-2010, 23:15
@@

<input type="hidden" name="url_for_redirect" value="url của form">

input này sẽ chứa thông tin về url mà sau khi submit xong , thực hiện xử lý form xong thì nó sẽ chuyển đến đó ..

phải gắn kèm nó vào form , để nó có thể nhận dc sau khi submit thông qua $_POST => chỗ nào muốn sau khi xử lý xong nó sẽ nhảy về trang nào đó thì chèn cái hidden field vào .


Vậy phải thêm cái này ở mỗi form trong file form.html à ?

<input type="text" name="tennguoigui" size="20">
<input type="text" name="email" size="20">

file này có mấy form mà kêu mỗi form ?
các thẻ input kia cứ để yên nó , tớ có nói làm gì với nó đâu . cứ chèn thêm 1 hàng input hidden vào , chứa địa chỉ mờ nó muốn tự di chuyển về . như ví dụ trên tớ để http://ddth.com .

đoạn mã này là đoạn mã để redirect , tạm dịch là dịch chuyển đến 1 trang nào đó .

header("Location: ".$url_for_redirect);

thuyduongcd
07-05-2010, 23:46
Nhấn nút back 2 lần thử xem :)

kangmin_pro
08-05-2010, 01:42
vấn đề trên không thể xử dụng cách của anh ngoc_viet08. Dù sao cũng thanks a rất rất nhiều.

Vì code của em xử lý qua 2 lần form nên ko thể dùng redirect :(

Tức 1.php ( form: name, email... ) -> 2.php ( lấy dữ liệu review từ 1.php ) rồi mới tới bước xử lý ở file 3.php. xử lý hoàn tất thì qua file 4.php thông báo kết quả.

Có A nào bít cách khi ở file 4.php nhấn back thì về luôn 1.php ko ? hoặc nếu nhất back thì dữ liệu ở 2.php sẽ được clear và ko thể send lại lần nữa ? hoặc ......


chán ghe bí quá :((((((((((((

HELPPPPPP...

thuyduongcd
08-05-2010, 09:36
Chỉ cần dùng CAPTCHA là xong, có gì mà nản thế

kangmin_pro
08-05-2010, 11:30
Dùng CAP thì chỉ cần gõ sai Cap 1 lần là mất dữ liệu lưu tạm ở form thứ 2 :( bởi vì như em đã nói. form 1 xử lý qua form 2, form 2 lưu tạm dữ liệu ( review ) :((

bí.com

ngoc_viet08
08-05-2010, 14:10
dùng recaptcha , kiểm tra = ajax . cậu tìm hiểu đi . nói rùi mờ ...

thuyduongcd
08-05-2010, 16:13
Tạm gọi là 4 Step cho bạn dễ hình dung.
Step 1 (trang đầu tiên) show form nhập liệu, có kèm CAPTCHA. Nhập xong Submit (Next) qua step 2.
Step 2 (trang 2) kiểm tra CAPTCHA, nếu không đúng thì redirect về step 1 (trang 1). Nếu đúng, hiển thị thông tin để review (thông tin do trang 1 post qua). Sau khi user check info, nếu có sai sót, click nút Back sẽ chuyển về trang 1 kèm những thông tin hiện tại (để page 1 show ra, user khỏi nhập lại). Nếu thông tin là đúng hết, Click Next để qua step 3.
Step 3 nhận thông tin từ step 2 chuyển qua, kiểm tra trong DB xem có trùng không? Nếu không trùng thì lưu vào DB và chuyển tới step 4 thông báo kết quả (thành công), nếu trùng nghĩa là submit nhiều lần thì chuyển tới steo 4 với thông báo (already exists)
Step 4 chỉ việc hiển thị thông báo.

Có lẽ yêu cầu bạn là như thế

tiendx2002
08-05-2010, 22:02
Chỗ này sử dụng PHP cũng hơi rắc rối nên có thể sử dụng cách khác, là JavaScript, đặt chạy onload, và dùng đoạn JavaScript đó để clear/hoặc reset giá trị của cookie.
Thân ái.

kangmin_pro
08-05-2010, 23:26
Chỗ này sử dụng PHP cũng hơi rắc rối nên có thể sử dụng cách khác, là JavaScript, đặt chạy onload, và dùng đoạn JavaScript đó để clear/hoặc reset giá trị của cookie.
Thân ái.

Anh có thể cho em xin cái đoạn java đó ko ạ ? và nên chèn vào file nào là tốt nhất ?

tiendx2002
08-05-2010, 23:36
Anh có thể cho em xin cái đoạn java đó ko ạ ? và nên chèn vào file nào là tốt nhất ?
http://techpatterns.com/downloads/javascript_cookies.php
Ở đây có 1 số hàm cho bạn sử dụng, tất nhiên là sẽ đặt nó một cách hợp lý ở bên file chứa form, trong onload. Nếu bạn đã sử dụng JQuery thì http://api.jquery.com/ready/ (nhưng nếu đã xài JQuery thì nên dùng các đoạn code cookie của JQuery), nếu chưa rành thì body onload mà giã.
Cần mò mẫm thêm 1 tí xung quanh những gì mình đã nói. Cảm giác khám phá rất thú vị.
Thân ái.

ngoc_viet08
09-05-2010, 00:07
ko biết đây có phải là vấn đề về cookie hay ko ? vì theo mình bik cookie chỉ được có khi set = code php . còn bình thường khi ta chạy 1 trang web thì nó sẽ đưa về client history và cache . Khi nhấn nút back lại thì browser load history và cache , còn cookie phải load = code php .mình quan sát kĩ code của bạn chủ topic rùi thấy thế .