如何通过php(从管理员处编辑用户)解决这2个问题?

如何通过php(从管理员处编辑用户)解决这2个问题?,php,Php,目前:用户可以通过管理员和一个问题来改变,如果我清空通行证的形式。。。新的散列密码保存在数据库中,用户不能再使用旧密码登录。。。其中as通行证表格为空 所以我需要解决这两个问题 我该怎么做 1) 管理员不能通过管理面板更改用户名。 2) 若密码表单为空,哈希密码将不会更改为数据库自动 <?php //if form has been submitted process it if(isset($_POST['submit'])){ //collect form data

目前:用户可以通过管理员和一个问题来改变,如果我清空通行证的形式。。。新的散列密码保存在数据库中,用户不能再使用旧密码登录。。。其中as通行证表格为空

所以我需要解决这两个问题

我该怎么做

1) 管理员不能通过管理面板更改用户名。 2) 若密码表单为空,哈希密码将不会更改为数据库自动

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


将用户名字段设置为只读。第二次检查以下代码

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

else
{
  //update everything including password
}

您正在检查密码是否是在第一次查询中设置的,而不是在
中设置的,否则
在测试之前修剪您的值,即如果(修剪($username)==“”),您也应该使用
!empty()
而不是
isset()
,IMHO。如果用户没有正确填写注册表单,为什么要在数据库中输入任何内容?如果所有的要求都满足了-entry else返回form.readonly可以使用它很好,但是我用了不同的方法。。。但是第二期。。。我不需要。。。。我需要通过php修复它function@Addons检查我的编辑,如果它工作,请选择它作为答案。谢谢兄弟的问题解决了。也要感谢弗雷德-ii-他也是正确的,但我一开始不理解他的评论。