// Check input errors before inserting in database
if(empty($username_err) && empty($password_err) && empty($confirm_password_err) && empty($mobile_err)){
$ran_code=mt_rand(100000, 999999);
// Prepare an insert statement
$sql = "INSERT INTO users (username, password, email, mobile, code) VALUES (:username, :password, :email, :mobile, :code)";
if($stmt = $dbh->prepare($sql)){
// Bind variables to the prepared statement as parameters
$stmt->bindParam(':username', $param_username, PDO::PARAM_STR);
$stmt->bindParam(':password', $param_password, PDO::PARAM_STR);
$stmt->bindParam(':email', $param_email, PDO::PARAM_STR);
$stmt->bindParam(':mobile', $param_mobile, PDO::PARAM_STR);
$stmt->bindParam(':code', $code);
// Set parameters
$param_username = $username;
$param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
$param_email = $email;
$param_mobile = $mobile;
$code = $ran_code;
// Attempt to execute the prepared statement
if($stmt->execute()){
$_SESSION['username']=$email;
// Send registration confirmation link (verify.php)
$_SESSION['to'] = $email;
$_SESSION['subject'] = 'Account Verification (paper.com)';
$_SESSION['body'] = '
Hello '.$username.',
Thank you for signing up!
Your verification code is'.$ran_code.'.';
require '../Mailer/hotmail.php';
header("location:confirmation.php?email=".$email);
} else{
echo "Something went wrong. Please try again later.";
}
}
// Close statement
unset($stmt);
}
// Close connection
unset($dbh);}
登録が成功すると、確認コードが電子メールに送信され、データベースにも格納されます。私は電子メールで6つのコードの1つのセットを取得し、database.iのまったく異なる5桁のコードは、これを10回以上試して、結果は同じです。私は電子メールで新しいキーを取得するたびにキーが同じ32767と同じです。 また、登録後に私の電子メールをチェックしてデータベースをチェックすると、コードが違うので、行を削除してサインに進みますもう一度同じメールアドレスを入力してください。私はこれが問題だとは思っていませんが、ただ皆さんに知らせるためです。電子メールとデータベースの認証コードが異なる
「32767」は整数の最大値を示します。あなたの 'code'フィールドの型は何ですか? –
数値を数値として使用しない限り、__varchar__として型を定義してください –
シェルまたはphpMyAdminで生のクエリを実行して、同じ結果が得られているかどうかを確認してください。もしそうなら、あなたのデータ型に何か問題があるかもしれません..! –