以 PHP 形式验证并保存到文件

Validation in PHP form and saving to a file

   if($_POST){



$errors = array();


//start validation
if(empty($_POST['email'])){
    $errors['email1'] = "Your Email Cannot be empty"; 
}

if (!filter_var(['email'], FILTER_VALIDATE_EMAIL)){
    $errors['email2'] = "Email not valid!";
}


if(empty($_POST['phone'])){
    $errors['phone1'] = "Your Number Cannot be empty"; 
}
if(strlen($_POST['phone']) < 8){
    $errors['phone2'] = "Your Phone Number must be at least 8 characters long";
}

if(strlen($_POST['phone']) > 8){
    $errors['phone3'] = "Your Phone Number must be not more than 8 characters long";
}

//check errors
if(count($errors) == 0)
{
    //redirect to home page
    header("Location: index.php");
    exit();
}
}

这是我的代码,需要验证。验证工作正常,但问题出在这里。

<div class="form-group">
            <label for="name">Email</label>
            <input type="email" class ="form-control" name="email" id="email" placeholder="Enter Email">
            <p><?php if(isset($errors['email1'])) echo $errors['email1'];?></p>
            <p><?php if(isset($errors['email2'])) echo $errors['email12'];?></p>
        </div>

        <div class="form-group">
            <label for="phone">Phone Number</label>
            <input type="text" class ="form-control" name="phone" id="phone" placeholder="Enter Phone Number">
            <p><?php if(isset($errors['phone1'])) echo $errors['phone1'];?></p>
            <p><?php if(isset($errors['phone2'])) echo $errors['phone2'];?></p>
            <p><?php if(isset($errors['phone3'])) echo $errors['phone3'];?></p>
        </div>

我将表单设置为保存到文件。输入将被验证并显示错误消息,但输入错误的表单仍将保存到文件中。如有任何帮助,我们将不胜感激。

<?php
    if(isset($_POST['email'])  && isset($_POST['phone'])  && isset($_POST['enquiry'])){

        $email = $_POST['email'];
        $phone = $_POST['phone'];
        $enquiry = $_POST['enquiry'];

        $file = "form.txt";


        $save = "Email: ".$email."\n".
                "Phone: ".$phone."\n".
                "Comment: ".$enquiry."\n";

        file_put_contents($file,$save, FILE_APPEND);
}
?>

根据您的评论,您希望只有有效数据进入文件。

但是您的 PHP 检查正在查看是否设置了任何值,此处:

if(isset($_POST['email'])  && isset($_POST['phone'])  && isset($_POST['enquiry'])) {

如果您将其更改为检查以确保只存在有效数据,那么您就可以了。添加一个简单的 && count($errors) == 0 就可以做到(如果我了解您的文件结构)。

所以只需将上面的那行替换为:

if(isset($_POST['email'])  && isset($_POST['phone'])  && isset($_POST['enquiry']) && count($errors) == 0) {

因此您的文件将如下所示:

    ....PHP code above here....

    //check errors
    if(count($errors) == 0)
    {
          if(isset($_POST['email'])  && isset($_POST['phone'])  && isset($_POST['enquiry'])){

                $email = $_POST['email'];
                $phone = $_POST['phone'];
                $enquiry = $_POST['enquiry'];

                $file = "form.txt";

                $save = "Email: ".$email."\n".
                        "Phone: ".$phone."\n".
                        "Comment: ".$enquiry."\n";

                file_put_contents($file,$save, FILE_APPEND);
        }

        //redirect to home page
        header("Location: index.php");
        exit();
    } // end count($errors) == 0 check
} // end if($_POST) check
?>

<div class="form-group">
        <label for="name">Email</label>
        <input type="email" class ="form-control" name="email" id="email" placeholder="Enter Email">
        <p><?php if(isset($errors['email1'])) echo $errors['email1'];?></p>
        <p><?php if(isset($errors['email2'])) echo $errors['email12'];?></p>
    </div>

....HTML code continues here....