2017-12-16 11 views
0
// 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と同じです。 また、登録後に私の電子メールをチェックしてデータベースをチェックすると、コードが違うので、行を削除してサインに進みますもう一度同じメールアドレスを入力してください。私はこれが問題だとは思っていませんが、ただ皆さんに知らせるためです。電子メールとデータベースの認証コードが異なる

+0

「32767」は整数の最大値を示します。あなたの 'code'フィールドの型は何ですか? –

+0

数値を数値として使用しない限り、__varchar__として型を定義してください –

+0

シェルまたはphpMyAdminで生のクエリを実行して、同じ結果が得られているかどうかを確認してください。もしそうなら、あなたのデータ型に何か問題があるかもしれません..! –

答えて

0

ので、あなたは両方のケース

に異なる値を渡しているあなたは、あなたは上記のコードの後に​​他の

$stmt->bindParam(':code', $code); 

データベース何かに保存され、乱数

$ran_code=mt_rand(100000, 999999); 

を得たが、上記のコード行の下にコード行があります(電子メールでは正しい値を持つ$ran_codeを使用しています)。

$code = $ran_code; 

これは、あなたが電子メールとデータベースで異なる価値を得る理由です。あなたの問題を修正するには、コードの上記の行の直後に移動する必要があります。

$ran_code=mt_rand(100000, 999999); 
$code = $ran_code; // move here 
+0

あなたは準備されたステートメントに値をバインドする前にパラメータを設定する必要があります – makehappen2017

+0

準備したステートメントに値をバインドする前にパラメータを設定する必要があることを意味します。 ; 3番目の$ stmt-> bindParam( ':code'、$ code);} – makehappen2017

+0

データベースに '32767'があるたびにどのように来るのですか?列を空にしないでください。 – makehappen2017

関連する問題