Why is my PHP SQL code not updating

Does anyone know why this PHP code does not update the column pictures, it will update the rest of them, but not the image column, to update user information. Thus, email address, password and image. I am brand new. for PHP, so I really don't know what to look for when they look for errors

    <?php 

    require("common.php"); 

    if(empty($_SESSION['user'])) 
    { 
        header("Location: login.php"); 

        die("Redirecting to login.php"); 
    } 

    if(!empty($_POST)) 
    { 
        if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
        { 
            die("Invalid E-Mail Address"); 
        } 

        if($_POST['email'] != $_SESSION['user']['email']['picture']) 
        { 
            $query = " 
                SELECT 
                    1 
                FROM users 
                WHERE 
                    email = :email
                    picture = :picture
            "; 

            $query_params = array( 
                ':email' => $_POST['email'] 
            ); 

            try 
            { 
                $stmt = $db->prepare($query); 
                $result = $stmt->execute($query_params); 
            } 
            catch(PDOException $ex) 
            { 
                die("Failed to run query: " . $ex->getMessage()); 
            } 

            $row = $stmt->fetch(); 
            if($row) 
            { 
                die("This E-Mail address is already in use"); 
            } 
        } 

        if(!empty($_POST['password'])) 
        { 
            $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 
            $password = hash('sha256', $_POST['password'] . $salt); 
            for($round = 0; $round < 65536; $round++) 
            { 
                $password = hash('sha256', $password . $salt); 
            } 
        } 
        else 
        { 
            $password = null; 
            $salt = null; 
        } 

        $query_params = array( 
            ':email' => $_POST['email'], 
            ':user_id' => $_SESSION['user']['id'], 
            ':picture' => $_POST['picture'], 
        ); 

        if($password !== null) 
        { 
            $query_params[':password'] = $password; 
            $query_params[':salt'] = $salt; 
        } 

        $query = " 
            UPDATE users 
            SET 
                email = :email 
                picture = :picture
        "; 

        if($password !== null) 
        { 
            $query .= " 
                , password = :password 
                , salt = :salt 
            "; 
        } 

        $query .= " 
            WHERE 
                id = :user_id 
        "; 

        try 
        { 
            // Execute the query 
            $stmt = $db->prepare($query); 
            $result = $stmt->execute($query_params); 
        } 
        catch(PDOException $ex) 
        { 
            die("Failed to run query: " . $ex->getMessage()); 
        } 

        $_SESSION['user']['email']['picture'] = $_POST['email']; 

        header("Location: private.php"); 

        die("Redirecting to private.php"); 
    } 

?> 
+4
source share
2 answers

You are missing ,.

$query = " 
    UPDATE users 
    SET 
        email = :email 
        picture = :picture
";

You need to change it to

$query = " 
    UPDATE users 
    SET 
        email = :email, 
        picture = :picture
";
+3
source

Missing comma after: email in your UPDATE statement.

$query = " 
            UPDATE users 
            SET 
                email = :email 
                picture = :picture
        "; 

it should be

$query = " 
        UPDATE users 
        SET 
            email = :email,  
            picture = :picture
    "; 

EDIT: in addition to this, you also did not specify a parameter in your first request:

        $query = " 
            SELECT 
                1 
            FROM users 
            WHERE 
                email = :email
                picture = :picture
        "; 

        $query_params = array( 
            ':email' => $_POST['email'] 
        ); 

, : , : email : picture.

picture = :picture $query, ':picture' => $_POST['picture'] $query_params

+2

All Articles