2011-07-01 80 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的返回,那么这将消除看到新图像的任何延迟。

我也建议在会话变量中存储该时间戳,以便您不依赖用户输入查询。

还处理其他用户可能上传到同一区域的并发性。