2017-03-04 14 views
-1

ユーザー名、電子メール、パスワード、性別を登録する単純な登録ページを作成しようとしています。私は何とかいくつかの問題を遭遇しました。私が作ったコードは、ユーザーが既に存在するユーザー名または電子メールで登録できるようにしています。私はこれを私のコードで防止しようとしましたが、うまく動作していないようです。ユーザーが同じユーザー名と電子メールで登録しないようにします

私は間違っていますか?ここで

は、全体のコードです:

<?php 
session_start(); 
if (isset($_SESSION['user'])!="") { 
    header("Location: index.php"); 
} 
include 'includes/config.php'; 

if(isset($_POST['btn-signup'])) { 

    $username = strip_tags($_POST['username']); 
    $username = strtolower($_POST['username']); 
    $email = filter_var($_POST['email'],FILTER_SANITIZE_EMAIL); 
    $email = filter_var($email,FILTER_VALIDATE_EMAIL); 
    $email = strip_tags($_POST['email']); 
    $password = strip_tags($_POST['password']); 
    $current_time = strtotime("now"); 
    $username = $con->real_escape_string($username); 
    $gender = $con->real_escape_string($_POST["gender"]); 
    $email = $con->real_escape_string($email); 
    $password = $con->real_escape_string($password); 

    $hashed_password = password_hash($password, PASSWORD_DEFAULT); // this function works only in PHP 5.5 or latest version 

    $check_username = $con->query("SELECT * FROM users WHERE username='$username' LIMIT 1"); 
    $check_email = $con->query("SELECT * FROM users WHERE email='$email' LIMIT 1"); 

     if(count($_POST)>0) { 

    if(!isset($msg)) { 
    } 
    if($_POST['username'] === $check_username){ 
    $msg = 'Username already exists<br>'; 
    } 

    if($_POST['email'] === $check_email){ 
    $msg = 'Email already exists<br>'; 
    }  

    if($_POST['password'] != $_POST['confirm_password']){ 
    $msg = 'Password doesnt match<br>'; 
    } 


    if(!isset($msg)) { 
    if (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) { 
    $msg = "Invalid e-mail"; 
    } 
    } 

    if(!isset($msg)) { 
    if(!isset($_POST["gender"])) { 
    $msg = " Gender field is required"; 
    } 
    } 
    } 

    if(!isset($msg)) { 
     $query = "INSERT INTO users(username,email,password,gender,joined) VALUES('$username','$email','$hashed_password','$gender','$current_time')"; 
       if(mysqli_query($con, $query)){ 
       $msg = "You have registered successfully!"; 
       } else{ 
       $msg = "Could not register your account. Try Again!"; 
       } 
    } 
} 
    $con->close(); 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
    <title>Register</title> 
</head> 
<body> 
    <div class="signin-form"> 
     <div class="container"> 
      <form class="form-signin" id="register-form" method="post" name="register-form"> 
       <h2 class="form-signin-heading">Sign Up</h2> 
       <hr> 
       <?php 
       if (isset($msg)) { 
       echo $msg; 
       } 
       ?> 
       <div class="form-group"> 
        <input class="form-control" name="username" placeholder="Username" required="" type="text"> 
       </div> 
       <div class="form-group"> 
        <input class="form-control" name="email" placeholder="Email address" required="" type="email"> <span id="check-e"></span> 
       </div> 
       <div class="form-group"> 
        <input class="form-control" name="password" placeholder="Password" required="" type="password"> 
       </div> 
       <div class="form-group"> 
        <input class="form-control" name="confirm_password" placeholder="Confirm password" required="" type="password"> 
       </div> 
       <div class="form-group"> 
        <select class="form-control" id="gender" name="gender"> 
         <option disabled hidden="" selected> 
          Select 
         </option> 
         <option> 
          Male 
         </option> 
         <option> 
          Female 
         </option> 
        </select> 
       </div> 
       <hr> 
       <div class="form-group"> 
        <button class="btn btn-default" name="btn-signup" type="submit"><span class="glyphicon glyphicon-log-in"></span> &nbsp; Create Account</button> <a class="btn btn-default" href="index.php" style="float:right;">Log In Here</a> 
       </div> 
      </form> 
     </div> 
    </div> 
</body> 
</html> 
+1

これらのフィールドをデータベースのUNIQUEとして設定し、それらを 'INSERT IGNORE'に入れて' mysqli_affected_rows($ db) 'をチェックしてみてください。それが '0'であれば、それはユニークではないことを意味するでしょう:-) –

+0

コードは正しいようです。あなたはテストケースを持っていますか? – scaisEdge

答えて

-1

問題では、SQLの結果から、あなたの結果を取得していないということです。

したがって$con->query($sqlQuery);はPDOStatementオブジェクトを返します。そのようなオブジェクトを文字列と比較することはできません。最初に文字列を抽出する必要があります。これは次のように動作します:

$check_username_result = $con->query("SELECT * FROM users WHERE username='$username' LIMIT 1") 
$check_username = $check_username_result->fetch_array()[0]; 

$ check_usernameは現在ユーザー名の値を保持していますので、比較することができます。

+0

それは私にこのエラーを与えるだろう:未定義のメソッドを呼び出すmysqli_result :: fetch() – Martin

+0

@マーティン私はとても残念です、私はあなたがpdoを使用していたtought。 mysqliではfetch_array()です。私はコードを変更しました。詳細はこちらをご覧ください:http://php.net/manual/en/mysqli-result.fetch-array.php – Larce

関連する問題