0

フォームを介して渡されたデータを検証し、その後データベース テーブル users を更新するユーザー クラスを作成しました。ユーザー名と電子メールがテーブルに存在するかどうかを確認するなどの追加機能を追加したいのですが、これを構築するためにstackoverflowのメンバーから助けを得ましたが、以下のコードではまだ重複した電子メールを挿入できますデータベースで、SQL エラー メッセージは表示されず、「1 行が挿入されました」という成功メッセージだけが表示されます。明らかに、「メールが存在します」というエラーメッセージが表示されると思います

どんな助けでも役に立ちます。

public function insert() {

$result = $this->mysqli->prepare("SELECT COUNT(*) FROM users WHERE email=?");
$result->bind_param("s", $_POST['email']);
$result->execute();
$result->bind_result($email_count);
$result->close();   

if ($email_count > 0) {
echo "email exisits!";
} else {
//escape the POST data for added protection
    $username = isset($_POST['username']) ? $this->mysqli->real_escape_string($_POST['username']) : '';
    $cryptedPassword = crypt($_POST['password']);
    $password = $this->mysqli->real_escape_string($cryptedPassword);
    $name = isset($_POST['name']) ? $this->mysqli->real_escape_string($_POST['name']) : '';
    $email = isset($_POST['email']) ? $this->mysqli->real_escape_string($_POST['email']) : '';
    $stmt = $this->mysqli->prepare("INSERT INTO users (username, password, name, email) VALUES (?, ?, ?, ?)");
    //var_dump($this->mysqli->error);
    $stmt->bind_param('ssss', $username, $password, $name, $email); // bind strings to the paramater
    /* execute prepared statement */
    $stmt->execute();
    printf("%d Row inserted.\n", $stmt->affected_rows);
    /* close statement and connection */
    $stmt->close();
                } // end email_count and insert to table
            } // end function

以下に添付されているこのajaxコードを使用しましたが、うまくいきました....役立つかどうか試してください....

ajax コード ------------------

   <script type="text/javascript">
    $(document).ready(function() {
        // check username availability on focus lost
        $('#username').focusout(function() {
           if ($('#username').val()!='') {
               var username=$('#username').val();
           $.ajax({
                    url: "/gtlqa/checkUserNameAvailability/checkAvailability.html?username="+username,
                    method:'GET',
                    success:function(data){
                        if(data!="available")
                            {
                             $('input:submit').attr("disabled", true);
                             $("#usernameErrorMessage").html("username already exists");
                            }
                        else
                            {
                            $("#usernameErrorMessage").html("available");
                            $('input:submit').attr("disabled", false);
                            }
                        }
               });
            }
        });
    });

    function checkAvailability() {
        $.getJSON("/checkUserNameAvailability", {
            username : $('#username').val()
        }, function(available) {
            if (available) {
                fieldValidated("username", {valid : true});
                $('input:submit').attr("disabled", false);
            } else {
                $('input:submit').attr("disabled", true);
                fieldValidated("username", {valid : false, message : $('#username').val() + " is not available"});
            }
        });
    }
 </script>

コントローラ - - - - - - - -

@RequestMapping(value="checkAvailability",method = RequestMethod.GET)
public @ResponseBody String getAvailability(@RequestParam("username") String username) {
    System.out.println("username is"+username);
    boolean status=userService.available(username);

    if(status)
    {
    return "available";
    }
    else 
    return "username already exists";
}
4

1 に答える 1

1

fetchその後、次のように呼び出す必要があります。

$result->bind_result($email_count);
$result->close(); 
$result->fetch();//fecth
$result->close(); 
//then


if ($email_count > 0) {
echo "email exisits!";
}

real_escape_string準備されたステートメントに使用する必要がないことに注意してください

于 2013-08-28T11:09:56.490 に答える