昨日、ユーザーがフォームを通じてパスワードを更新する方法を尋ねるコードをいくつか掲載しました。 Look hereパスワードをphp/mysqlで更新します
パスワードを更新した後、私のAndroid搭載アプリケーションでログインできませんでした。そこで、私はforgotpassword.phpファイルを少し変更することにしました。
<?php
session_start();
require "../init.php";
ini_set('display_errors', 1);
if(isset($_POST['update'])){
$email = $_POST['email'];
$user_name = $_POST['user_name'];
$password = $_POST['user_pass'];
$passwordEncrypted = sha1($user_pass);
$confpassword = $_POST['confirm_pass'];
$confPasswordEncrypted = sha1($confirmPass);
if($password !== $confpassword){
echo "<script>alert('Passwords are not equal')</script>";
}else{
$select_query = "SELECT * FROM user_info";
$run_select_query = mysqli_query($con,$select_query);
while ($row_post=mysqli_fetch_array($run_select_query)){
$_SESSION['id'] = $row_post['id'];
$user_id = $_SESSION['id'];
$useremail = $row_post['email'];
$username = $row_post['user_name'];
var_dump($user_id);
if($useremail == $email AND $username == $user_name){
//echo "<script>alert('$useremail')</script>";
//echo "<script>alert('$username')</script>";
echo "<script>alert('$id')</script>";
$update_posts = "UPDATE user_info SET user_pass='$passwordEncrypted',confirm_pass ='$confPasswordEncrypted'
WHERE $id='$_userid'";
$run_update = mysqli_query($con,$update_posts);
//var_dump($user_name);
echo "<script>alert('Password Has been Updated!')</script>";
}else{
echo "<script>alert('No email or username was found')</script>";
}
}
}
}
?>
ただし、以前のパスワードは更新されていません。更新ステートメントやその前の行に問題があります。 $ _SESSION ['id']はnullではないため、selectクエリは正常に動作します。
アイデア?
ありがとうございました。
コードのエラーチェックはありません。なぜ2つのSQL文が1で実装できるのか(パスワードとユーザーが一致する場所を更新 - 0行が変更された場合はユーザー名またはパスワードが無効) – symcbean
sha1のシングルラウンドではパスワードハッシングでは不十分です。参照:http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords – 1615903
PHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使用してください。 )を使用してパスワードセキュリティを処理します。 5.5より小さいPHPバージョンを使用している場合、 'password_hash()' [互換パック](https://github.com/ircmaxell/password_compat)を使用することができます。ハッシュする前に[パスワードを逃さないでください](http://stackoverflow.com/q/36628418/1011527)、または他のクレンジングメカニズムを使用していることを確認してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –