Home  >  Article  >  Backend Development  >  PHP 检查表单中是否有空值,为什么不起作用

PHP 检查表单中是否有空值,为什么不起作用

WBOY
WBOYOriginal
2016-06-23 14:15:27901browse

PHP

  if (intval($_GET['subj']) == 0) {
  redirect_to("content.php");
  }
  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;
  }
  }
  $fields_with_lengths = array('menu_name' => 30);
  foreach($fields_with_lenhths as $fieldname => $maxlength ) {
  if (strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlength ) {
  $errors[] = $fieldname;}
  }
  if (empty($errors)) {
$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 ) {
$message = "栏目已成功更新";
  }else{
  $message = "栏目更新失败!";
  $message .="
" . mysql_error();
   }
  }else{
  $message = "表单中出现" . count($errors) . "处错误";
  } 
 }

?>

回复讨论(解决方案)

这样试试:
foreach($required_fields as $fieldname) 
{
    if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname]) || intval($_POST[$fieldname])     {
        $errors[] = $fieldname;
    }
}

从 if (isset($_POST['submit'])){ 开始的判断形同虚设!
无论是否成立,后续的代码都会被执行

(empty($_POST[$fieldname]) && $_POST[$fieldname] !=0)
含义是 $_POST[$fieldname] 是大于0的数值,是否是你期望的?

非常感谢以上两位的回答。我正在学习一个教程,是按照教程一步一步做下来的。一样的代码,却和示例中的结果不同。很想知道是什么原因。

  $required_fields = array('menu_name','position','visible');
  foreach($required_fields as $fieldname) {
  if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] !=0)) {
  $errors[] = $fieldname;
  }
  }
这个函数,是否意味着,如果$_POST[$fieldname]没有设置,或者$_POST[$fieldname]是空值和0,则返回一个错误数组$errors[] = $fieldname,是不是这样呢?
但是,为什么在实际中就是检测不到呢?后面的代码都执行了。

既然是流程控制,那么你的后续代码要放在 else 分支中。因为你判断的是传入了非法数据
另外昨天我说错了
empty($_POST[$fieldname]) && $_POST[$fieldname] !=0 表示的是
empty($_POST[$fieldname])  $_POST[$fieldname]为空
&&  同时
$_POST[$fieldname] !=0  $_POST[$fieldname]不等于0
那么这个表达式永远不会成立!

既然你是抄书上的代码,那么就请先核对一下

你抄的不会是纠错的题目吧?

 if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) || $_POST[$fieldname] ==0)) {
……

我看的是视频,代码是我一步一步写下来的,先验证,不对了在和视频上的对,对过好多遍了,还是看不出哪里有什么不同的地方。感谢各位的回复。我再把上面的代码格式整理下,方便诸位阅读。

问题解决了。按照以上两位的建议。
将:if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) { 
$errors[] = $fieldname; 
}

改为: if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname]) || $_POST[$fieldname] == 0) {
        $errors[] = $fieldname; }
      }
但问题是,为什么看视频上,原来的代码能够成功执行?

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:求大神解惑Next article:PHP变量中加CSS代码。