使用PHP触发jquery验证错误插件

时间:2011-09-15 15:53:45

标签: php jquery forms validation

我希望在登录页面上进行服务器端PHP验证,以在客户端jquery验证插件验证中触发错误。使用非登录表单 - 结构化使用远程文件作为操作我只回显一个msg然后根据返回的值触发客户端验证错误/成功消息。我之前收到了一些建议,但它们没有用 - 一些语法错误(或我的无知)这里有一些伪代码:

<?php
$username = "foo";
$password = "bar";
if ($_POST['username'] != $username || $_POST['password'] != $password) {
#would like to trigger the #errormsg here
?>
<!DOCTYPE>
<html>
<head></head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" >
</body>
</html>
<?php
}
else {
?>
<!DOCTYPE>
<html>
<head></head>
<body>Logged in user sees this content</body>
</html>
<?php
}
?>

在我的验证脚本中有以下内容:

//beginning
success: function(data) {
if (data=="Error") {
$("#Error").html('ERROR MSG HERE').show();
} else {
$("#Success").html('SUCCESS MSG HERE').show();
}
//rules, msgs etc

目前,如果用户输入错误的un / pwd,它只是重置表单,我想告诉他们他们输入的信息是错误的。我知道PHP可以输出JS - 试图像在PHP中那样做 - 但无论我把它放在哪里,我得到一些语法错误,因为这些部分是如何分解的那样“} else {:

<?php
$username = "foo";
$password = "bar";
if ($_POST['username'] != $username || $_POST['password'] != $password) {
<script>
   $(document).ready(function() {
      $("#Error").html('ERROR MSG HERE').show();
   });
</script>
?>

谢谢!

2 个答案:

答案 0 :(得分:1)

您只需将PHP输出移动到正确的部分即可。在您拥有doctype或<script>标记之前,不能将<html>元素放入HTML页面。它必须进入<head><body>部分。

<?php
$username = "foo";
$password = "bar";

if(!empty($_POST) && $_POST['username'] == $username && $_POST['password'] == $password) {

#display 'LOGGED IN' page here

} else {

   if(!empty($_POST) && ($_POST['username'] != $username || $_POST['password'] != $password)) {
    //Put the javascript error alert here
   }

  //Put the log in form here
}

答案 1 :(得分:0)

我认为您应该使用Ajax表单提交和服务器端数据验证。 这是找到下面例子的正确方法。

HTML文件

<html>
<head>
    <script type="text/javscript" src="latest-jquery.js"></script>
    <script type="text/javscript">

        $(function(){

            $('#login-form').submit(function(){

                $form = $(this);
                $message = $form.find('.message');

                $.post($form.attr('action'), $form.serialize(), function(data){

                    if( data.error ) {

                        $message.html( data.message ).removeClass('success').addClass('error');

                    } else if( data.success ) {

                        $message.html( data.message ).removeClass('error').addClass('success');

                    }

                }, 'json');

                return false;
            });

        });

    </script>
</head>
<body>
    <form id="login-form" action="PATH_TO_PHP_FILE" method="post">
        <div class="message"></div>
        <input type="text" name="username" />
        <input type="password" name="password" />
        <input type="submit" value="Login Now !" />
    </form>
</body>

PHP文件

<?php
$username = 'foo';
$password = 'bar';

$response = array('error' => TRUE, 'message' => "Invalid Credentials");

if ( count($_POST['username']) && isset($_POST['username']) && isset($_POST['password']) && $_POST['username'] == $username && $_POST['password'] == $password  ) {

    $response = array('error' => FALSE, 'success' => TRUE, 'message' => "Bingo you have done it !");

}

print json_encode($response); //PHP function to convert array to JSON
exit; //To resolve IE Bug
?>

据我所知,这是正确的方法。