【发布时间】:2012-08-16 17:17:01
【问题描述】:
我正在做一个关于 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>";
}
}
?>
现在,当我将 (empty($_POST[$fieldname]) 更改为 (empty($_POST['menu_name']) 时,它会吐出错误,但它们是针对恰好正确的位置和可见字段... ?有没有遗漏的字符,我只是看不到。我做了大部分复制和粘贴来防止那些愚蠢的错误。注意:对位置和可见的验证确实有效......我认为......因为你无论如何不能将这些字段留空我怎么知道...
非常感谢任何帮助。
【问题讨论】:
-
您是否尝试过回显 SQL 查询以确保它看起来像您认为的那样?
-
您能否提供更多信息,您能否在代码顶部执行 var_dump($_POST) 并提供输出?
-
转储给了我这个:array 'menu_name' => string '' (length=0) 'position' => string '7' (length=1) 'visible' => string '1 ' (length=1) 'submit' => string '编辑主题' (length=12)
标签: php arrays validation foreach