所以,我有以下代码:(现在不要担心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>";
答案 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
),而你的第一个代码是运行验证(和失败),即使没有提交数据。