我正在做一个学校项目,要求我创建一个买卖网站。 我有一个供用户输入名称,电子邮件等值的表格。填写完毕后,他们将按“提交”按钮,并将这些值写入我的txt文件中。 但是,我意识到,空数据也正在写入txt文件,这导致我的文本文件看起来像这样
当用户单击导航按钮访问表单时,会发生这种情况。即使没有输入任何值。仅通过访问表格将空白写入我的txt。
下面是我的代码。
<?php
// define variables and set to empty values
$sellerNameErr = $emailErr = "";
$sellerName = $email = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["sellerName"])) {
$sellerNameErr = "Name is required";
}else {
$sellerName = test_input($_POST["sellerName"]);
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
}else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form name="sell" action="" method="post">
<p><span class = "error">* required field.</span></p>
<p>Seller Name: <input type="text" name="sellerName" />
<span class = "error">* <?php echo $sellerNameErr;?></span></p>
<p>Email: <input type="text" name="email" />
<span class = "error">* <?php echo $emailErr;?></span></p>
<input type="submit" name="Submit" value="Submit" />
<?php
$fp=fopen("buynsell.txt", "ab");
fwrite($fp,"$sellerName\t $email\r\n");
fclose($fp);
?>
</form>
如何防止将空数据添加到日志文件中?
答案 0 :(得分:0)
标记,有很多方法可以防止空数据不进入您的业务逻辑。
对于您的项目,最简单的方法是在html标记中设置其他属性。
对于HTML5,这可能是您的第一个解决方案:
<input type="text" name="usrname" required>
https://www.w3schools.com/tags/att_input_required.asp
效率不如仅在客户端有效,因此您还应该在服务器端实现此功能。
empty($_POST['user'])
无法使用,因为您永远不会发布该值,因此必须在输入字段中添加一个value属性:
<input type="text" name="user" value="" />
答案 1 :(得分:0)
在写入文件之前,您需要验证$sellerName
和$email
的值和是否没有错误。
if ($sellerName && $email && !$sellerNameErr && !$emailErr) {
$fp=fopen("buynsell.txt", "ab");
fwrite($fp,"$sellerName\t $email\r\n");
fclose($fp);
}
现在编写的方式无需执行任何操作来检查这些变量是否已设置,因为您将它们全部初始化为空字符串,但是如果您进行了更改,则应使用empty()
/ !empty()
来避免未定义的变量通知。
如果将写PHP代码的文件移动到顶部的后处理代码中,以使其仅在发布表单后才运行,则在验证代码检查输入是否为空之后,您应该能够只检查错误。 if (!$sellerNameErr && !$emailErr) { ...
。就个人而言,我认为将它存在仍然更有意义。如果您所有的PHP代码都在一起,则更容易阅读,并且无需将该代码放在表格中。