10/10/2018, 11:23

Lỗi khó hiểu của hàm isset($_POST[]) - cần giúp đỡ

Lúc đầu em có làm mấy cái hàm kiểm tra isset($_POST[]) thì nó chạy ok, thông báo lỗi nếu thấy lỗi.
Sau một hồi làm công việc khác test lại thì mấy cái hàm đó không còn kiểm tra được nữa nó cứ như nó không hiểu cái hàm isset ấy.
một đoạn code nhỏ trong nó đây:
Code:
if(isset($_POST["ID"]) && isset($_POST["Pass"]) && isset($_POST["PassR"]))
{
	$ID = $_POST["ID"];
	$pass = $_POST["Pass"];
	$passr = $_POST["PassR"];
	if($pass == $passr)
	{
		$Sql = "Insert into account values(','$ID','$pass')";
		$result = mysql_query($Sql,$db);
		if($result)
			echo"<script> alert('Đăng ký thành công');</script>";
		else
		echo"<script> alert('Đăng ký thất bại');</script>";
	}
}
em không nhập gì nó cũng báo là thành công, mà nó không kiểm tra xem đã có gì trong $_POST["ID"] chưa.
ai biết lỗi gì có thể giúp em với!
Thanks ac!
bodyvn viết 13:32 ngày 10/10/2018
Bạn nên nắm vững kiến thức trước đã!
Hàm isset() trả về FALSE ngay khi biến đó là chuỗi rỗng hoặc biến đó có giá trị = 0;
=> thay vì dùng hàm isset() bạn nên dùng:

if (isset($_POST["ID"] != "")
hoặc if (isset($_POST["ID"] != NULL)
hoặc if (!empty(isset($_POST["ID"]))
bluewayvn viết 13:25 ngày 10/10/2018
-1 bodyvn: trả lời sai rồi
Dựa theo chỗ này http://php.net/manual/en/function.isset.php thì ham isset sẽ trả về false khi biến là null;
Ví dụ:
Code:
$a = null;
var_dump(isset($a));
sẽ in ra là bool false;
trong khi
Code:
$a = 0;
var_dump(isset($a));
sẽ in ra là bool true;
Cho dù bạn không nhập gì cả thì mấy cái $_POST["ID"] cũng là chuỗi rỗng "" chứ không phải là null cho nên isset sẽ trả về true;
Nếu bạn muốn kiểm tra xem có nhập hay không thì có thể xài hàm empty http://php.net/manual/en/function.empty.php
Code:
$a = null;
$b = 0;
$c = "";
$d = 1;
var_dump(empty($a)); //bool true
var_dump(empty($b)); //bool true
var_dump(empty($c)); //bool true
var_dump(empty($d)); //bool false
Do vậy cái này là lỗi bạn dùng hàm không đúng chứ không phải là do hàm chạy sai nha.
Hy vọng sẽ giải quyết được vấn đề của bạn.
Nhân Tâm viết 13:36 ngày 10/10/2018
Có thể dùng empty thay cho isset()
if(!empty($_POST["ID"]) && !empty($_POST["Pass"]) && !empty($_POST["PassR"])) { $ID = $_POST["ID"]; $pass = $_POST["Pass"]; $passr = $_POST["PassR"]; if($pass == $passr) { $Sql = "Insert into account values('','$ID','$pass')"; $result = mysql_query($Sql,$db); if($result) echo"<script> alert('Đăng ký thành công');</script>"; else echo"<script> alert('Đăng ký thất bại');</script>"; } }
Profit viết 13:33 ngày 10/10/2018
Hàm isset đôi khi hoạt động ko như mong muốn và tốc độ cũng chậm, Bạn thử dùng hàm strlen xem
Bài liên quan
0