Javascript jQuery验证插件存在多个远程问题。是我还是虫子?
我在两步注册表单中使用jQuery验证插件 在“第一步”中,我使用远程功能检查用户名和电子邮件的可用性 这就是bug(或者我!):Javascript jQuery验证插件存在多个远程问题。是我还是虫子?,javascript,php,jquery,Javascript,Php,Jquery,我在两步注册表单中使用jQuery验证插件 在“第一步”中,我使用远程功能检查用户名和电子邮件的可用性 这就是bug(或者我!): 若数据库中存在用户名,但电子邮件不存在,当我单击“下一步”按钮时,脚本将允许我进入第二步。(不应该,因为用户名存在!) 但是 如果用户名不存在,并且数据库中存在电子邮件,则会在那里阻止我并警告我电子邮件存在。所以它起作用了 如果数据库中同时存在用户名和电子邮件,也会阻止我。所以又开始工作了 这是我正在使用的代码 HTML: <div class="ta
- 若数据库中存在用户名,但电子邮件不存在,当我单击“下一步”按钮时,脚本将允许我进入第二步。(不应该,因为用户名存在!)
- 如果用户名不存在,并且数据库中存在电子邮件,则会在那里阻止我并警告我电子邮件存在。所以它起作用了
- 如果数据库中同时存在用户名和电子邮件,也会阻止我。所以又开始工作了
<div class="tab-content">
<p>Page.</p>
<form class="form-horizontal" onsubmit="return false;" action="" method="post" id="myform">
<div id="stepusername">
<p>This is step 1</p>
<input type="text" class="form-control" id="username" name="username" placeholder="Username" autocomplete="off"><br>
<input type="email" class="form-control" id="email" name="email" placeholder="email" autocomplete="off"><br>
<p><a class="btn btn-primary next">Go to step 2</a></p>
</div><!-- signup_one ends -->
<div id="stepemail">
<p>This is step 2</p>
<input type="password" class="form-control" id="password" name="password" placeholder="password" autocomplete="off"><br>
<input type="password" class="form-control" id="conf_password" name="conf_password" placeholder="password" autocomplete="off"><br>
<input class="btn btn-success next" type="submit" value="Finish">
</div><!-- step2 ends -->
</form>
<div id="stepsuccess">
<p>Show result here.</p>
</div><!-- success ends -->
</div><!-- tab-content ends -->
<script type="text/javascript">
// jQuery.validate script, does client-side validation
$(document).ready(function(){
$(".next").click(function(){
var form = $("#myform");
form.validate({
errorElement: 'div',
errorClass: 'formerror',
highlight: function(element, errorClass, validClass) {
$(element).closest('.form-group').addClass("has-error");
},
unhighlight: function(element, errorClass, validClass) {
$(element).closest('.form-group').removeClass("has-error");
},
rules: {
username: {
required: true,
remote: {
url: "check-username.php",
async: false,
type: "post", }
},
password : {
required: true,
},
conf_password : {
required: true,
equalTo: '#password',
},
email: {
required: true,
remote: {
url: "check-email.php",
async: false,
type: "post", }
},
},
messages: {
username: {
required: "Username required",
remote: "Taken username.",
},
password : {
required: "Password required",
},
conf_password : {
required: "Password required",
equalTo: "Password don't match",
},
email: {
required: "Email required",
remote: "Taken email.",
},
}
});
if (form.valid() === true){
if ($('#stepusername').is(":visible")){
current_fs = $('#stepusername');
next_fs = $('#stepemail');
}else if($('#stepemail').is(":visible")){
current_fs = $('#stepemail');
next_fs = $('#stepsuccess');
}
next_fs.show();
current_fs.hide();
}
});
});
</script>
页面
这是第一步
该行不查找,如果存在一个用户,其名称等于$request
的内容,则查找具有名称的用户是否存在,与电子邮件相同
PHP中的字符串组合工作方式不同,您应该编写
$query = $handler->query("SELECT * from usertable WHERE username=".$request);
此外,您永远不应该使用像这样的MySQL查询,因为这是世界上最容易注入SQL代码并破坏整个数据库的事情
该行不查找,如果存在一个用户,其名称等于$request
的内容,则查找具有名称的用户是否存在,与电子邮件相同
PHP中的字符串组合工作方式不同,您应该编写
$query = $handler->query("SELECT * from usertable WHERE username=".$request);
此外,您永远不应该使用这样的MySQL查询,因为这是世界上最容易注入SQL代码并破坏整个数据库的事情。您是否考虑过您的检查username.php
不起作用?@TomDoodler它确实起作用。当我输入taked username和available email时,我点击“next”,它会显示“taked username”消息,但无论如何会引导我进入下一步。但我在消息中写的其他条件不允许我进入下一步。这再次暗示@TomDoodler所说的,php
算法可能无法进行特定的验证。请考虑你的问题。“Tom Doodler,先生们,你是对的。”我更新了我的帖子。我还添加了检查email.php
,供您参考。@Lukasz我对您正在使用的验证插件不太了解,但我有一个建议。尝试将“异步”从username
规则更改为true
。它可能会被绕过,因为它正在同步(每次)验证您的规则。您是否考虑过您的检查username.php
不起作用?@TomDoodler它确实起作用。当我输入taked username和available email时,我点击“next”,它会显示“taked username”消息,但无论如何会引导我进入下一步。但我在消息中写的其他条件不允许我进入下一步。这再次暗示@TomDoodler所说的,php
算法可能无法进行特定的验证。请考虑你的问题。“Tom Doodler,先生们,你是对的。”我更新了我的帖子。我还添加了检查email.php
,供您参考。@Lukasz我对您正在使用的验证插件不太了解,但我有一个建议。尝试将“异步”从username
规则更改为true
。它可能被绕过,因为它正在同步地(每次)验证您的规则。我建议您也包括正确的方法,其中OP应该将参数绑定到查询字符串,而不是在其中调用变量。这会很有建设性。我在谷歌上搜索了几分钟,但是我找不到它,而且我也不可能在我自己的代码atm中查找,所以我建议你试着自己查找,关键字是PDO
和injection
,我希望我能帮助你。它以你的方式工作,我只是不想以这种方式发布它,为了调试和开发它更舒适请告诉我它是否解决了你的问题我改为$requestuser=$\u REQUEST['username']
和$query=$handler->query(“从usertablo中选择*,其中username='.$requestuser'”)代码>但一切都是一样的。为什么会不同呢?您只是更改了变量的名称,而不是我在回答中提到的错误。我建议您也包括正确的方法,其中OP应该将参数绑定到查询字符串,而不是在其中调用变量。这会很有建设性。我在谷歌上搜索了几分钟,但是我找不到它,而且我也不可能在我自己的代码atm中查找,所以我建议你试着自己查找,关键字是PDO
和injection
,我希望我能帮助你。它以你的方式工作,我只是不想以这种方式发布它,为了调试和开发它更舒适请告诉我它是否解决了你的问题我改为$requestuser=$\u REQUEST['username']
和$query=$handler->query(“从usertablo中选择*,其中username='.$requestuser'”)代码>但一切都是一样的。为什么会不同呢?您只是更改了变量的名称,而不是我在回答中提到的错误
$query = $handler->query("SELECT * from usertable WHERE username='$request'");
$query = $handler->query("SELECT * from usertable WHERE username=".$request);