我正在做一个学校项目,要求我创建一个买卖网站。我有一个表单供用户输入名称,电子邮件等值。填写后,他们将按“提交”按钮,值将写入我的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>
如何防止将空数据添加到我的日志文件中?
Mark,有很多方法可以防止空数据无法进入您的商务逻辑。
至于你的项目,最简单的方法是在你的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="" />
在写入文件之前,您需要验证$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代码都在一起,那么它就更容易阅读,并且不需要在表单中找到那些代码。