2017-09-28 9 views
0

내 웹 사이트에 로그인 시스템이 있는데 비밀번호 재설정을 만들려고합니다. 등록이나 로그인 코드에는 아무런 문제가 없지만 암호 변경 코드는 작동하지 않습니다. 여기에 내가 시도한 두 가지 예가있다 (실제 코드)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"); 
    } 
?> 

그리고 다른 하나는 아래에있다.

<?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

"* 내가 뭘 잘못했는지 알면 좋을 것이다."- 글쎄, 거의 모든 것 .. 헤더를 통해 상대적으로 리디렉션되는 것부터 매개 변수가있는 쿼리를 사용하지 않는 것까지. 아마도 이것에 익숙하지 않은가? 당신이 올린 코드는 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

문제 없습니다. 희망이 도움이됩니다. BTW,'$ uid'는 실제로 mysqli_real_escape_string()을 통해 실행되어야합니다. – Tigger