<script>$(function(){ //检测用户名是否存在 $("#name").blur(function(){ //$parent=$("#user_name").parent(); $.get("deal.php",{username:$("#name").val()}, function(data){ if(data.status==1){ $("#namediv").html('<font color=red>用户名已存在</font>'); //$parent.append('<span>'+data+'</span>'); } },'json'); }); //提交注册 $("#sub").click(function(){ //var rule = /^[-\da-zA-Z!@#$%^&*_]*$/; var reg =/^[a-za-z0-9]+$/; var v = $.trim($("#password").val()); if($("#name").val()=='' || $.trim($("#password").val())=='' || $("#confirmpassword").val()==''){ if($.trim($("#name").val())==''){ $("#namediv").html('<font color=red>用户名不能为空</font>'); $("#name").focus(); }else{ $("#namediv").html(''); } if($.trim($("#password").val())==''){ $("#pwddiv").html('<font color=red>密码不能为空</font>'); $("#password").focus(); }else{ $("#pwddiv").html(''); } if($("#confirmpassword").val()==''){ $("#confirmpwd").html('<font color=red>确认密码不能为空</font>'); $("#confirmpassword").focus(); }else{ $("#confirmpwd").html(''); } }else if($("#confirmpassword").val()!=$("#password").val()){ $("#confirmpwd").html('<font color=red>确认密码不正确</font>'); $("#namediv,#pwddiv").html(''); }else if(reg.test(v)){ $("#pwddiv").html('<font color=red>密码格式不正确</font>'); $("#namediv,#confirmpwd").html(''); }else{ $.post("deal.php",{name:$("#name").val(),password:$("#password").val(),code:$("#TextBox2").val()}, function(data){ if(data.status==1){ alert('注册成功'); $("#namediv,#pwddiv,#confirmpwd").html(''); }else{ alert('验证码错误!'); $("#namediv,#pwddiv,#confirmpwd").html(''); } },'json'); } }); }); </script>
コードは役に立ちません。
バックエンドも判断する必要があります。
この問題はすべてバイパスされます。これはサーバー側で行われ、フロントエンドの js はより良いエクスペリエンスを提供するためのものです。
最終的な提出手順にユーザーの存在判定を追加するだけです。
クライアント側の検証はすべてバイパスできます。これは、より良いエクスペリエンスを提供するためだけにサーバーに任せる必要があります。
最終的な提出手順にユーザーの存在判定を追加するだけです。
//判断是GET方式还是POSTif(($_SERVER['REQUEST_METHOD'] == 'GET')){ $name1=$_GET['username']; $sql="select * from users where name='$name1'"; $result=mysql_query($sql); $num=mysql_num_rows($result); if($num==0){ echo '{"status": "2"}'; } else{ //echo"<span style='color:red'>用户名存在</span>"; echo '{"status": "1"}'; } }else{ $name=trim($_POST['name']); $password = trim(md5($_POST['password'])); $code=trim($_POST['code']); if(strlen($code)>1 and $code!==$_SESSION['code']){ $sql = "insert into users (name,password) values ('{$name}','{$password}');"; $res = mysql_query($sql); if($res){ echo '{"name": "'.$name.'","password": "'.$password.'","status": "1"}'; } }else{ echo '{"status": "2"}'; }}これはバックエンド処理プログラムですが、どのように判断しますか?
$.post() を実行するときに、$("#namediv").html() かどうかを判断しませんでした。は空です (ユーザー名が存在します)
つまり、ユーザー名が存在するかどうかに関係なく、$.post() が実行されます
$sql = "ユーザー (名前,パスワード) 値に挿入を実行しています('{$name }','{$password}');"; 、ユーザー名がすでに存在するかどうかもチェックしません
つまり、ユーザー名が存在するかどうかに関係なく、$.post()$res = mysql_query($sql); will Executed
これら 2 つの省略が、アカウント名が存在し、まだ登録できる理由です
$("#namediv" を判断しませんでした) ) $.post() を実行するとき、html() が空かどうか (ユーザー名が存在するかどうか)
つまり、ユーザー名が存在するかどうかに関係なく、$.post() が実行されます
$sql = "insert into users (name,password) )values ('{$name}','{$password}');"; また、ユーザー名が既に存在するかどうかもチェックしません
、ユーザー名が存在するかどうかに関係なく、$.post()$res = mysql_query($sql); が実行されます
これら 2 つの省略がユーザー名を登録できる理由です
面倒だと思いませんか?
フロントデスクで JS を使用して簡単なフィールド検証を実行します。重複しない登録を実現したい場合は、バックグラウンドで実行します。例: Zhang San
まず、データベースに Zhang San が存在するかどうかを確認します。そうでない場合は、そのままにしておきます。存在する場合は、それが完了していることを示すメッセージが表示されます。
重要なのは、PHP 側の検証が簡単すぎるということです。 SQL インジェクションに問題がある可能性があります。 。 。