2011-07-01 117 views
0

基本上這就是我在做的: 我有一個flash/ajax文件上傳器,用戶可以選擇x張照片並上傳它們,然後通過外部插入MYSQL數據庫PHP腳本。運行Javascript代碼後的PHP代碼問題

它們插入到數據庫後,我想將它們顯示在頁面上,並允許用戶編輯標籤,標題等

但是,我無法弄清楚如何「實時更新」該頁面顯示正確的數據

以此爲例: showFields()在上載完成後運行;

function showFields() { 

    var jsvar = '<?php echo getIDs(); ?>'; 

    document.getElementById('picndata').innerHTML += jsvar;  
} 

,如果我有getIDs僅僅返回一個靜態值,如「測試」

但如果我是要把它做到這一點,這將工作:

function getIDs() { 

    $SQL = "SELECT * FROM `slides` ORDER BY `sid` DESC"; 
    $results = mysql_query($SQL); 
    $row = mysql_fetch_assoc($results); 
    $slide = $row['sid']; 

    $SQL = "SELECT * FROM `slides` WHERE `sid` = $slide"; 

    $results = mysql_query($SQL); 
    $str; 

    while ($row = mysql_fetch_array($results)) { 
     $str .= $row['size'] . "\r\n"; 
    } 

    return $str; 
} 

(馬虎,我知道)

,那麼它不會工作,因爲PHP是先運行,所以它沒有找到任何結果,因爲圖像尚未上傳!

任何想法?

回答

0

這條線:

$str .= $row['size'] . "\r\n"; 

將導致你的JavaScript具有未結束的字符串。

變化:

var jsvar = '<?php echo getIDs(); ?>'; 

要:

var jsvar = '<?php echo str_replace("\r\n", "\\\r\n", trim(getIDs()) ?>'; 

這將斜線放置在適當的地方,這樣的JavaScript是有效的。或者,不是添加反斜槓,而是使用空格或逗號替代換行符,或者最適合代碼的任何內容。

+0

這不是問題......問題在於上傳是在另一個php腳本加載後發生的,因此getIDs()不會取代最新的ID,它將替換頁面加載時的最新ID – Mike

0

使用ajax和時間戳您的圖像。
我個人有一個'刷新'功能,通過setTimeout()定時調用get函數。

在當前圖像的初始加載時,確定最新的圖像時間戳。 在你的ajax中,查詢時間戳>以前的'最新'時間戳的圖像。如果您收到任何結果,請更新頁面,並重新設置新的'最新'變種。
如果你的上傳功能還有一些你可以用來觸發你的ajax的返回,那麼這將消除看到新圖像的任何延遲。

我也建議在會話變量中存儲該時間戳,以便您不依賴用戶輸入查詢。

還處理其他用戶可能上傳到同一區域的併發性。