Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新帐户信息PDO/PHP_Php_Mysql_Pdo - Fatal编程技术网

更新帐户信息PDO/PHP

更新帐户信息PDO/PHP,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试创建edit.php,以便用户可以更改密码并更改他们的信息,如电子邮件、用户名 用户名是用户登录的会话,因此如果用户名更改,我需要使用新用户名更新会话。它不起作用。我不知道为什么。 谢谢你的帮助。这是edit.php的代码 <?php require('includes/config.php'); if(!$user->is_logged_in()){ header('Location: login.php'); } ?> <?php class info

我正在尝试创建edit.php,以便用户可以更改密码并更改他们的信息,如电子邮件、用户名

用户名是用户登录的会话,因此如果用户名更改,我需要使用新用户名更新会话。它不起作用。我不知道为什么。 谢谢你的帮助。这是edit.php的代码

<?php 
require('includes/config.php'); 
if(!$user->is_logged_in()){ header('Location: login.php'); } 
?>
<?php
class info {    
}
$username= $_SESSION['username'];
$sql = 'SELECT * FROM users WHERE username = :username';
$query= $db->prepare($sql);
$query->execute( array(

          ':username' => $username, 
));
$query->setFetchMode (PDO::FETCH_CLASS, 'info');
while($r= $query->fetch(PDO::FETCH_OBJ)) {
    $email = $r->email;
    $namefull = $r->namefull;
    $usertype = $r->usertype;
    $password = $r->password;
    }
if(isset($_POST['submit'])){
    if(strlen($_POST['username']) < 3){
        $error[] = 'Username deve avere almeno 4 lettere.';
    } else {
        $stmt = $db->prepare('SELECT username FROM users WHERE username = :username');
        $stmt->execute(array(':username' => $_POST['username']));
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        if(!empty($row['username'])){
            $error[] = 'Username già in uso.';
        }
    }
    if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
        $error[] = 'Inserisci una email valida';
    } else {
        $stmt = $db->prepare('SELECT email FROM users WHERE email = :email');
        $stmt->execute(array(':email' => $_POST['email']));
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        if(!empty($row['email'])){
            $error[] = 'Email già in uso.';
        }
    }
    if(!isset($error)){
        try {
            $stmt = $db->prepare("UPDATE users SET (username,email,usertype) VALUES (:username, :email,:usertype) WHERE username='".$username."'");
            $stmt->execute(array(
                ':username' => $_POST['username'],
                ':email' => $_POST['email'],
                ':usertype' => $_POST['usertype'],
            ));
            header('Location: edit.php?action=joined');
            exit;
        } catch(PDOException $e) {
            $error[] = $e->getMessage();
        }

      }
}
?>
这是重置密码的操作表单,我创建了edit-reset.php

<?php 
if(isset($_POST['submit'])){
    if(strlen($_POST['password']) < 3){
        $error[] = 'Password deve contenere almeno 4 lettere.';
    }

    if(strlen($_POST['passwordConfirm']) < 3){
        $error[] = 'Conferma password deve contenere almeno 4 lettere.';
    }

    if($_POST['password'] != $_POST['passwordConfirm']){
        $error[] = 'Le password non sono uguali.';
    }


    //if no errors have been created carry on
    if(!isset($error)){

        //hash the password
        $hashedpassword = $user->password_hash($_POST['password'], PASSWORD_BCRYPT);

        //create the activasion code
        $activasion = md5(uniqid(rand(),true));

        try {

            //insert into database with a prepared statement
            $stmt = $db->prepare('INSERT INTO users (username,password,email,active) VALUES (:username, :password, :email, :active)');
            $stmt->execute(array(
                ':username' => $_POST['username'],
                ':password' => $hashedpassword,
                ':email' => $_POST['email'],
                ':active' => $activasion
            ));
            $id = $db->lastInsertId('id');

            //send email
            $to = $_POST['email'];
            $subject = "Cambio password";
            $body = "<p>La tua password è stata cambiata!</p>
            <p>Amministrazione Dixard</p>";

            $mail = new Mail();
            $mail->setFrom(SITEEMAIL);
            $mail->addAddress($to);
            $mail->subject($subject);
            $mail->body($body);
            $mail->send();

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

        //else catch the exception and show the error.
        } catch(PDOException $e) {
            $error[] = $e->getMessage();
        }

        //aggiornare la sessione con la nuova password




    }      

}

?>
以下是更改电子邮件、用户名、用户类型和更改密码的两种形式:

用户名 > 提波洛尼亚账户 > 电子邮件地址 > 萨尔瓦
当您签入edit.php脚本时,如果用户名或电子邮件已被使用,则不会排除当前用户的id。因此,每次用户想要更改用户名和电子邮件时,都必须更改用户名和电子邮件


此外,在更新数据库中的数据后,您不会更新$\u会话['username'],以保持用户登录,前提是用户名已被修改。

是,我需要使用新的用户名数据更新会话。但问题是用户名和电子邮件不会改变。数据库数据未更改$stmt=$db->prepare'SELECT username FROM username=:username AND not exists从id=$id'的用户中选择username;$stmt->executearray:username'=>$\u POST['username'];$row=$stmt->fetchPDO::FETCH_ASSOC;如果空$row['username']{$error[]='username exist.;}}1。我认为你的更新请求有问题;您需要查看以下内容:。您的请求应该更像这样:updateusers SET username=:username,email=:email,usertype=:usertype,其中id=:id;2.在之前的验证中,通过简单的请求从username=:username;并在检查用户名是否尚未使用时将此id添加到您的条件中:从username=:username和id!=:的用户中选择username:身份证件
              <h2 class="strong-header large-header">Change Password</h2>
              <form role="form" action="edit-reset.php" method="post" novalidate>
                   <div class="form-group">
                      <label for="password">Password corrente</label>
                      <input type="password" placeholder="Password" name="password_corrent" id="password" class="form-control"  required>
                  </div>

                   <div class="form-group">
                      <label for="password">Nuova Password</label>
                      <input type="password" placeholder="Nuova Password" name="password" id="password" class="form-control"  required>
                  </div>
                  <div class="form-group">
                      <label for="password-repeat">Conferma Nuova password</label>
                      <input type="password" name="passwordConfirm" id="passwordConfirm"class="form-control" placeholder="Conferma Nuova Password" required>
                  </div>

                  <button type="submit" class="btn btn-primary">Cambia Password</button>
              </form>