插入验证foreach循环故障

时间:2014-03-31 03:14:05

标签: php validation loops field required

所以,我有以下代码:(现在不要担心SQL注入/ mysql折旧)

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

$error = false;
//VALIDATION: 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 required!!! <a href='examisud.php'> Back to PHP Form </a>");
}
//no error - try the query
elseif($error === false && !empty($_POST) )

{
$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());
}

因此,当我导航到这个php表单(examisud.php)时,我首先受到“All Fields required”的欢迎。然后我可以导航回到表单,它可以正常插入数据并显示错误,如果不是所有字段都填写的话。 * 如何才能在表单页面加载时显示“所需的所有字段”,并且仅在我需要时(当字段留空时)。 当我还更新或删除字段时,我也会显示“需要所有字段”错误。但是,除了弹出错误之外,所有内容都会正常更新/删除。

所以基本上我只需要在插入查询中将字段留空时显示它! 提前感谢你们给我的任何帮助!

*编辑我的表格:

{
echo "<form action=examisud.php method=post>"; //HTML FORM ECHOED OUT BY PHP
echo "<tr>";
echo "<td>" . "<input type=text name=exam_id value=" . $record['exam_id'] . " </td>";
echo "<td>" . "<input type=text name=subject value=" . $record['subject'] . " </td>";
echo "<td>" . "<input type=text name=exam_date value=" . $record['exam_date'] . " </td>";
echo "<td>" . "<input type=hidden name=hidden value=" . $record['exam_id'] . " </td>";
echo "<td>" . "<input type=image name=update value=update id=submit src=images/update.png" . " </td>";
echo "<td>" . "<input type=image name=delete value=delete id=submit src=images/delete.png" . " </td>";
echo "</tr>";
echo "</form>";
}
echo "<form action=examisud.php method=post>";
echo "<tr>";
echo "<td><input type=text name=uexam_id></td>";
echo "<td><input type=text name=usubject></td>";
echo "<td><input type=text name=uexam_date></td>";
echo "<td>" . "<input type=image name=insert value=insert id=submit src=images/insert.png" . " </td>";
echo "</form>";
echo "</table>";

2 个答案:

答案 0 :(得分:0)

您必须检查表单是否已提交

例如,如果你有这样的表单提交

<input type="submit" name="submit">

then in your php check it like this

if(!empty($_POST['submit']))//means the form is submitted
{
//your code
}
else
{
//no form is submitted here display your form normally
?>

<form action="" method="POST">
......
......
<input type="submit" name="submit">

</form>

<?php
}

希望它能帮到你,一切顺利

答案 1 :(得分:0)

这段代码应该这样做,解释如下。

if ($_SERVER['REQUEST_METHOD'] == 'POST') { // check if the user submits data (POST) or just loads the page (GET)
    $error = false;
    $required = array('uexam_id', 'usubject', 'uexam_date');


    foreach($required as $field) {
        if (!isset($_POST[$field]) || empty($_POST[$field])) {
            $error = true;
            break;
        }
    }

    if ($error) {
        die("All fields required!!! <a href='examisud.php'> Back to PHP Form </a>");
    } else {
        $InsertQuery = "INSERT INTO Exam (exam_id, subject, exam_date) VALUES ('".mysql_real_escape_string($_POST["uexam_id"], $con)."','".mysql_real_escape_string($_POST["usubject"], $con)."','".mysql_real_escape_string($_POST["uexam_date"], $con)."')";
        $result = mysql_query($InsertQuery, $con) or die('query Failure:'. mysql_error());
    }
}

首先,您的代码存在一些严重的安全问题,绝不应该在生产中使用。

mysql_*函数为deprecated - 使用mysqli(与mysql非常相似)或PDO_MYSQL

您的代码容易受到SQL injection attacks的攻击,请阅读this question有关如何防止它们(正确转义值或使用预准备语句)。

目前我使用mysql_real_escape_string来转义变量,因此这段代码应该是安全的。

最后,我的代码应该仍然修复你的第一个问题,因为它在运行验证之前检查用户是否实际提交了表单(通过检查请求方法是否POST),而你的第一个代码是运行验证(和失败),即使没有提交数据。