php表单中的必填字段无法正常工作

php表单中的必填字段无法正常工作,php,required-field,Php,Required Field,我想将表格中的所有字段设置为“必填”。我知道已经有很多很好的答案类似的问题,但不幸的是,我找不到我的代码的问题 我需要的是,仅当用户将某些字段留空时才显示错误消息,但如果我以显示错误“Oops…所有字段都是必需的”的形式回答所有问题,则显示错误消息。谁能帮帮我吗 以下是我尝试过的: session_start(); if(isset($_POST['submit'])) { $_SESSION['q1'] = $_POST['q1']; $_SESSION['q2'] =

我想将表格中的所有字段设置为“必填”。我知道已经有很多很好的答案类似的问题,但不幸的是,我找不到我的代码的问题

我需要的是,仅当用户将某些字段留空时才显示错误消息,但如果我以显示错误“Oops…所有字段都是必需的”的形式回答所有问题,则显示错误消息。谁能帮帮我吗

以下是我尝试过的:

 session_start();

 if(isset($_POST['submit']))
  {
   $_SESSION['q1'] = $_POST['q1'];
   $_SESSION['q2'] = $_POST['q2'];
   $_SESSION['q3'] = $_POST['q3'];
   $_SESSION['q4'] = implode(',', $_POST['birthplace']);
   $_SESSION['q5'] = implode(',', $_POST['countrylived']);

   $q1 = mysql_real_escape_string($_SESSION['q1']);
   $q2 = mysql_real_escape_string($_SESSION['q2']);
   $q3 = mysql_real_escape_string($_SESSION['q3']);
   $q4 = mysql_real_escape_string($_SESSION['q4']);
   $q5 = mysql_real_escape_string($_SESSION['q5']);

   $required = array('q1', 'q2', 'q3', 'q4', 'q5');
   $error = false;
   foreach($required as $field) {
     if (empty($_POST[$field])) {
       $error = true;
     }
   }

   if ($error) {
      echo "Oooops!! It seems you did not answer all the questions. Please not that all fields are required.";
   } 
  else {

       $query="INSERT INTO test (q1, q2, q3, q4, q5) VALUES ('$q1', '$q2', '$q3', '" . $q4 . "', '" . $q5 . "')";
        mysql_query($query) or die (mysql_error() );
        header('Location: Thankyou.php'); 
        exit;
     }
}
    ?>
编辑:这是我的html表单的一部分。(抱歉,它包含很多问题,所以我只选择了与q1-5相关的部分)

    第一步 请仔细回答以下问题,以帮助我们为您提供最佳推荐 你的性别是什么? 男性 女性

    你几岁? 18岁以下 18-30 31-40 41-60 60多岁

    3.你的婚姻状况如何? 已婚或家庭伴侣 单身 宁可不说 4.你出生在哪里?

    5.请选择您在那里居住至少5年的国家/地区? //程序与Q4相同// ...... .....

您的问题在于,您的代码正在检查始终为空的变量:请注意,您的表单中似乎没有$\u POST['q4']或$\u POST['q5']

在检查器中,尝试测试已分配的会话字段:

   $required = array('q1', 'q2', 'q3', 'q4', 'q5');
   $error = false;
   foreach($required as $field) {
     if (empty($_SESSION[$field])) {
       $error = true;
     }
   }
或者,你可能想检查一下你的出生地和乡下生活的田地里有什么。如果它们不是数组,则内爆函数将不会返回任何内容

如果这不起作用,请添加:

if(empty($_SESSION['q1'])) {
    echo "q1 is empty!";
}
if(empty($_SESSION['q2'])) {
    echo "q2 is empty!";
}
if(empty($_SESSION['q3'])) {
    echo "q3 is empty!";
}
if(empty($_SESSION['q4'])) {
    echo "q4 is empty!";
}
if(empty($_SESSION['q5'])) {
    echo "q5 is empty!";
}

找出哪些字段有问题。

很可能有些字段是空的。 提交表单后,通过显示表单内容检查是否已填写所有表单字段


只需添加
var\u dump($\u POST);退出
在PHP代码的顶部,并发布结果。

快速修复:
if(空($$field))
为什么?因为您的表单中没有
q4
q5
,所以您将
q1
-
q5
添加到会话中,但检查
\u POST
元素。@user574632:对不起,我不明白您的意思。再见,我没有q4或q5?贾斯汀纳斯:如果你的意思是谢尔伍建议的,我也测试了会话,但没有任何改变:(@mOna,除非你出示表单,我只是猜测。但是你不使用变量$u POST['q4']或$u POST['q5']除了这个循环,这是一个公平的猜测。我尝试了你所说的,但即使我填写了所有答案,我仍然会收到错误“ooppss..所有字段都是必需的!”:(((你也可以发布表单,我会看看发生了什么。我已经测试了你的表单,它对我来说很好。请参阅我上面的答案,以获取一段代码片段。尝试一下,让我知道发生了什么。@sherwoor:我写了你的第二个检查(分别检查每个字段),我进行了测试,但举例来说,我没有填写第二季度和第四季度,但现在问题正好相反!无论如何,提交后它会将我重定向到感谢页面!@sherwoor:它解决了:)我真的不知道为什么它突然起作用了!我只是尝试了$SESSION[$field]首先它不工作,但现在它工作得很好!非常感谢你的帮助我按照你说的做了,提交后它显示给我:数组(8){[“q1”=>string(4)“male”[“q2”]=>string(5)“18-30”[“birthplace”]=>array(1){[0]=>string(6)“安哥拉”}[“p_scnt”]=>array(1){[0]=>string(0)”}}=>数组(1){[0]=>string(0)“}[“优先级”]=>string(0)“[“提交”]=>string(6)“提交”}也感谢您的回答:)
if(empty($_SESSION['q1'])) {
    echo "q1 is empty!";
}
if(empty($_SESSION['q2'])) {
    echo "q2 is empty!";
}
if(empty($_SESSION['q3'])) {
    echo "q3 is empty!";
}
if(empty($_SESSION['q4'])) {
    echo "q4 is empty!";
}
if(empty($_SESSION['q5'])) {
    echo "q5 is empty!";
}