duanheye7423 2017-02-22 11:11
浏览 144
已采纳

在php中更新会话变量

Okey so i got a problem when a user changes their profile picture. And if I with my silly mind understood correctly (what i think) this is due to my session being not updated... So this is my uploadfile where the user is able to upload a image file to the database, the image gets inserted and it works fine but even if the image is changed in the database i still see the old image when i insert it... Only when i logout and login im able to see the new picture,

  • Is there some type of way i can update my session without the user being logged out in the proccess....?
  • Is this due to my session being unupdated?

Don't know if it helps but here is my code

<?php
if(isset($_FILES['file']) )
{

move_uploaded_file($_FILES['file']['tmp_name'],'files/'.$_FILES['file']['name']);

session_start();
$username = $_SESSION['user'];
$userpic = 'files/'.$_FILES['file']['name'];
$id = $_SESSION['id'];

include ("connect.php");
$sql = $con->prepare('UPDATE users SET username=?, userpic=? WHERE id = ?');
$sql->bind_param("ssi",$username,$userpic,$id);
$sql->execute(); 
$sql->close();
$con->close();  
echo '<div id = "check"> Your image was succesfully uploaded</div>';
}
else{
echo "no files";}
?>

And here is my login if that makes it easier as well:

<?php 

include('connect.php');

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users";

$result = $con->query($query);

while($row = $result->fetch_object())
{
    if($username == $row->username)
    {

            $checkPassword = password_verify($password,$row->password);
            if($checkPassword ){   // betyder om det är sant
                session_start();
                $_SESSION['loggedIn'] = true; 
                $_SESSION['user'] = $row->username;
                $_SESSION['admin'] = $row->admin;
                $_SESSION['userpic'] = $row->userpic;
                $_SESSION['id'] = $row->id;
                header("Location:music.php?success");
                exit();
                $fail = false;
            }


    }
    else{
        $fail = true;
        if($fail){      
    echo "<script>
    alert('You typed in wrong password or username, please try again mate!');
    window.location.href='music.php';
    </script>";

    }

    }
}?>

Any help more than appreciated but please try to keep it simple im stupid

  • 写回答

3条回答 默认 最新

  • duanque3125 2017-02-22 11:16
    关注

    When you upload the user image you update the content in the table to the associated user. However, you do not update the session variable with the corresponding value.

    After you have ran the query successfully, before you return the success message, set the value of the session variable, like so:

    [...]
    $_SESSION['userpic'] = $userpic;
    echo '<div id = "check"> Your image was succesfully uploaded</div>';
    [...]
    

    Edit: Note that the changing of the image will not happen on THIS pageload, it will happen after. This is because you are using the previous value up until this point.

    It is a common approach to do a complete page load/redirect when you have finished a request. For example, you can store the output message in a session variable, redirect the user and then check if there are any messages to output.

    Sample:

    [...]
    $sql->execute(); 
    $sql->close();
    $con->close();
    $_SESSION['userpic'] = $userpic;
    $_SESSION['messages'] = '<div id = "check"> Your image was succesfully uploaded</div>';
    header("Location: index.php");
    

    Then, somewhere in your index.php where you want to the message to be, you add something like this:

    if (isset($_SESSION['messages']) and strlen($_SESSION['messages']) > 0) {
        echo $_SESSION['messages'];
        unset($_SESSION['messages']);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?