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 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里