登録フォームに問題があります。登録フォームにPHPを使用したSQLデータベースからの電子メールの検証
データベースに新しい電子メールを入力するときデータベースから既存の電子メールを送信しても、無効ではないと表示されます。ここで
コードです:
<?php
include('../admin/admin_header.php');
?>
<div class="container" id="promptContainer">
<div class="jumbotron">
<div class="span6 center">
<?php
try {
$title = 'Save';
$email = null;
$password = null;
$username = null;
$confirm = null;
//Store Info from "Email" and "Password" form to vars
$email = $_POST['email'];
$password = $_POST['password'];
$username = $_POST['username'];
$confirm = $_POST['confirm'];
$ok = true;
//Validation
//If Email or Password blank, $ok = false, throw echo to user
if (empty($email)) {
echo 'Email is required<br />';
$ok = false;
}
if (empty($password)) {
echo 'Password is required<br />';
$ok = false;
if (empty($username)) {
echo 'Username is required<br />';
$ok = false;
if ($password != $confirm) {
echo 'Password must match<br />';
$ok = false;
}
}
}
$sql = "SELECT email FROM AccountInfo WHERE email = :email";
$cmd = $conn->prepare($sql);
$cmd->bindParam(':email', $email);
if (!filter_var($sql, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
echo '<meta http-equiv="refresh" content="2;url=http://otherurl.com">';
$ok = true;
} else {
echo("$email is not a valid email address");
echo '<meta http-equiv="refresh" content="2;url=http://url.com">';
$ok = false;
}
//Save
$cmd->execute;
//If true, Save info to vars
if ($ok == true) {
include('dbCredentials.php');
if (empty($user_id))
//Insert info to SQL DB VALUES
$sql = "INSERT INTO AccountInfo (email, password, username) VALUES (:email, :password, :username)";
//SHA512 Hash Encryption
$encryptpw = hash('sha512', $password);
$cmd = $conn->prepare($sql);
$cmd->bindParam(':email', $email, PDO::PARAM_STR, 50);
$cmd->bindParam(':password', $encryptpw, PDO::PARAM_STR, 128);
$cmd->bindParam(':username', $username, PDO::PARAM_STR, 10);
//Save DB
$cmd->execute();
echo 'Registration successful.';
}
} catch (Exception $ex) {
//Email when expection error
mail('[email protected]', 'Failed to save user registration info!', $ex);
header('location:error.php');
}
?>
</div>
</div>
</div>
<?php include('footer.php');
このコードは、フォームから来て、それが提出されていますとき、それは、このコードに投稿します。 情報が真の場合、情報をデータベースに指定された列に送信します。
問題点は、フォームに情報を入力して送信すると、電子メールがデータベースから有効かどうかを確認しないということです。
ありがとうございました! :)
'$ sql'ではなく元の変数をフィルタリングします – RiggsFolly
あなたは間違った順序ですべてをやっています。最初のSELECTクエリを実行するまで、データベースに接続しないように見えます。 – RiggsFolly
もう一度やり直してください。コードを開始する前に脳を麻痺させたり、マニュアルを読んでください。 – RiggsFolly