2017-02-22 120 views
0

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提到的方式取消了舊圖片的鏈接。 –

回答

2

當您上傳用戶圖像時,將表中的內容更新爲關聯的用戶。但是,您不會使用相應的值更新會話變量。

後您已成功運行查詢,返回成功消息之前,設置會話變量的值,例如:

[...] 
$_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

哦謝謝你的樣品!一個非常好的答案,易於理解! –

1

你是不是在您的會話更新吧! 。

你會被填充在當前登錄的時候,你需要在你的上傳腳本來更新 $_SESSION['userpic'] = $userpic;

1

它可以通過以下步驟來實現,當用戶修改圖像

  • 上傳新圖片
  • 成功上傳 - 更新DB從文件夾
  • 更新會話W¯¯
  • 取消鏈接舊形象ith新圖像數據
  • 如果使用ajax,則返回img的新src並操作DOM
  • 不使用ajax,直到用戶不刷新頁面,它將不會更改。