【问题标题】:PHP insert/validation/required field troublePHP插入/验证/必填字段麻烦
【发布时间】:2014-03-31 01:38:42
【问题描述】:

好的,我对下面的插入语句有疑问:(如果你想要整个代码,请告诉我)

$required = array('exam_id', 'subject', 'exam_date');

$error = false;
foreach($required as $field) {
    if ( !empty($_POST['insert'])) {
        $InsertQuery = "INSERT INTO Exam (exam_id, subject, exam_date) VALUES 
                        ($_POST[uexam_id],$_POST[usubject],$_POST[uexam_date])";
        $result = mysql_query($InsertQuery, $con);
        if (!$result) { $error = true; }
    }
} 
if ($error) {
    die ("All fields are required! <a href='examisud.php'> Back to Form </a>");
}

好的,所以基本上我希望所有字段(考试、科目和考试日期)都是必填字段。如果用户没有填写某个字段,则会弹出一个错误,要求他们返回并重新填写所有字段)。 这样,它就起作用了。但是,当我对其进行测试并填写所有字段时,也会弹出错误,因此无论发生什么,插入都无法正常工作,到目前为止我所做的任何更改都会导致字段被插入,但验证不再有效。 任何帮助将不胜感激!

【问题讨论】:

  • 您是否尝试过回显 $_POST[uexam_id]、$_POST[usubject] 和 $_POST[uexam_date] 的值以确保它们有效?似乎您应该在“usubject”、“uexam_date”等周围加上单引号。此外,您可以通过这种方式进行 sql 注入。在将值传递给查询之前,您需要过滤掉它们。
  • 在实际执行查询之前进行测试!因此,在完成检查后检查所有元素是否存在且有效,然后运行查询!
  • 三合会,不,这是个人项目,不用担心SQL注入!我一直忘记将其添加到问题中。我已经用单引号围绕 uexam_id、usubject 等进行了尝试,但我仍然遇到同样的问题。而且我确信这些值是有效的,我有一个没有验证的旧系统或必填字段,整个事情运行良好,一旦我开始使用 foreach 和数组和错误,这种情况就开始发生了。

标签: php forms insert field required


【解决方案1】:

您正在尝试运行 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());
    }
}

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

【讨论】:

  • 你搞定了!但是当我转到该页面时,我得到的只是错误“所有字段都是必需的!”它甚至根本没有向我显示表单:/
  • 在 foreach 之前放置和 if(!empty($_POST)) - 编辑了我的应用答案。
  • 我认为您真正的问题是必填字段数组与您尝试插入的 POST 值之间存在差异。
  • POST 值是这样的,因为我的表单,它们被标识为 uexam_id 等。我尝试了你的方法,伙计,它不起作用;对我不起作用,我不知道该告诉你什么:/ 我当我导航到页面时,仍然得到“所有字段都是必需的”。虽然当我返回表单时,它会进入表单,但是如果输入了所有字段或仅输入了一个字段,则字段不会进入数据库。
  • ...你不能检查不存在的字段。如果必填字段是 uexam_id,由于您正在检查exam_id,您总是会得到错误为真。不知道你预期会发生什么。更新了我对您所说的字段的回答。
【解决方案2】:

保持其他所有内容相同,但添加一个 break 语句,如下所示:

//Previous code, then

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多