2017-03-19 17 views
1

私はすべてのユーザ名(メールアドレス)を一意にする必要がある登録フォームを持っています。データベースエントリが一意でなければならないようにしましたしかし、ユーザーが取得するエラーは、私が別のメッセージに変更できる一般的なものです($ message参照)が、エラー・サーバー側でアカウントが作成されていないかどうかは分かりません。重複した電子メールアドレス。私が取得するために苦労してきた何ユーザ名を入力する方法

$message = 'Sorry there must have been an issue creating your account'; 

は次のように述べているカスタムエラーを持つ方法である:「申し訳ありませんが、このメールはすでに使用されている」ユーザ名が既に使用されているとき。

以下は私の登録フォームのコードです)(私はこれを作るdidntは):

<?php 

session_start(); 

if(isset($_SESSION['user_id'])){ 
    header("Location: restricted.php"); 
} 

require 'database.php'; 

$message = ''; 

if(!empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['firstname']) && !empty($_POST['surname'])): 

    // Enter the new user in the database 
    $sql = "INSERT INTO users (email, password, firstname, surname) VALUES (:email, :password, :firstname, :surname)"; 
    $stmt = $conn->prepare($sql); 

    $stmt->bindParam(':email', $_POST['email']); 
    $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT)); 
    $stmt->bindParam(':firstname', $_POST['firstname']); 
    $stmt->bindParam(':surname', $_POST['surname']); 


    if($stmt->execute()): 
    $message = 'Successfully created new user'; 
    else: 
    $message = 'Sorry there must have been an issue creating your account'; 
    endif; 

endif; 

?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Register</title> 
    <?php include '../header.php'; ?> 
</head> 
<body> 

    <?php if(!empty($message)): ?> 
     <p><?= $message ?></p> 
    <?php endif; ?> 

    <h1>Register</h1> 
    <span>or <a href="login.php">login here</a></span> 

    <form action="register.php" method="POST"> 

     <input type="text" placeholder="Enter your email" name="email"> 
     <input type="password" placeholder="and password" name="password"> 
     <input type="password" placeholder="confirm password" name="confirm_password"> 
     <input type="text" placeholder="Enter your first name" name="firstname"> 
     <input type="text" placeholder="Enter your surname" name="surname"> 
     <input type="submit"> 

    </form> 

</body> 
</html> 
+1

"一般的なエラー"を挿入して頼るよりも、その電子メールを持つユーザーがいるかどうかを確認してください。 –

+0

メールが一意の場合は、メールを選択して、データベースに挿入されているかどうかを確認してから挿入してください。 –

答えて

0

まず、ユーザー名/メールアドレスが既に存在するかどうかを確認するためにselectクエリを実行します。

存在する場合、エラーを返します。そうでない場合、データベースにはinsertが含まれています。 postが空であるだけでなく、有効であることを確認する必要があります。また、正しい電子メールマークアップのようにデータが有効であれば、パスワードは同じで、ユーザー名は一意です。

+0

だから私はちょっとPHPに慣れて勉強しようとしていますが、ここでそれをやろうとしていますが、必然的に失敗しました:P、私の試みたコードをペーストビンに入れて、あなたは自分が所有しているので、私がどこを乱しているか見ることができます:) http://pastebin.com/1Akj2DQs。 PHPの解析エラー:シンタックスエラー、予期しない '$ query'(T_VARIABLE)in /dirremoved/register.php in line 25 – Jeff

+0

チェックアウトすると、database.phpの内部にhttp://pastebin.com/yZ7UrsMeというエラーが表示されます。これは:http://stackoverflow.com/questions/17800354/check-if-username-exists-in-mysql-table-via-php Skypeで私を追加:hetischris –

+0

あなたの行26(Pastebinline)を確認しようとしていますここで 'email'は' email'にあります。 'users'を使うべきです。だから: '' $ sql2 = "SELECT * WHERE email =:email" ''ヘルプ・マンのために –

関連する問題