10/10/2018, 00:06

Giữ lại dữ liệu đã nhập khi kiểm tra lỗi

Chào các bạn,
Có một số lỗi bạn không thể kiểm tra bằng Javascript và chỉ khi nào nhấn submit de server side sử lý thì mình mới kiểm tra lỗi được và khi phát hiện có lỗi thì tôi sử dụng javascript (dùng history.back()) để back lại trang trước.
Vấn đề ở đây là khi back lại thì những dữ liệu đã nhập trước đó bị mất, tôi muốn hỏi là có cách nào để giữ lại các giá trị đó không?.

Cảm ơn nhiều nhé.
xacuop viết 02:06 ngày 10/10/2018
Chuyển sang dùng .NET đi. Lúc đó thì ko còn là vấn đề to tác nữa
Bim viết 02:15 ngày 10/10/2018
Nói dzị cũng nói được, pó chuối...

Ai có cách khác ko?
mRrO viết 02:20 ngày 10/10/2018
Hi,
Validate dữ liệu (user's input) là một trong những vấn đề sống còn của việc lập trình WebApp. Thông thường có hai phương thức để validate dữ liệu: validate tại client side thông qua Javascript, validate tại server side thông qua các Server Side Script, trong trường hợp này là PHP. Bây giờ người ta áp dụng cả hai phương thức trên cùng lúc, tại client side để tránh việc lãng phí bandwidth, tài nguyên truyền những dữ liệu không hợp lệ, tại server side để tăng cường độ bảo mật cho webapp của mình (nên nhớ là không bao giờ chỉ validate ở Client Side, đơn giản vì người ta có thể dễ dàng disable Javascript trong browser, khi đó client side sẽ trở nên vô tác dụng).
Trở lại với câu hỏi của php_programmer, "làm sao để validate và trả về dữ liệu không hợp lệ...?", tớ khuyên là bồ nên dùng PHPLIB::OOHFORM hoặc PEAR::HTML_QUICKFORM. Cả hai library này hỗ trợ việc tạo form một cách dynamic, cài đặt các fields trong form, qui tắc validate các fields này cùng thông báo lỗi nếu validate không thành công, hỗ trợ validate ở cả client side và server side.
Thông tin và tài liệu về OOHFORM và QuickForm có thể được tìm thấy bằng cách search trên Google.
QuickForm:http://pear.php.net/package/HTML_QuickForm
oohForm: http://www.sanisoft.com/phplib/manual/oohforms.php
--mrro.
xacuop viết 02:17 ngày 10/10/2018
mRro có bị gì ko lạc đề rồi. Ở đây là back lại mà ko mất dữ liệu trên form.
xacuop thấy .NET làm việc này cực dễ nên giới thiệu thôi. CÒn ko muốn dùng .NET thì tự làm bằng tay vậy. Dùng hidden field trên form thì được, nhưng rất mất công thì bạn phải làm từng cái.
pizza@ viết 02:12 ngày 10/10/2018
Mình chưa làm thử nhưng theo "tưởng tượng" của mình thì nên làm như sau. Khi người dùng nhấn nút submit lên server bạn cho lưu các giá trị của các field vào session. Lúc mà trang web loading, bạn cài một đoạn code PHP để kiểm tra xem các biến session có tồn tại ko (dùng hàm isset), nếu có thì bạn đổ các giá trị của các biến này vào lại các field của form. Như vậy nếu người dùng nhấn nút back thì các biến session đã được đang ký và dữ liệu đã được nhập trước đó sẽ được bổ sung vào các field...
TheFriends viết 02:13 ngày 10/10/2018
bạn nên dùng các biến để lưu lại, sau khi kiểm thấy lỗi thì xuất ra câu thông báo lỗi và trả lại các biến này lên các form, như vậy dữ liệu sẽ ko bị mất đi
mRrO viết 02:14 ngày 10/10/2018
mRro có bị gì ko lạc đề rồi. Ở đây là back lại mà ko mất dữ liệu trên form.
xacuop thấy .NET làm việc này cực dễ nên giới thiệu thôi. CÒn ko muốn dùng .NET thì tự làm bằng tay vậy. Dùng hidden field trên form thì được, nhưng rất mất công thì bạn phải làm từng cái.
Hihi, bồ xacuop nên xem lại thì có lẽ là hợp lý hơn, câu hỏi của bồ php_programmer là làm sao để làm abcxzy trong PHP, bồ đi trả lời là dùng .NET. .NET dễ hay ko thì cũng ko liên quan gì ở đây hết, vả lại không hiểu bồ nói dùng hidden field là sao?
--mrro.
trongthuc viết 02:16 ngày 10/10/2018
Chào các bồ, trongthuc mới ghé trang này lần đầu. Mình đang làm NL3 mà đang pó tay vấn đề y như trong chủ đề này là khi Back lại thì các dữ liệu mà người dùng nhập trên form bị mất pải nhập lại từ đầu. Bạn pizza@ trả lời là lưu chúng vào biến session, mình thấy cũng có lý nhưng nếu như form của mình có rất rất nhiều ô textbox cần pải điền dữ liệu lại thì phải lưu nhiều biến session, mà biến session theo thầy mình nói thì chỉ dùng khi phân quyền, kt account thôi chứ dùng nhiều quá thì server phải xử lý nhiều không hợp lý và không ai làm vậy cả. Mình nghĩ là có cách nào khác các bồ chỉ mình với, mình sắp nộp Niên Luận rùi. Hu...hu. trongthuc chờ các bạn trả lời.
tra_lai_user_day viết 02:12 ngày 10/10/2018
Chắc bác này mới vô nghề thì phải. Không biết bác đã sử dụng template hoặc view. Nên mình lấy 1 demo thuần túy thoai nha. Chứ sau này ko ai làm thế này đâu:

Code:
<?
function getPOST($name)
{
	if(isset($_POST[$name]))
	{
		return $_POST[$name];
	}
	else
	{
		return false;
	}
}

$username = getPOST("username");
$email = getPOST("email");

$error = false;
if(getPOST("Submit"))
{
	//Kiểm tra lỗi nè
	if($username == '') $error.="Chưa nhập tên đăng nhập<br>";
	if($email == '') $error.="Chưa nhập email<br>";
	
	if(!$error)//bắt xong lỗi
	{
		//chen` vao database
		//redirect đến đâu tùy ý
	}
}
?>

<div style="color: red"><?=$error;?></div>

<form action="" method="post">
	<input type="text" name="username" value="<?=$username;?>" />
	<input type="text" name="email" value="<?=$email;?>" />
	<input type="submit" name="Submit" value="Submit" />
</form>
Bài liên quan
0