我希望在登录页面上进行服务器端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>
?>
谢谢!
答案 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>
<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
$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
?>
据我所知,这是正确的方法。