繁体   English   中英

PHP的联系形式验证,这将停止显示没有错误和成功的形式

[英]php contact form validation which stops showing form on no errors and success

这是我的代码:

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    if (empty($_POST["yourname"])) {
        $yournameErr = "Name is required";
    } else {
        $yourname = test_input($_POST["yourname"]);
    }

    if (empty($_POST["email"])) {
        $emailErr = "Email is required";
    } else {
        $email = test_input($_POST["email"]);
        // check if e-mail address syntax is valid
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
            $emailErr = "Invalid email format";
        }
    }

    if (empty($_POST["message"])) {
        $messageErr = "Message is required";
    } else {
        $message = test_input($_POST["message"]);
    }
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

我已经到了不会显示错误的地步,但是我可能没有对自己做清楚的解释。 在不再显示错误消息之后,我希望该表单不再出现,然后可以放下诸如“成功”之类的内容。 但是我似乎无法实现这一目标。

我的表格是:

    <form action="contact.php" name="Form1" id="Form1" method="post">
<div>
<label>Your Name:</label>
<br />
<input type="text" name="yourname" id="yourname" placeholder="Full Name" 
    style="border:1;  border-color:#000000; " />
<span class="error">* <?php echo $yournameErr;?></span>
</div>
    <br />
<br />
<div>
<label> Email :</label> <br />
<input name="email" type="text" id="email" size="20" placeholder="Email" 
    style="border:1;  border-color:#000000; " />
<span class="error">* <?php echo $emailErr;?></span>
</div>
<br />
<br />
<div>
<label> Subject : </label><br />
<input name="subject" type="text" id="subject" size="20" placeholder="Subject" 
    style="border:1;  border-color:#000000; "  />
</div>
<br />
<br />
<div>
<label> Message :<br /> </label>
<textarea rows="5" cols="40" name="message" type="text" id="message" 
    placeholder="The message you want to send to us." style="border:1;  border-  
    color:#000000 " >
</textarea>
<span class="error">* <?php echo $messageErr;?></span>
</div> 
<br />
<br />
<div>
<input type="submit" name="button" id="button" style="border:1; border-
    color:#999999; " value="SEND"/>
</div>
</form>

如果将错误放入数组中并放置一个条件以检查该数组的大小,并且该条件是否为0(无错误),则会回显成功消息并且不显示表单,否则将错误加入并打印出来怎么办?

可能是这样的:

contact.php

<?php
$error = array();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["yourname"])) {
        $error['name'] = "Name is required";
    } else {
        $yourname = test_input($_POST["yourname"]);
    }

    if (empty($_POST["email"])) {
        $error['email'] = "Email is required";
    } else {
        $email = test_input($_POST["email"]);
        // check if e-mail address syntax is valid
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
            $error['email'] = "Invalid email format";
        }
    }

    if (empty($_POST["message"])) {
        $error['message'] = "Message is required";
    } else {
        $message = test_input($_POST["message"]);
    }

    if (!count($error)) {
         $noError = true;
    }
}

$successMessage = isset($noError) ? 'Successful.' : '';

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

function getErrorMessage($type, $error)
{
    return isset($error[$type]) ? $error[$type] : '';
}

if ($successMessage) {
    echo $successMessage;
} else {
?>
<form action="contact.php" name="Form1" id="Form1" method="post">
    <div>
        <label>Your Name:</label>
        <br/>
        <input type="text" name="yourname" id="yourname" placeholder="Full Name"
               style="border:1px;  border-color:#000000; "/>
        <span class="error">* <?php echo getErrorMessage('name', $error); ?></span>
    </div>
    <br/>
    <br/>

    <div>
        <label> Email :</label> <br/>
        <input name="email" type="text" id="email" size="20" placeholder="Email"
               style="border:1px;  border-color:#000000; "/>
        <span class="error">* <?php echo getErrorMessage('email', $error); ?></span>
    </div>
    <br/>
    <br/>

    <div>
        <label> Subject : </label><br/>
        <input name="subject" type="text" id="subject" size="20" placeholder="Subject"
               style="border:1px;  border-color:#000000; "/>
    </div>
    <br/>
    <br/>

    <div>
        <label> Message :<br/> </label>
        <textarea rows="5" cols="40" name="message" type="text" id="message"
                  placeholder="The message you want to send to us." style="border:1px;  border-  
    color:#000000 "></textarea>
        <span class="error">* <?php echo getErrorMessage('message', $error); ?></span>
    </div>
    <br/>
    <br/>

    <div>
        <input type="submit" name="button" id="button" style="border:1px; border-
    color:#999999; " value="SEND"/>
    </div>
</form>
<?php } ?>

根据您的代码,我将假设您的contact.php正在向自身发布。 换句话说,您的PHP代码位于HTML上方-由于您提出以下问题:联系表单在请求后不再呈现。 也就是说,服务器渲染页面后,表单标签将不会显示,因为提交中没有错误或已设置了超级全局$ _POST。

为了便于阅读,我对您的代码做了一些改动。 我提供了一个数组,该数组将保存整个表单验证过程中的所有错误消息。 如果没有错误,那么我们可以模拟成功的提交,从而在响应中反映此结果。 您的表单仅在出现错误或帖子尚未提交时显示。

在表单内部,您需要一个输入标签Submit。 此外,只有在确实设置了错误的情况下,我们才要显示错误特定的消息。 这就是为您的span标签设置条件的原因。 最后,我在您的值中包括了相同条件-一项用于记住您输入内容的附加功能。

如果成功提交了表单,则不要渲染form标记,而是显示一条成功消息以及所有POST数据!

<?php

if (isset($_POST['submit'])) {

    $error_message = array();

    if (empty($_POST["yourname"])) {
        $error_message['yournameErr'] = "Name is required";
    } else {
        $yourname = test_input($_POST["yourname"]);
    }

    if (empty($_POST["email"])) {
         $error_message['emailErr'] = "Email is required";
    } elseif (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $_POST["email"])) {
        $error_message['emailErr'] = "Invalid email format";
    } else {
        $email = test_input($_POST["email"]);
    }

    if (empty($_POST["message"])) {
        $error_message['messageErr'] = "Message is required";
    } else {
        $message = test_input($_POST["message"]);
    }

    if(empty($error_message)) {
        // process data from post
        $successful = true;
    }
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

?>
<?php if(!empty($error_message) || !isset($_POST['submit'])) : ?>
     <form action="contact.php" name="Form1" id="Form1" method="post">
    <div>
    <label>Your Name:</label>
    <br />
    <input type="text" name="yourname" id="yourname" placeholder="Full Name" 
        style="border:1;  border-color:#000000; " value="<?php if(isset($yourname)) {echo $yourname; }?>" />
    <span class="error">* <?php if(isset($error_message['yournameErr'])){echo $error_message['yournameErr']; }?></span>
    </div>
        <br />
    <br />
    <div>
    <label> Email :</label> <br />
    <input name="email" type="text" id="email" size="20" placeholder="Email" 
        style="border:1;  border-color:#000000; " value="<?php if(isset($email)) { echo $email;}?>" />
    <span class="error">* <?php if(isset($error_message['emailErr'])) {echo $error_message['emailErr'];}?></span>
    </div>
    <br />
    <br />
    <div>
    <label> Subject : </label><br />
    <input name="subject" type="text" id="subject" size="20" placeholder="Subject" 
        style="border:1;  border-color:#000000; "  />
    </div>
    <br />
    <br />
    <div>
    <label> Message :<br /> </label>
    <textarea rows="5" cols="40" name="message" type="text" id="message" placeholder="The message you want to send to us." style="border:1; border-color:#000000"></textarea>
    <span class="error">* <?php if(isset($error_message['messageErr'])) {echo $error_message['messageErr']; }?></span>
    <br>
    <input type="submit" name="submit" value="Submit">
    </div> 
<?php endif; ?>
<?php if(isset($successful)) : ?>
    <p>Successful</p>
    <p>Your name: <?=$yourname;?></p>
    <p>Your email: <?=$email;?></p>
    <p>Your subject: <?=$_POST['subject']?></p>
    <p>Your message: <?=$message;?></p>
    <a href="contact.php">Back to form</a>
<?php endif; ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM