2017-09-28 16 views
0

私は自分のウェブサイトにログインシステムを持っており、パスワードリセットを作成しようとしています。登録やログインコードに問題はありませんが、パスワード変更コードは機能しません。私が試した2つの例(実際のコード)MySQL PHP - テーブルに新しい値を挿入/更新できません

<?php 
    require_once("config.php"); 
    session_start(); 
    if(isset($_POST['submit'])) { 

     include_once 'config.php'; 

     $password = mysqli_real_escape_string($con, $_POST['password']); 
     $password1 = mysqli_real_escape_string($con, $_POST['uc_pass1']); 
     $password2 = mysqli_real_escape_string($con, $_POST['uc_pass2']); 
     $uid = $_SESSION['s_id']; 

     if ($password1 != $password2 || empty($password1) || empty($password2)) { 
      header("Location: ../user-conf.php?pass=notmatching"); 
      exit(); 
     } else { 
      $sql = "SELECT password FROM userdb WHERE username='$uid'"; 
      $result = mysqli_query($con, $sql); 
      $resultCheck = mysqli_num_rows($result); 

      if (!$resultCheck > 0) { 
       header("Location: ../user-conf.php?error"); 
       exit(); 
      } else { 
       $hashedPwdCheck = password_verify($password, $_SESSION['s_pw']); 
       if ($hashedPwdCheck == false) { 
        header("Location: ../user-conf.php?error"); 
        exit(); 
       } elseif ($hashedPwdCheck == true) { 
        $hashedPwd2 = password_hash($password1, PASSWORD_DEFAULT); 
        $sql2 = "INSERT INTO userdb (password) VALUES($hashedPwd2) WHERE username=$uid"; 
        mysqli_query($con, $sql2); 
        header("Location: ../user-conf.php?pass=successfull"); 
        exit(); 
       } 
      } 
     } 
    } else { 
     header("Location: ../login.php?nologon"); 
    } 
?> 

そしてもう1つは以下のとおりです。

<?php 
    require_once("config.php"); 
    session_start(); 
    if(isset($_POST['submit'])) { 

     include_once 'config.php'; 

     $password = mysqli_real_escape_string($con, $_POST['password']); 
     $password1 = mysqli_real_escape_string($con, $_POST['uc_pass1']); 
     $password2 = mysqli_real_escape_string($con, $_POST['uc_pass2']); 
     $uid = $_SESSION['s_id']; 

     if ($password1 != $password2 || empty($password1) || empty($password2)) { 
      header("Location: ../user-conf.php?pass=notmatching"); 
      exit(); 
     } else { 

      $hashedPwdCheck = password_verify($password, $_SESSION['s_pw']); 
      if ($hashedPwdCheck == false) { 
       header("Location: ../user-conf.php?error"); 
       exit(); 
      } elseif ($hashedPwdCheck == true) { 
       $hashedPwd = password_hash($password1, PASSWORD_DEFAULT); 
       $sql = "INSERT INTO userdb (password) VALUES($hashedPwd) WHERE username=$uid"; 
       mysqli_query($con, $sql); 
       header("Location: ../user-conf.php?pass=successfull"); 
       exit(); 
      } 
     } 
    } else { 
     header("Location: ../login.php?nologon"); 
    } 
?> 

私もUPDATE構文を試してみました。しかし、それは新しいパスワードで古いパスワードを変更するようには思われませんでした。私が間違っていたことを知ってうれしいです。あなたが私に教えてくださいとそれが感謝されます知っている! :)

+0

そして、すべてを正しく完了したように(「?pass = successfull」)私には通知しますが、テーブルのパスワード列には何も変わりません。 uc_pass1 =(新しいパスの入力)とuc_pass2 =(確認パスの入力)を疑問に思っている場合はHTMLコードでも。そこには何も間違っていませんか? –

+0

あなたは挿入または更新しますか? "INSERT INTO userdb(password)VALUES($ hashedPwd)WHERE username = $ uid"は、両方の奇妙な組み合わせです。 –

+2

"*私が間違っていたことを知ってうれしいです*" - まあ、ほとんどすべて..相対的なリダイレクトから 'header'を介して、パラメータ化されたクエリを使わないことに..これはおそらく新しいですか?あなたが投稿したコードは、1999年のチュートリアルに似ています。これらのタスクに対する言語とアプローチは進化しています。私はあなたを批判しようとはしていません。改善の余地があります。あなたのスキルをさらに進歩させて欲しい、侮辱や侮辱として私のコメントを控えてください。良い開発者がいなくてはならないと言っています。 – Mjh

答えて

2

99%ことを確認して:

"INSERT INTO userdb (password) VALUES($hashedPwd2) WHERE username=$uid" 

は次のようになります。あなたはあなたのPHPの変数の前後に引用符が欠落している

"UPDATE userdb SET password = '$hashedPwd2' WHERE username='$uid'" 

INSERTUPDATEでなければなりません。

+0

ああ、私は最初に使ったことがあるが、$ uidを使わずに代わりに$ _SESSION ['s_id']を使ってユーザ名を誓っている。あなたは完全にそれを作った!答えの束をありがとう! :) –

+0

問題ありません。それが役に立てば幸い。実際には、 '$ uid'は' mysqli_real_escape_string() 'を通しても実行されます。 – Tigger

関連する問題