PHP插入/验证/必填字段故障

PHP插入/验证/必填字段故障,php,forms,insert,field,required,Php,Forms,Insert,Field,Required,好的,我对下面的insert语句有一个问题:(告诉我是否需要完整的代码) $required=数组(“考试id”、“科目”、“考试日期”); $error=false; foreach($字段所需){ 如果(!空($_POST['insert'])){ $InsertQuery=“插入考试(考试id、科目、考试日期)值 ($邮政[uexam\U id]、$邮政[usubject]、$邮政[uexam\U日期]); $result=mysql\u查询($InsertQuery,$con); 如果(

好的,我对下面的insert语句有一个问题:(告诉我是否需要完整的代码)

$required=数组(“考试id”、“科目”、“考试日期”);
$error=false;
foreach($字段所需){
如果(!空($_POST['insert'])){
$InsertQuery=“插入考试(考试id、科目、考试日期)值
($邮政[uexam\U id]、$邮政[usubject]、$邮政[uexam\U日期]);
$result=mysql\u查询($InsertQuery,$con);
如果(!$result){$error=true;}
}
} 
如果($error){
die(“所有字段都是必需的!”);
}
好的,基本上我希望所有字段(考试、科目和考试日期)都是必填字段。如果用户没有填写字段,则会弹出一个错误,要求他们返回并重新填写所有字段)。 这样,它就起作用了。但是,当我测试它并填写所有字段时,错误也会弹出,因此无论发生什么情况,插入都无法正常工作,迄今为止我试图更改它的任何尝试都会导致字段被插入,但验证不再有效。
任何帮助都将不胜感激

您正在尝试运行3个查询,而不是在测试后尝试运行查询

$required = array('uexam_id', 'usubject', 'uexam_date');

$error = false;
//first check all required fields are not empty. if post has values
if(!empty($_POST))
{
    foreach($required as $field) 
        if ( empty($_POST[$field])) 
            $error = true;           
    //a field was empty, show error
    if ($error) {
        die ("All fields are required! <a href='examisud.php'> Back to Form </a>");
    }
    //no error - try the query
    else
    {
        $InsertQuery = "INSERT INTO Exam (exam_id, subject, exam_date) VALUES 
                        ($_POST[uexam_id],$_POST[usubject],$_POST[uexam_date])";
        $result = mysql_query($InsertQuery, $con) or die('query Failure:'. mysql_error());
    }
}
$required=array('uexam_id','usubject','uexam_date');
$error=false;
//首先检查所有必填字段是否为空。如果post有值
如果(!空($\u POST))
{
foreach($字段所需)
if(空($\u POST[$field]))
$error=true;
//字段为空,显示错误
如果($error){
die(“所有字段都是必需的!”);
}
//无错误-请尝试查询
其他的
{
$InsertQuery=“插入考试(考试id、科目、考试日期)值
($邮政[uexam\U id]、$邮政[usubject]、$邮政[uexam\U日期]);
$result=mysql\u query($InsertQuery,$con)或die('query Failure:'.mysql\u error());
}
}

另外,我相信其他人会提到,mysql已被弃用,请期待将来使用mysqli。我还注意到,必填字段前面没有像查询那样的“u”。我认为这是一个错误?

保持所有其他内容不变,但添加一个中断语句,如下所示:

//Previous code, then

        if (!$result) { $error = true; }
    break;
    }
}
if ($error) {
    die ("All fields are required! <a href='examisud.php'> Back to Form </a>");
}
//以前的代码,然后
如果(!$result){$error=true;}
打破
}
}
如果($error){
die(“所有字段都是必需的!”);
}

您的foreach循环可能会在没有break语句的情况下继续运行,因此即使在成功的查询(所有3个字段都已填充,并且$error=false)之后,如果下一次迭代的查询失败,现在$error=true,因此执行“die”。

您是否尝试过回显$\u POST[uexam\u id]、$\u POST[usobject]和$\u POST[uexam\u date]的值以确保它们是有效的?似乎您应该在“usubject”、“uexam_date”等周围加上单引号。此外,您还可以通过这种方式接受sql注入。在将值传递到查询之前,您需要过滤掉这些值。在实际执行查询之前测试它!因此,在完成检查后,请检查所有元素是否都存在且有效,然后运行查询!Triad,不,这是一个个人项目,不用担心SQL注入!我总是忘了在问题中加上这个。我试过用uexam_id、usubject等的单引号引用,我仍然得到同样的问题。我确信这些值是有效的,我有一个没有验证或必填字段的旧系统,整个系统工作得很好,当我开始使用foreach和数组并出错时,这种情况就开始发生了。你发现了什么!但是当我转到页面时,我得到的只是错误“所有字段都是必需的!”它甚至没有显示表单:/put和if(!empty($\u POST))在foreach编辑我的答案之前。我认为你真正的问题是必填字段数组和你尝试插入的POST值之间的差异不同。POST值是这样的,因为我的表单,它们被标识为uexam_id,等等。我尝试了你的方法,但是没有;我不工作,我不知道该告诉你什么:/I当我导航到页面时,仍然会得到“所有字段都是必需的”。虽然当我返回表单时,它会返回表单,但是字段不会进入数据库,无论是输入所有字段还是只输入一个字段……你不能检查不存在的字段。如果必填字段是uexam_id,那么在检查考试id时,您总是会将错误设置为true。不知道您预期会发生什么。更新了我对你所说的字段的回答。
//Previous code, then

        if (!$result) { $error = true; }
    break;
    }
}
if ($error) {
    die ("All fields are required! <a href='examisud.php'> Back to Form </a>");
}