我正在做PHP的教程。我在CRUD课程的更新部分,正在处理验证脚本。我完全遵循了代码...我认为但仍然无法正常工作。这是问题:当我单击“提交”以尝试使用菜单名称字段为空来测试验证时,它会通过而没有错误...并使用空列表项更新导航?我查看了代码,所有内容似乎都是正确的,但我对此非常新,所以问题很容易被忽视。
以下是代码:
if(isset($_POST['submit'])) {
$errors = array();
$required_fields = array('menu_name', 'position', 'visible');
foreach($required_fields as $fieldname) {
if(!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0) ) {
$errors[] = $fieldname;
}
}
if(empty($errors)) {
//Perform Update
$id = mysql_prep($_GET['subj']);
$menu_name = mysql_prep($_POST['menu_name']);
$position = mysql_prep($_POST['position']);
$visible = mysql_prep($_POST['visible']);
$query = "UPDATE subjects SET
menu_name = '{$menu_name}',
position = {$position},
visible = {$visible} WHERE id = {$id}";
$result = mysql_query($query, $connection);
if(mysql_affected_rows() == 1){
// success
$message = "Subject was sucessfully updated";
}else{
$message = "The subject update failed.";
$message .= "<br />" . mysql_error();
}
}else{
//error occured
$message = "There were " . count($errors) . " errors in the form.";
}
} // end if(isset($_POST['submit']) )
?>
来自身体的代码:
<h2>Edit Subject: <?php echo $sel_subject['menu_name']; ?></h2>
<?php
if(!empty($message)){
echo "<p class=\"message\">" . $message . "</p>";
}
?>
<?php
if(!empty($errors)){
echo "<p class=\"errors\">";
echo "Please review the folowing fields: <br />";
foreach($errors as $error){
echo "-" . $error . "</p>";
}
}
?>
现在当我更改(空($ _ POST [$ fieldname])为(空($ _ POST ['menu_name'])时,它会发出错误,但它们是针对位置和可见字段恰好是正确的... ?是否遗漏了一些我无法看到的角色。我做了大部分复制和粘贴以防止那些愚蠢的错误。注意:位置和可见的验证确实有效...我想......既然你不管怎么说,我不知道这些领域是否空白......
非常感谢任何帮助。
答案 0 :(得分:2)
错误就在这里:
$_POST[$fieldname] != 0
空字符串= 0,因为0为假。所以在你的if语句中,你说它是否为空(它是)并且不等于0(它就是这样)。
你能做的是
当您使用3等于或!==时,它会根据类型进行验证。 0 === 0,0 == false,“0”== 0,“0”== false,false === false,但是0!== false,0!==“0”和“0 “!==假。 我希望这是有道理的。
修改强>
让我们通过一系列测试进一步将它运行到地面。
$a='';
$b="0";
if(empty($a))
echo'$a is empty<br/>';
if(empty($b))
echo'$b is empty<br/>';
if($a!=0)
echo'$a does not equal 0/false<br/>';
if($b!=0)
echo'$b does not equal 0/false<br/>';
if($a!==0)
echo'$a does not equal integer 0<br/>';
if($b!==0)
echo'$b does not equal integer 0<br/>';
if($a!=="0")
echo'$a does not equal string 0<br/>';
if($b!=="0")
echo'$b does not equal string 0<br/>';
上面的输出是
$a is empty
$b is empty
$a does not equal integer 0
$b does not equal integer 0
$a does not equal string 0
结论: $a==$b
,$a!==$b
。 $a
和$b
为==
到0
和==
到false
,它们都不是整数,都是字符串,空字符串与包含0
字符的字符串不同。
将$_POST[$fieldname]!=0
更改为$_POST[$fieldname]!=="0"