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

php中文网
发布: 2016-06-23 14:15:27
原创
983人浏览过

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; }
      }
但问题是,为什么看视频上,原来的代码能够成功执行?

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号