【发布时间】:2015-09-10 17:18:41
【问题描述】:
我的表单有点卡住了,我不知道如何解决我当前的问题。我制作了一个表格,以便用户可以更改他的密码。我想用 jQuery 验证表单。因此我使用来自http://jqueryvalidation.org/ 的插件!
我的更新功能,因此表单正在工作。此外,如果我输入例如 3 个字母的密码,我会收到一条错误消息,因此 jQuery 验证也可以正常工作。
我现在的问题是,即使存在密码不相等或密码太短等问题,我也可以提交表单。每次单击提交按钮时都会提交表单。
我不是一个优秀的 jQuery,但我阅读了有关 submitHandler 的一些内容并尝试了它(请参阅下面的代码)但它不起作用。
谁能告诉我我的代码应该是什么样子,以便表单只有在通过 jQuery 验证时才会提交?如果可能的话,我不想更改我的 php 代码,因为我正在使用函数来插入和更新我的数据库。如果有人可以帮助我,那就太好了。
<?php
$sessioninfo=getSessionInfo($sid);
$gl_userid=$sessioninfo["pers_id"][0];
$userdata=getUserInfo($gl_userid,0);
if (isset ($_POST['submit'])) {
$content=array("password"=>crypt($pwdnew1));
updateUserInfo($gl_userid,$content);
if(updateUserInfo($gl_userid, $content)==TRUE){
$msg_success ="Your password was changed successfully!";
} else {
$msg_error ="ERROR! Your password could not be changed caused by an error! Please check and try again...";
}
}
print "<div class='widget-box'>";
print "<div class='widget-header'>";
print "<h5 class='widget-title'>You can change your Password here</h5>";
print "</div>";
print "<div class='widget-body'>";
print "<div class='widget-main'>";
print "<form class='form-horizontal' name='changepwd' id='changepwd' action='./index.php' method='post'>\n";
print "<input type='hidden' name='func' value='chpwd'>\n";
print "<input type='hidden' name='sid' value='".$sid."'>\n";
print "<div class='form-group'>";
print "<label for='inputName' class='col-sm-4 control-label'>Your ID:</label>";
print "<div class='col-sm-6'>";
print "<input type='text' class='form-control' name='yourid' id='yourid' placeholder='Your ID' value='$gl_userid' readonly>";
print "</div>";
print "</div>";
print "<div class='form-group'>";
print "<label for='inputOldPassword' class='col-sm-4 control-label'>Your old Password:</label>";
print "<div class='col-sm-6'>";
print "<input type='password' class='form-control' name='pwdold' id='pwdold' placeholder='Enter your current Password'>";
print "</div>";
print "</div>";
print "<div class='form-group'>";
print "<label for='inputNewPassword' class='col-sm-4 control-label'>New Password:</label>";
print "<div class='col-sm-6'>";
print "<input type='password' class='form-control' name='pwdnew1' id='pwdnew1' placeholder='Enter your new Password'>";
print "</div>";
print "</div>";
print "<div class='form-group'>";
print "<label for='inputRepeadPassword' class='col-sm-4 control-label'>Repead your new Password:</label>";
print "<div class='col-sm-6'>";
print "<input type='password' class='form-control' name='pwdnew2' id='pwdnew2' placeholder='Enter your new Password'>";
print "</div>";
print "</div>";
print "<div class='form-group'>";
print "<div class='col-sm-offset-5 col-sm-4'>";
print "<button type='submit' name='submit' value='submit' class='btn btn-warning btn-lg btn-block'>Change Password</button>";
print "</div>";
print "</div>";
print "</form>";
if(isset($msg_success)){ echo '<div class="alert alert-success"> <a href="#" class="close" data-dismiss="alert">×</a>'.$msg_success.' </div>'; }
if(isset($msg_error)){ echo '<div class="alert alert-info"> <a href="#" class="close" data-dismiss="alert">×</a>'.$msg_error.' </div>'; }
print "</div>";
print "</div>";
print "</div>";
print "<script src='./bootstrap/assets/js/jquery.validate.js'></script>";
print "<script src='./bootstrap/assets/js/additional-methods.js'></script>";
?>
<script type="text/javascript">
$('#changepwd').validate({
errorElement: 'div',
errorClass: 'help-block',
focusInvalid: false,
ignore: "",
rules: {
pwdold: {
required: true,
pwdold:true
},
pwdnew1: {
required: true,
minlength: 5
},
pwdnew2: {
required: true,
minlength: 5,
equalTo: "#pwdnew1"
}
},
highlight: function (e) {
$(e).closest('.form-group').removeClass('has-info').addClass('has-error');
},
success: function (e) {
$(e).closest('.form-group').removeClass('has-error');//.addClass('has-info');
$(e).remove();
},
errorPlacement: function (error, element) {
if(element.is('input[type=checkbox]') || element.is('input[type=radio]')) {
var controls = element.closest('div[class*="col-"]');
if(controls.find(':checkbox,:radio').length > 1) controls.append(error);
else error.insertAfter(element.nextAll('.lbl:eq(0)').eq(0));
}
else if(element.is('.select2')) {
error.insertAfter(element.siblings('[class*="select2-container"]:eq(0)'));
}
else if(element.is('.chosen-select')) {
error.insertAfter(element.siblings('[class*="chosen-container"]:eq(0)'));
}
else error.insertAfter(element.parent());
},
submitHandler: function (form) {
$.post("index.php", $("#changepwd").serialize());
},
invalidHandler: function (form) {
}
});
</script>
【问题讨论】:
-
您应该在服务器上验证密码。用户可以跳过您编写的任何 jQuery。虽然 也 用 jQuery 验证它是一件好事。
-
感谢您提供的信息,但这不是我当前问题的解决方案!我仍然需要有人可以帮助我并告诉我必须做什么才能在 jquery 验证错误时不提交表单!
-
刚刚测试了您的代码 - 它似乎工作得很好。我调整了一些东西:添加到 jQuery 核心中(但如果某些验证有效,我看不出这是问题所在)。删除了
"<script src='./bootstrap/assets/js/additional-methods.js'></script>",因为我没有那个文件。删除了pwdold:true,我想那是在我删除的文件中。
标签: javascript php jquery forms validation