0

如何显示来自表单的 php 操作脚本的消息?

该表单是具有这些字段的用户登录。

<div id="register_user_box" class="inline_form" style="position: absolute; top: 20px; right: 10px; <br/>
     <span id="user_msg"></span><br/>
     <form action="register_user.php" method="post"> 
     <input type="hidden" name="id" id="id" value="add" /> 
     <input type="hidden" name="edit_user" id="edit_user" value="y" />
     <table cellspacing="0px"> <tr><td>Username:</td></tr><tr><td>
     <input type="text" name="uname" size="30" value="" class="inline_input"/></td> </tr> <tr><td>Email:</td></tr><tr><td>
     <input type="text" name="uemail" size="30" value="" class="inline_input"/></td> </tr> <tr><td>Password:</td></tr><tr><td>
     <input type="password" name="upass" size="30" class="inline_input"/></td> </tr> <tr><td>Confirm Password:</td></tr><tr> <td> 
     <input type="password" name="cpass" size="30" class="inline_input"/></td></tr> </table></td></tr> </table> <p>
     <input class="button" type="submit" name="register" value="Register" style="float:right;"/></p>     
     </form>
</div>

php 脚本 register_user.php 检查密码是否匹配,如果不匹配则显示错误消息。该脚本会检查所有其他字段并在必要时打印一条消息。

<?php

    $messages = array( 'usr_cred_req' => 'Must specify username, email, password.',
                        'usr_name_bad' => 'Bad username selection.  Select a different usrename.', 
                        'usr_name_exists' => 'Username selected already exists.  Select a different username.',
                        'usr_email_bad' => 'Bad email selection.  Select a different email.',
                        'usr_email_exists' => 'Email selected already exists.  Select a different email.',
                        'usr_pass_notmached' => 'Passwords do not match.  Type passwords again.', 
                        'usr_not_added' => 'User not added.',
                        'usr_not_updated' => 'User not updated.',
                        'usr_added' => 'User added.'
                        );

    $username = trim($_REQUEST['uname']);
    $email = trim($_REQUEST['uemail']);
    $password = md5(trim($_REQUEST['upass']));
    $copasswd = md5(trim($_REQUEST['cpass']));


    if ( $password != $copasswd ) { echo '<script> $("#usr_msg").html("'.$messages['usr_pass_notmached'].'"); </script>'; return;}
?>

错误消息未显示,浏览器离开页面。我希望浏览器留在页面上并将错误消息添加到跨度 user_msg。

4

3 回答 3

1

如果您不希望浏览器在提交表单时离开页面,那么您将不得不使用 AJAX 在后台提交表单以与服务器通信,然后使用错误消息(或其他内容)更新容器成功)。

或者,让 PHP 表单发布到自身,在输出 HTML 之前检查错误消息,如果出现错误,将错误消息插入到所需位置的表单标记中,并使用所有值重新填充表单最初提交。

于 2012-04-17T00:47:35.823 回答
0

http://jquery.malsup.com/form/

这是一个很好的 jQuery AJAX 表单插件。这将防止页面在提交时刷新。希望这可以帮助。

于 2012-04-17T01:04:56.127 回答
0

为什么要回显 JS 脚本来显示错误消息?你把它写出来的方式不会显示一个小弹出窗口,你只是让它填充span. 一个更好的方法是这样的:

if ( $password != $copasswd ) {
   $display_msg = $messages['usr_pass_notmached']
}

然后在您的 HTML 中执行以下操作:

<span><?php echo $display_msg?></span>

如果变量为空,则不显示任何内容。如果您对所有字段执行此操作,那么您可以确保表单中的所有信息都在错误时返回,无论实际字段是否错误,从而防止用户再次重新输入所有信息。让表单执行$_SERVER['PHP_SELF']以确保它重新加载同一页面

我将构建 PHP 功能(用户无法关闭)并确保您的表单在 100%(或接近)时间内正常工作。然后,一旦你的脚本工作,添加你的 JS 功能来补充你现有的代码。

在我的工作中,我构建了一个额外的数组,在这种情况下$display_msg,我会检查所有输入字段。如果一个字段失败,我将其添加到数组中,$display_msg['password']然后我转到下一个字段。检查完所有字段后,我会检查$display_msg变量是否empty存在。如果它不是空的,那么我让它span用红色字母填充输入框旁边的所有内容,解释错误。这将同时打印出所有错误,而不是一次打印出一个,而它的工作方式是在表格的下方。在每个输入旁边,我有一个span带有给定变量名称的,在这种情况下<?php echo $display_msg['password']?>,然后在用户名旁边,<?php echo $display_msg['username']?>依此类推。希望这足够清楚并有所帮助。

于 2012-04-17T01:05:29.423 回答