【问题标题】:How to display validation error next to the field?如何在字段旁边显示验证错误?
【发布时间】:2014-10-30 13:42:13
【问题描述】:

我正在尝试为 wordpress 网站创建一个简单的表单。我创建了一个完整的表格,它工作正常。代码如下。

<?php
//Setup an empty array.
$errors = array(); 
    if($_POST["submit"]) {
    $to = "myemail@gmail.com";
    $subject = "New reservations request";
    $hotel = $_POST["hotel_url"];
    $sender = $_POST["sendername"];
    $senderEmail = $_POST["senderEmail"];

    //Check the name and make sure that it isn't a blank/empty string.
    if(strlen(trim($sender)) === 0){
        //Blank string, add error to $errors array.
        $errors[] = "You must enter your name!";
    }

    //Make sure that the email address is valid.
    if(!filter_var($senderEmail, FILTER_VALIDATE_EMAIL)) {
        //$email is not a valid email. Add error to $errors array.
        $errors[] = "That is not a valid email address!";
    }

    if(!empty($errors)){ 
        echo '<h1 style="color: red">Error(s)!</h1>';
        foreach($errors as $errorMessage){
            echo $errorMessage . '<br>';
        }
    } 

    if(empty($errors)){

        $mailBody = "<table border='1'>
                       <tr>
                        <th>No</td>
                        <th>Item</td>
                        <th>Description</td>
                       </tr>
                       <tr>
                        <td>01</td>
                        <td>Hotel</td>
                        <td>$hotel</td>
                       </tr>
                       <tr>
                        <td>02</td>
                        <td>Name</td>
                        <td>$sender</td>
                       </tr>
                       <tr>
                        <td>03</td>
                        <td>E-Mail</td>
                        <td>$senderEmail</td>
                       </tr>
                    </table>";

            $headers = array('From: '.$_POST['sendername'].' <'.$_POST['senderEmail'].'>');

            $mail_sent = wp_mail( $to, $subject, $mailBody, $headers ); 
        }
    }

    if ($mail_sent) {
?>
    <p>Request sent</p>

<?php 
} else {
?>

<form id="" name="" action="<?php echo get_permalink(); ?>" method="post">
<input type="hidden" name="hotel_url" value="<?php echo get_permalink();?>" />

    <div class="section-heading"><h6>Your Details</h6></div>    
    <div class="label-input-wrapper">
        <div class="form-label">Name</div><div class="form-input"><input type="text" name="sendername"/></div>
    </div>

    <div class="label-input-wrapper">
        <div class="form-label">E-Mail</div><div class="form-input"><input type="email" name="senderEmail" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" required /></div>
    </div>  

    <input type="submit" value="Submit" name="submit">
</form>

<?php
}
?>

此代码 sn-p 将用户输入作为 HTML 表格发送到电子邮件。验证也可以正常工作,但验证错误出现在表单顶部。

我想在每个字段旁边显示验证错误。如何仅使用 PHP 做到这一点?

【问题讨论】:

    标签: php wordpress forms validation


    【解决方案1】:

    你也可以这样做。

    <form method="post" action="">
    <input type="text" name="email" value="<?php echo $_POST['email'];?>"/>
    <?php if(!empty($_POST['email']) && !filter_var($_POST['email'], 
                                          FILTER_VALIDATE_EMAIL)) : ?>
    <small class="errorText">Email is not valid!</small>
    <?php endif; ?>
    <br>
    <input type="submit" name="send" value="send">
    </form>
    
    <style type="text/css">
    .errorText {color: red;}
     </style>
    

    【讨论】:

    • 谢谢..这似乎是一条捷径,易于应用...条件就放在字段的正下方..好技巧,易于理解..
    【解决方案2】:

    您可以将字段名称添加为 $errors 数组的键,然后在每个字段之后进行检查。像这样的:

    //Check the name and make sure that it isn't a blank/empty string.
    if(strlen(trim($sender)) === 0){
        //Blank string, add error to $errors array.
        $errors['sendername'] = "You must enter your name!";
    }
    ...
    <div class="label-input-wrapper">
        <div class="form-label">Name</div>
        <div class="form-input">
            <input type="text" name="sendername"/>
            <?php if(isset($errors['sendername'])) { echo $errors['sendername']; } ?>
        </div>
    </div>
    

    【讨论】:

    • 哇哦.. 太完美了。像魅力一样工作。非常感谢。我还需要一项功能。当表单显示错误消息时,所有字段现在都是空白的。当它显示验证错误时,我想让表单字段必须显示这些用户输入到其他字段的值。 eg:如果用户输入了e-mail但没有输入姓名,当出现姓名验证错误时,输入的email地址必须显示在email字段中。
    • tinypic.com/r/14vhb9u/8 查看屏幕截图。它显示名称的验证错误。没关系。但我也想在我输入的电子邮件字段中显示电子邮件。
    • 脚本中包含了执行此操作所需的所有信息。只需将字段变量作为每个文本字段的值回显即可。
    • 我已经更新了这样的代码&lt;div class="label-input-wrapper"&gt; &lt;div class="form-label"&gt;E-Mail&lt;/div&gt; &lt;div class="form-input"&gt; &lt;input type="email" name="senderEmail" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" required value="&lt;?PHP if(!empty($errors)) { echo $senderEmail;} ?&gt;"/&gt; &lt;/div&gt; &lt;/div&gt; 现在它显示了我没有输入姓名时输入的电子邮件地址。检查屏幕截图:tinypic.com/r/33ku1c5/8 但如果我输入姓名并在收到此屏幕后提交表单,我不会收到电子邮件
    • 它工作正常.. 我没有更改$to 电子邮件.. 非常感谢。今天真的是节省了一天......
    猜你喜欢
    • 2012-02-17
    • 2012-06-12
    • 2012-06-29
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多