0

PDO を使用して電子メールが既に登録されているかどうかを確認しようとしていますが、これを行う良い方法が今のところ見つかりません。これは私がこれまでに持っているものです。それが役立つ場合、接続変数は「$ con」です。また、同じドキュメントに接続変数が必要ですか、それとも含まれているドキュメントにあるのでしょうか?

<link rel="stylesheet" type="text/css" href="css\errors.css">
<?php
require 'header.php';
if (!$_POST['submit']) {
?>
<html>
<a href="register.html">Regsiter here!</a>
<?php
} else {
    require 'connect.php';
    $firstname = ($_POST['firstname']);
    $lastname = ($_POST['lastname']);
    $email = ($_POST['email']);
    $password = ($_POST['password']);
    $passwordconf = ($_POST['passwordconf']);

    $errorfields = "<p class='errormsg'>Please fill out all the fields!</p>";
    if (empty($firstname) || empty($lastname) || empty($email) || empty($password) || empty($passwordconf)) {
        echo "$errorfields";
    }
    $erroremail = "<p class='errormsg'>Email is not in name@domain format!</p>";
    $regex = "/^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a-z]{2,}$/i";
    if (!preg_match($regex, $email)) {
        echo "$erroremail";
    }
    $errorpassword = "<p class='errormsg'>You passwords do not match!</p>";
    if ($password != $passwordconf) {
        echo "$errorpassword";
    }

    //this is where email is checked
}
?>
4

2 に答える 2

6

これを試して、DB_NAME、DB_USER_NAME、および DB_USER_PASS に接続資格情報を入力するか、すべてが PDO オブジェクトとして正しく設定されている場合は $con 変数を使用します。

$con = new PDO( 'mysql:host=localhost;dbname=DB_NAME;charset=UTF-8', 'DB_USER_NAME', 'DB_USER_PASS' );

$query = $con->prepare( "SELECT `email` FROM `tbl_name` WHERE `email` = ?" );
$query->bindValue( 1, $email );
$query->execute();

if( $query->rowCount() > 0 ) { # If rows are found for query
     echo "Email found!";
}
else {
     echo "Email not found!";
}
于 2013-03-08T05:17:04.890 に答える
2

受け入れられた回答にはいくつかの問題があります(かなり前に書かれているので、これは非常に理解できます)。

最初のものは少し無関係ですが、それでもです。接続コードは、1 行のコードほど単純ではありません。将来起こりうる多くの問題を回避するために、PDO と適切に接続する方法に関する私の記事を参照してください。

もう 1 つの問題は、rowCount()メソッドの使用です。マニュアルに記載されているように、このメソッドは利用できない可能性があります。さらに、 の使用bindParam()は不必要であり、コードをよりクリーンで簡潔にするために避けることができます。その結果、次の解決策を思いつくことができます

require 'connect.php'; // contains the code mentioned above.

$stmt = $con->prepare( "SELECT 1 FROM `tbl_name` WHERE `email` = ?");
$stmt->execute([$email]);
$found = $stmt->fetchColumn();

if( $found ) {
    echo "Email found!";
} else {
    echo "Email not found!";
}

存在を確認するだけでなく、実際のレコードを取得する必要がある場合 (たとえば、パスワードを確認するために) 1、クエリを実際のフィールドとにfetchColumn()変更するだけfetch()です。

$stmt = $con->prepare( "SELECT 1 FROM `tbl_name` WHERE `email` = ?");
$stmt->execute([$email]);
$user= $stmt->fetch();

if( $user ) {
    echo "Email found!";
} else {
    echo "Email not found!";
}
于 2019-08-29T05:20:15.260 に答える