user_id = 3の場合やwhere文(WHERE user_id = "。$ user ['user_id']。)を削除したときに動作しますが、dbのすべてのパスワードが変更されます。パスワード確認のリセットが正しく機能していませんか?
私はすでにどのようにすべきで、そう= '$ユーザーID'/$ _GET [ 'user_idの'] user_idを試みること のuser_id = 3 & reset_token = XXXXXXXXX
<?php
if(isset($_GET['user_id']) && isset($_GET['reset_token'])) {
$userid = $_GET['user_id'];
$reset_token = $_GET['reset_token'];
// Make sure user email with matching hash exist
$req = $heidisql->prepare("SELECT * FROM users WHERE user_id='$userid' AND reset_token='$reset_token' ");
$req->execute($userid, $reset_token);
$user = $req->fetch(PDO::FETCH_ASSOC);
if ($user) {
if (!preg_match ('%\A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])\S{8,30}\z%', $_POST['new_pass'])
|| $_POST['new_pass'] !== $_POST['confirm_newpass']) {
echo 'Your new password did not match the new confirm password or is invalid!';
exit();
}
}
} else {
$newpassword = escape_data($_POST['new_pass']);
$newpass_hash = password_hash($newpassword, PASSWORD_BCRYPT);
$sql= "UPDATE users SET "
. "password_hashcode='$newpass_hash', "
. "reset_allocated_time=NULL, "
. "reset_token=NULL "
. "WHERE user_id=".$user['user_id']." "; //<- error here
// Make sure user email with matching hash exist
$result_newpass = $heidisql->prepare($sql);
$result_newpass->execute();
echo "Your password has been reset!";
exit();
}
のようにユーザーIDを取得するにはgetメソッドを使用私は変数user_idを定義しますか?
まだ動作しません。 $ req = $ heidisql-> prepare( "SELECT * FROM users WHERE user_id = ':user_id'およびreset_token = ':reset_token'");
$req->execute([':user_id'=>$userid, ':reset_token'=>$reset_token]);
$sql= "UPDATE users SET password_hashcode=':password_hashcode', reset_allocated_time=NULL, reset_token=NULL WHERE user_id=:user_id";
$result_newpass = $heidisql->prepare($sql); $result_newpass->execute([':user_id'=>$userid,':password_hashcode'=>$newpass_hash, ':reset_token'=>NULL, ':reset_allocated_time'=>NULL]);
- 私が正しくURLにreset_token USER_IDを/にアクセスすることができないようだ原因私は問題がgetメソッドと嘘はあり信じますか?
... localhostの/例/ reset_pass.php?のuser_id = XX & reset_token = XXXXXXXXX
私は、問題(複数可その場合
誰もが知っているのuser_idで未定義の変数を取得しています)私のパスワードの検証も動作しません?
したがって、ユーザーIDが必要なので、$ユーザーIDに保存されていますその変数をWHERE句で使用します。更新されたコード: 'WHERE user_id ="。$ userid' –
あなたはuser_id = "のように意味します。 $ userid "というメッセージが表示されますので、もう一度やり直してください。 –
二重引用符を閉じる必要はありません。最後の行を '。" WHERE user_id = "に置き換えることができます。 $ userid; ' –