在php中更新会话变量

问题描述:

Okey让用户更改个人资料图片时出现问题。如果我的愚蠢头脑理解正确(我认为),这是由于我的会话没有更新......所以这是我的上传文件,用户可以将图像文件上传到数据库,插入图像并它工作正常即使图像在数据库中更改我仍然看到旧的图像时,我将它插入......只有当我注销和登录IM能够看到新的画面,在php中更新会话变量

  • 有一些类型的方式,我可以更新我的会议,而用户不会登录在进程....?
  • 这是由于我的会议不更新?

不知道是否有帮助,但这里是我的代码

<?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";} 
?> 

这里是我的登陆,如果这使得它更容易,以及:

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

    } 

    } 
}?> 

任何帮助超过赞赏更多但请尽量保持简单即时蠢

+0

成功上传图片后,您需要更改'$ _SESSION ['userpic'] = $ row-> userpic;'变量值。 –

+0

当用户更新图像...首先你需要取消链接文件夹中的现有图像,并更新会话值与新的图像值,因为HTML已经加载,然后通过ajax你需要更新图像src与新的.....其他直到用户不注销或刷新图像不会改变。 – Naincy

+0

它应该是'$ _SESSION ['userpic'] = $ userpic;'你什么时候更新用户表。也按照@Naincy提到的方式取消了旧图片的链接。 –

当您上传用户图像时,将表中的内容更新为关联的用户。但是,您不会使用相应的值更新会话变量。

后您已成功运行查询,返回成功消息之前,设置会话变量的值,例如:

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

编辑:请注意,图像的变化将不会发生这个页面加载,它会在之后发生。这是因为在此之前您正在使用之前的值。

当您完成请求时,执行完整的页面加载/重定向是常用的方法。例如,您可以将输出消息存储在会话变量中,重定向用户,然后检查是否有任何消息要输出。

样品:

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

然后,在某处你index.php要的消息是,您可以添加这样的事情:

if (isset($_SESSION['messages']) and strlen($_SESSION['messages']) > 0) { 
    echo $_SESSION['messages']; 
    unset($_SESSION['messages']); 
} 
+0

他会更新会话静止图像不会实时更改,直到用户不会刷新。 – Naincy

+0

哦谢谢你的样品!一个非常好的答案,易于理解! –

你是不是在您的会话更新吧! 。

你会被填充在当前登录的时候,你需要在你的上传脚本来更新 $_SESSION['userpic'] = $userpic;

它可以通过以下步骤来实现,当用户修改图像

  • 上传新图片
  • 成功上传 - 更新DB从文件夹
  • 更新会话W¯¯
  • 取消链接旧形象ith新图像数据
  • 如果使用ajax,则返回img的新src并操作DOM
  • 不使用ajax,直到用户不刷新页面,它将不会更改。