显示输入字段旁边的错误

时间:2014-03-18 13:38:02

标签: php html html-form

我知道关于同样的问题存在很多问题,但是我很坚持。我很难弄清楚什么是错的。我从谷歌尝试过很多东西,没有运气。我试图将验证错误显示在相关输入字段旁边,而不是仅显示在表单顶部。表格非常大,所以我只是发布一个"样本"它的。

HTML表单:

<form action="register.php" method="POST">
    <table>
        <th class="topLine">
            <label for="form_login" >Login
        </th>

        <td>
            <div class="form_input_bg">
                <input type="text" name="username" value="" maxlength="16" size="16"/>
                <?php echo $username;?>
            </div>
        </td>
    </tr>


    <tr>
        <th class="topLine">Password
            <p style="font-size:9px;">8-16 Character (only a-Z,0-9)</p>
        </th>
        <td>
            <div class="form_input_bg">
                <input type="password" name="pass" value="" maxlength="16" size="16"/>
            </div>
        </td>
    </tr>
    <tr>

和PHP验证,它恰好是这样,仍然是它的样本(不要伤害你的眼睛)。

<?PHP
    elseif(strlen($_POST['username']) < 5)
    {
        echo '<div class="message">Username must be longer than 4 characters
              </div></div><p>
?>

4 个答案:

答案 0 :(得分:1)

我建议你将验证与显示html分开:

// validation
$error = array();
if (strlen($username) < 5)
    $error['username'] = 'Login must be longer than 4 characters';


// html
<input type="text" name="username" value="" maxlength="16" size="16"/><?php echo $username;?>
<?php if (isset($error['username'])) : ?>
    <p class="error"><?php echo $error['username'] ?></p>
<?php endif ?>

答案 1 :(得分:0)

这两段代码如何相互关联?像这样?:

<?php
    // other code
    elseif(strlen($_POST['username'])<5) {
        echo '<div class="message">Login must be longer than 4 characters</div></div><p>
    // other code
?>
<!-- other markup -->
<form>
    <table>
        <!-- form elements -->
    </table>
</form>

如果是这种情况,那么您的代码明确echo验证消息“在顶部”,因为它在发出其他任何内容之前将它们发送到输出。您需要将它们移动到它们在标记中的位置,如下所示:

<!-- other markup -->
<form>
    <table>
        <tr>
            <td>
            <?php
                if(strlen($_POST['username'])<5) {
                    echo '<div class="message">Login must be longer than 4 characters</div>';
                }
            ?>
            <!-- login form element -->
            </td>
        </tr>
        <!-- repeat for other form elements -->
    </table>
</form>

从上到下的整个代码文件按顺序处理。要将一个元素放在标记中间的某个位置,代码在标记中的那一点需要echo

答案 2 :(得分:0)

也许你可以试试像这样的人。

<dl>
   <dt>Login:</dt>
   <dd><input type="text" name="username" value="" maxlength="16" size="16"/>
   <?php echo ($message['username'] == "" ? "" : $message['username']) ?></dd>
   <dt>Password:</dt>
   <dd><input type="text" name="password" value="" maxlength="16" size="16"/>
   <?php echo ($message['username'] == "" ? "" : $message['username']) ?></dd>
</dl>

出于布局原因,您不应该使用表格。 (表到定义列表)

对于另一部分生成

<?PHP
$message = array();
...
elseif(strlen($_POST['username'])<=5) {
$message['username']'<div class="message">Login must be longer than 4 characters</div>    
?>

希望这有帮助!

答案 3 :(得分:0)

试试这个

<!DOCTYPE HTML> 
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> 
<?php
$nameErr = $emailErr = "";
$name = $email = "";

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

if (strlen($_POST["name"])<5)
{$nameErr = "Username must be longer than 4 characters";}
else
 {$name = $_POST["name"];}
if (empty($_POST["email"]))
 {$emailErr = "Email is required";}
else
 {$email = $_POST["email"];}
}
?>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo($_SERVER["PHP_SELF"]);?>"> 
Name: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit"> 
</form>
</body>
</html>