2017-05-27 12 views
1

私は、データベースにユーザーが既に存在するかどうかを確認する機能を実装しようとしていますが、すべての登録データを挿入しますが、誰かが本当に事前にすべての答えを感謝しています。エラーがどこにあるか私が識別しやすくしてください。PHPはユーザーが存在するかどうかチェックする

<?php 

require '../ppuyakul/php/db_conn.php'; 


$message = ''; 

//Prepare date 
$DOB = date("Y-m-d", strtotime($_POST['year'].'-'. $_POST['month'].'-'. $_POST['day'])); 
$accessType = "0"; 

//Check enpty field 
if(!empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['fullname']) && !empty($_POST['username']) && !empty($_POST['password_confirmation']) && !empty($_POST['gender']) && !empty($_POST['country']) && !empty($_POST['state']) && !empty($_POST['city']) && !empty($_POST['day']) && !empty($_POST['month']) && !empty($_POST['year'])): 

    // Enter the new user in the database 
    $sql = "INSERT INTO assignment2 (fullname, username, email, password, gender, country, state, city, DOB, type) VALUES (:fullname, :username, :email, :password, :gender, :country, :state, :city, :DOB, :type)"; 
    $stmt = $conn->prepare($sql); 

    $stmt->bindParam(':fullname', $_POST['fullname']); 
    $stmt->bindParam(':username', $_POST['username']); 
    $stmt->bindParam(':email', $_POST['email']); 
    $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT)); 
    $stmt->bindParam(':gender', $_POST['gender']); 
    $stmt->bindParam(':country', $_POST['country']); 
    $stmt->bindParam(':state', $_POST['state']); 
    $stmt->bindParam(':city', $_POST['city']); 
    $stmt->bindParam(':DOB', $DOB); 
    $stmt->bindParam(':type', $accessType); 

    $chk = $conn->prepare("SELECT username FROM assignment2 WHERE username = :name"); 
    $chk->bindParam(':name', $username); 
    $chk->execute(); 

    if($chk->rowCount() > 0): 
    $message = 'Error ! ! User already exists'; 
    else: 
     if($stmt->execute()): 
     $message = 'Successfully created new user'; 
      else: 
      $message = 'Sorry there must have been an issue creating your account'; 
      endif; 
     endif; 
    endif; 
?> 
+1

$ usernameはどのように設定されていますか? –

+0

こんにちはPaulさん、ありがとうmucあなたの返信のために、私はここで宣言しようとしています '$ all_rows = $ chk-> fetchAll(PDO :: FETCH_ASSOC); foreach($ rowとして$ all_rows): $ username = $ row ["username"]; $ _GLOBAL ['username'] = $ username; endforeach; ' ' IF($ chk->をrowCount()> 0)の前に: ' まだ運 –

+1

私はもともと投稿されたものの中にそのコードが表示されませんか? $ usernameを検索したとき(最初のコメントの前に)、このページには「ヒット」が1つしかありませんでした。上記のコードにforeachはありません。 rowCountチェックにelseを追加し、「行が見つかりません」(または何でも)何を取得するかを表示します。また、出力するものを見るために$ usernameをエコーすることもできます。 –

答えて

1

@PaulのT.によると、私は最終的にここに解決策は、あなたの助けのおかげでそんなに再び、最終的なコードで見つかりました@ Paul T.

$username = $_POST['username']; 
    $chk = $conn->prepare("SELECT username FROM assignment2 WHERE username = :name"); 
    $chk->bindParam(':name', $username); 
    $chk->execute(); 


    if($chk->rowCount() > 0): 
    $message = 'Error ! ! User already exists'; 
    else: 
     if($stmt->execute()): 
     $message = 'Successfully created new user'; 
      else: 
      $message = 'Sorry there must have been an issue creating your account'; 
      endif; 
     endif; 
    endif; 
+1

余分な変数の必要を避けるために、バインドで$ _POST ['username']参照を使用するだけでした。あなたは私が何を得ているかを発見しました。$ usernameは設定されていませんでした。 –

+0

@PaulT。ああ、私は^^ "もう一度感謝します。 –

関連する問題