私のウェブサイトのアカウント登録時に電子メールが既にデータベースに存在するかどうか、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だけですべてのページにリンクしています。
あなたは選択クエリにエラーがあります: '$ query ="ユーザからのメールの選択WHERE email = $ email ";' $ query = "メールからのSELECTメールWHERE email = '$ email'電子メールの値は一重引用符で囲む必要があります。それは文字列です。あなたはインサートの正しい方法でこれを行います –
**警告:**あなたは* mysqlインジェクション*を開いています!それから身を守るために 'prepared statements'を使います。 – Nytrix
@Nytrix Roger、アドバイスありがとう。私の主な問題が修正されたので、準備された文を使用するようにこのファイルを変更します。 – sono2