将空数据添加到PHP中的文本文件中

时间:2019-01-28 22:15:07

标签: php

我正在做一个学校项目,要求我创建一个买卖网站。 我有一个供用户输入名称,电子邮件等值的表格。填写完毕后,他们将按“提交”按钮,并将这些值写入我的txt文件中。 但是,我意识到,空数据也正在写入txt文件,这导致我的文本文件看起来像这样

X

当用户单击导航按钮访问表单时,会发生这种情况。即使没有输入任何值。仅通过访问表格将空白写入我的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>

如何防止将空数据添加到日志文件中?

2 个答案:

答案 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代码都在一起,则更容易阅读,并且无需将该代码放在表格中。