2017-03-21 7 views
1

私のウェブサイトのアカウント登録時に電子メールが既にデータベースに存在するかどうか、PHPを使用してMySQLiデータベースと対話する。私はここで見つけることができる多くのガイドを使用してみましたが、まだ運がありません。PHPを使用してMySQLiデータベースに電子メールが存在するかどうかを調べる

以下

が、私はもともと登録時に私のデータベースにユーザーの電子メールを挿入するために書いたコードです:

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
     $database = new mysqli("localhost", "user", "dbpw", "dbname"); 
if($database->connect_error){ 
      die("Error connecting:" . $database->connect_error); 
     } 

$email = $database->real_escape_string(htmlspecialchars($_POST["email"])); 
$query = "SELECT email FROM Users WHERE email =$email"; 
$result = $database->query($query); 
$numOfRows = $database->num_rows($result); 
if($numOfRows > 0){ 
    echo "Email already exists in our database."; 
}else{ 
$query = "INSERT INTO Users (email) VALUES ('" . $email . "'); 
if(!$database->query($query)){echo("<p>Unable to add user for query: " . $query . " <br /> Error: " . $database->errno . " " . $database->error);}} 

前のメールチェック(IF($ numOfRows)のステートメント)を挿入するには、私のデータベースがされていました正しく更新されました。

しかし、私の試みたメールチェックを追加した後、ページが完全に壊れました。私のデータベースはユニークなパスワードで更新されず、電子メールが重複していた場合、「電子メールはすでにデータベースにあります」というエコーメッセージは表示されません。ページは読み込まれますが、基本的なヘッダー、フッター、背景のCSSだけですべてのページにリンクしています。

+1

あなたは選択クエリにエラーがあります: '$ query ="ユーザからのメールの選択WHERE email = $ email ";' $ query = "メールからのSELECTメールWHERE email = '$ email'電子メールの値は一重引用符で囲む必要があります。それは文字列です。あなたはインサートの正しい方法でこれを行います –

+0

**警告:**あなたは* mysqlインジェクション*を開いています!それから身を守るために 'prepared statements'を使います。 – Nytrix

+0

@Nytrix Roger、アドバイスありがとう。私の主な問題が修正されたので、準備された文を使用するようにこのファイルを変更します。 – sono2

答えて

1

代わりの

$numOfRows = $database->num_rows($result); 

を使用して使用

if($result ->num_rows) 
{ 
} 
+0

ありがとうございます。私はあなたのことをしました、@codvlprと@Lelio Faietaが提案し、物事を働かせました。 'if($ result-> num_rows> 0){ ... } – sono2

1

あなたは電子メールの変数の周りに単一引用符を追加する必要があります。このように '$ email'。以下のコードを確認してください。

$query = "SELECT email FROM Users WHERE email = '$email'";

そして、あなたはあなただけの条件ブロックのbooleanとして変数を使用することができ、その0以上かかどうかを確認するためにあなたの条件文を編集する必要があります。

+0

私はその最後の部分について混乱しています。それが0に等しい場合、それは電子メールが私のデータベースに存在しない、正しいことを意味するでしょうか?その場合、私は 'else'ステートメントを実行したいと思います。 – sono2

+0

私はあなたを混乱させるつもりはありませんでした。その部分を無視してください。それは私の間違いだった! – codvlpr

関連する問題