2017-01-06 16 views
-1

現在、ユーザーはadminで変更できます。パスフォームを空にすると問題が発生します。新しいハッシュされたパスがデータベースに保存され、ユーザーは古いパスでログインできなくなります。空白だった。この2の問題をPHPで修正するにはどうすればいいですか?

だから私はこれらの2つの問題を解決する必要があります....

どうすればいいですか?

1)ユーザー名はadminによって管理者パネルで変更できません。 2)パスワードが空の場合、ハッシュされたパスワードはデータベースautoに変更されません。

<?php 

//if form has been submitted process it 
if(isset($_POST['submit'])){ 

    //collect form data 
    extract($_POST); 

    //very basic validation 
    if($username ==''){ 
     $error[] = 'Please enter the username.'; 
    } 

    if(strlen($password) > 0){ 

     if($password ==''){ 
      $error[] = 'Please enter the password.'; 
     } 

     if($passwordConfirm ==''){ 
      $error[] = 'Please confirm the password.'; 
     } 

     if($password != $passwordConfirm){ 
      $error[] = 'Passwords do not match.'; 
     } 

    } 


    if($email ==''){ 
     $error[] = 'Please enter the email address.'; 
    } 

    if(!isset($error)){ 

     try { 

      if(isset($password)){ 

       $hashedpassword = $user->password_hash($password, PASSWORD_BCRYPT); 

       //update into database 
       $stmt = $db->prepare('UPDATE blog_members SET username = :username, password = :password, email = :email WHERE memberID = :memberID') ; 
       $stmt->execute(array(
        ':username' => $username, 
        ':password' => $hashedpassword, 
        ':email' => $email, 
        ':memberID' => $memberID 
       )); 


      } else { 

       //update database 
       $stmt = $db->prepare('UPDATE blog_members SET username = :username, email = :email WHERE memberID = :memberID') ; 
       $stmt->execute(array(
        ':username' => $username, 
        ':email' => $email, 
        ':memberID' => $memberID 
       )); 

      } 


      //redirect to index page 
      header('Location: users.php?action=updated'); 
      exit; 

     } catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 

    } 

} 

?> 


<?php 
//check for any errors 
if(isset($error)){ 
    foreach($error as $error){ 
     echo $error.'<br />'; 
    } 
} 

    try { 

     $stmt = $db->prepare('SELECT memberID, username, email FROM blog_members WHERE memberID = :memberID') ; 
     $stmt->execute(array(':memberID' => $_GET['id'])); 
     $row = $stmt->fetch(); 

    } catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 

?> 

<form action='' method='post'> 
    <input type='hidden' name='memberID' value='<?php echo $row['memberID'];?>'> 

    <p><label>Username</label><br /> 
    <input type='text' name='username' value='<?php echo $row['username'];?>'></p> 

    <p><label>Password (only to change)</label><br /> 
    <input type='password' name='password' value=''></p> 

    <p><label>Confirm Password</label><br /> 
    <input type='password' name='passwordConfirm' value=''></p> 

    <p><label>Email</label><br /> 
    <input type='text' name='email' value='<?php echo $row['email'];?>'></p> 

    <p><input type='submit' name='submit' value='Update User'></p> 

</form> 
+0

あなたはパスワードが最初のクエリに設定されているかどうかをチェックするが、 'else' –

+0

であれば、すなわちテストする前に、自分の価値観をトリミングしていない(($のユーザー名をトリム)==「」)している – jeff

+0

あなたも使用する必要があります'isset()'ではなく、パスワードの '!empty()'、IMHO。 –

答えて

-1

ユーザー名フィールドを読み取り専用にします。 2番目のチェックコードの下に。

If (empty($password)) 
{ 
    //update rest of info using query and skip password updation 
} 

else 
{ 
    //update everything including password 
} 
+0

readonlyはいいですが、別のやり方でした...しかし2番目の問題は...私は必要としません....私はPHP関数を通して修正する必要があります – Addons

+0

@Addons私の編集をチェックしてください。答えとして選択してください。 –

+0

おかげで問題が解決しました。またFredのおかげで、彼は正解でしたが、私は最初に彼のコメントを理解しませんでした。 – Addons

関連する問題