2016-07-11 4 views
0

비밀번호 재설정 기능을 구현하려고합니다. 여기

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method = "POST"> 

     <input type = "email" name = "recover_email" placeholder = "Enter Your Email Address" required/>      
     <input type = "submit" name= "recover" value = "Recover"/> 

</form> 

<?php  

    if(isset($_POST['recover']) && $_POST['recover'] == 'Recover'){ 
     $email = $_POST['recover_email']; 

     $sql = $db->prepare("SELECT * from registered_users where email = ?"); 
     $sql->bind_param("s",$email); 
     $sql->execute(); 
     $sql = $sql->get_result(); 

     if(($getRowCount = $sql->num_rows) == 1){ 
       $rowName = $sql->fetch_assoc(); 

       $code = rand(1000, 1000000); 

     mail(); 

$updateCode = $db->prepare("UPDATE registered_users SET passwordResetCode = ? where email=?"); 
       $updateCode->bind_param("is",$code,$email); 
       $updateCode->execute(); 
       $updateCodeResult = $updateCode->get_result(); 
      } 

    }else if(!(($getRowCount = $sql->num_rows) == 1) && $email != ''){ 
     //do something 
     } 
    } 

    ?> 

이메일 본체가 전송되는

index.php를 내 코드입니다 :

http://www.website.com/passwordreset.php?code=$code&email=$email 

메일, SQL 업데이트 및 링크 정보는 잘 전송되고있다.

이제 내 다음 페이지의 링크를 클릭하여 암호를 업데이트하려고합니다.

passwordreset.php는이 코드에서 모든 $의 _GET 기능을 제거하면

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method = "POST"> 

    <table cellpadding = "5%" style="width:70%"> 
     <tr> 
      <td> 
      <input type = "password" id="newPassword" name = "newPassword" placeholder = "New Password" minlength="8" required /> 
      </td> 
     </tr> 

     <tr> 
      <td> 
      <input type = "password" id= "confirmnewPassword" name = "confirmnewPassword" placeholder = "Confirm New Password" minlength="8" required /> 
      </td>      
     </tr> 

     <tr> 
      <td> 
      <input type = "submit" name= "setNewPassword" value = "Set Password"/> 
      </td> 
     </tr> 

    </table> 
    </form> 

<?php 

    if(isset($_GET['code'])){ 

     $getEmail = $_GET['email']; 
     $getCode = $_GET['code']; 

     if(isset($_POST['setNewPassword']) && $_POST['setNewPassword'] == 'Set Password'){ 

     $newPassword = $_POST['newPassword']; 
     $confirmNewPassword = $_POST['confirmnewPassword'];   

     if($newPassword == $confirmNewPassword){ 

     $updatePassword = $db->prepare("UPDATE registered_users SET password = ?, re_password = ? where email = ? and passwordResetCode = ?"); 
     $updatePassword->bind_param("sssi",$newPassword,$confirmNewPassword,$getEmail,$getCode); 
     $updatePassword->execute();  

     }else if($newPassword != $confirmNewPassword){ 
     } 
     }   
    } 
    ?> 

, 그것을 잘 작동하지만, $ _GET 전혀 URL에서 내 이메일과 코드를 가져 오지 않는 것 같다 .

+1

사용 $의 _SERVER 대신에 $ _SERVER의 [ 'REQUEST_URI'] [ 'PHP_SELF']를 passwordreset.php 페이지 passwordreset.php –

+0

에서? 또는 이전 하나? –

+0

On passwordreset.php –

답변

0

스크립트는 다음을 수행합니다. 1. 인수가있는 비밀번호 재설정 페이지로 리디렉션. 포스트 2.Get 암호를 재설정 (그러나 인수를 얻을 나던) 새 암호

if(isset($_GET["code"])){ 
session_start(); 
$_SESSION["code"]=$_GET["code"]; 
} 

에게 사용자의 게시물까지 GET을 저장해야하는 경우 사용자 게시물 그의 새로운 암호 액세스 그것.

session_start(); 
$code=$_SESSION["code"]; 
관련 문제