2011-04-28 51 views
1

背景:我们正在启动一个将由来自不同大学的学生参加的活动。一个网络应用程序会报告参加活动的学生人数。实时更新Web系统 - Ajax,PHP,MySQL

基本的网络布局

enter image description here

我希望所需的布局是明确的。这需要每5分钟刷新一次,以便在新学生注册时显示。我使用Ajax setTimeout()方法完成了刷新部分 。我有表Student。我使用的查询是:

SELECT UNIV, STUDENT_NAME, STUDENT_EMAIL 
     FROM STUDENT 
     ORDER BY UNIV; 

然而,主要的问题是确定时,在表中添加新行和显示细节 问题1:目前,我在做什么是有$currUniv变量,它是指大学的当前价值。如果$currUniv值和当前行获取的不匹配,我创建一个新的行

代码:在updater.php

function updateTable() 
{ 
    $currUniv = ""; 
    while($currLine = mysql_fetch_array($results)) 
    { 
     if (strcmp($currLine[0], $currUniv) != 0) 
     { 
     responseHTML .= "<tr id = \"{$currLine[0]}\">"; 
     responseHTML .= "<td id = \"{$GLOBALS["univ"]}\">"; 
     responseHTML .= "{$currLine[0]}"; 
     responseHTML .= "</td>"; 
     $currUniv = $currLine[0]; 
     } 
     responseHTML .= "<td id = \"{$GLOBALS["studentname"]}\">"; 
     responseHTML .= "{$currLine[1]}"; 
     responseHTML .= "</td>"; 
     responseHTML .= "<td id = \"{$GLOBALS["studentemail"]}\">"; 
     responseHTML /= "{$currLine[2]}"; 
     responseHTML .= "</td>"; 
     if (strcmp($currLine[0], $currUniv) != 0) 
     { 
     responseHTML .= "</tr>"; 
     } 
    } 
} 

首先,不显示表。我不认为这是创建表格的最佳算法。任何人都可以提出任何其他方法来实现相同?

回答

1

看起来你没有打开足够的tr和td标签,如果大学名称与前一行匹配。确保两种情况下生成的标签数量完全相同。最好使用else。单元格可能为空,但您必须生成它们。

也有没有任何有效的原因,你不按一个大学内的学生姓名排序你的结果?这只是查询中的一个小改动 - ORDER BY UNIV,STUDENT_NAME。 如果没有它,你不能依赖mysql给你的命令,它只会抛出学生任何它认为最快的顺序,特别是当表变大时。

如果这是您需要更新的唯一东西,那么它不够复杂,无法给出将代码更改为必须从头开始学习的内容的理由。

+0

问题是我无法将新记录附加到表中的现有行。即假设有一个新的用户记录进入A大学,我使用'tr id =“A”'标记将新记录附加到表中,最终在HTML静态内创建一个新行。 – 2011-04-28 12:45:13