2011-11-14 168 views
1

我有一个非常简单的聊天系统,我使用PHP和MySQL(这是我使用这些语言的第二天),我想知道是否有任何方法来自动刷新表数据我从我的数据库中拉出并通过PHP加载到HTML表中,而没有像JavaScript一样的东西去重新加载整个网页...只需重新载入PHP表格中的数据就可以使用PHP填充它.. .. 那有意义吗?自动刷新表而不刷新页面PHP MySQL

这里是我的代码,如果它有助于(对/chat.php)

<html><head></head><body><center> 
<form action="chat.php" method="post"> 
Message: <br><textarea type="text" name="message" style="width:80%; height:300px;"></textarea><br> 
<input type="submit" name="submitButton"/> <a href="http://www.****.com/chat.php"><button name="Refresh Chat">Refresh Chat</button></a> 
</form> 
<div style="width:100%;"> 

<?php 

$host="****"; 
$user="****"; 
$password="****"; 

$cxn = mysql_pconnect ($host, $user, $password); 

mysql_select_db("defaultdb", $cxn); 

if (getenv(HTTP_X_FORWARDED_FOR)) { 
    $ipaddress = getenv(HTTP_X_FORWARDED_FOR); 
} else { 
    $ipaddress = getenv(REMOTE_ADDR); 
} 

$message = nl2br(strip_tags(nl2br($_POST["message"]))); 

if (isset($_POST['submitButton'])) { 
    if ($message != "") { 
     mysql_query("INSERT INTO ChatTest (ID, TimeStamp, Message) VALUES ('$ipaddress', NOW(), '$message')"); 
    } 
    header('Location: chat.php'); 
} 

$message = ""; 

$data = mysql_query("SELECT * FROM ChatTest ORDER BY TimeStamp DESC") or die(mysql_error()); 
Print "<table border cellpadding=3 width='100%' style='table-layout:fixed'> 
     "; 
Print "<tr>"; 
Print "<th style='width:10%;'>ID:</th><th style='width:10%;'>TimeStamp:</th><th style='width:70%;'>Message:</th>"; 
while($info = mysql_fetch_array($data)) { 
Print " 
     <tr>"; 
    Print " <td>".$info['ID'] . "</td> "; 
    Print " <td>".$info['TimeStamp'] . " </td>"; 
    Print " <td style='white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word'>".$info['Message'] . "</td></tr> 
      "; 
} 
Print "</table>"; 

mysql_close($cxn); 


?> 

</div></center></body></html> 
+2

PHP只是服务器端,所以你需要的东西像Javascript运行PHP脚本并重新填充表格。你可以使用Jquery的$ .ajax函数填充一些内容I.E.顺便说一句,在这个例子中的DIV - http://api.jquery.com/jQuery.ajax/ –

回答

5

该技术被称为AJAX,并且添加到项目中的最简单的库之一是jQuery。我假设你的问题不是用JavaScript,而是用重新加载整个页面的想法。

UPDATE 因为我是个好人;)这应该工作,或多或少,我还没有尝试过了,所以有可能是一个错字或两个:

<?php 

$host="****"; 
$user="****"; 
$password="****"; 

$cxn = mysql_pconnect ($host, $user, $password); 

mysql_select_db("defaultdb", $cxn); 

if (getenv(HTTP_X_FORWARDED_FOR)) { 
$ipaddress = getenv(HTTP_X_FORWARDED_FOR); 
} else { 
$ipaddress = getenv(REMOTE_ADDR); 
} 

$message = nl2br(strip_tags(nl2br($_POST["message"]))); 
if (isset($_POST['submitButton'])) { 
if ($message != "") { 
mysql_query("INSERT INTO ChatTest (ID, TimeStamp, Message) VALUES ('$ipaddress', NOW(), '$message')"); 
} 
header('Location: chat.php'); 
} 

$message = ""; 

$data = mysql_query("SELECT * FROM ChatTest ORDER BY TimeStamp DESC") or die(mysql_error()); 

$tbl = ''; 
$tbl .= "<table border cellpadding=3 width='100%' style='table-layout:fixed'> 
"; 
$tbl .= "<tr>"; 
$tbl .= "<th style='width:10%;'>ID:</th><th style='width:10%;'>TimeStamp:</th><th style='width:70%;'>Message:</th>"; 
while($info = mysql_fetch_array($data)) { 
$tbl .= " 
<tr>"; 
$tbl .= " <td>".$info['ID'] . "</td> "; 
$tbl .= " <td>".$info['TimeStamp'] . " </td>"; 
$tbl .= " <td style='white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word'>".$info['Message'] . "</td></tr> 
"; 
} 
$tbl .= "</table>"; 

mysql_close($cxn); 

if (isset ($_GET['update'])) 
{ 
    echo $tbl; 
    die(); 
} 

?> 
<html><head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js" type="text/javascript"></script> 
</head><body><center> 
<form action="chat.php" method="post"> 
Message: <br><textarea type="text" name="message" style="width:80%; height:300px;"></textarea><br> 
<input type="submit" name="submitButton"/> <a href="http://www.****.com/chat.php"><button name="Refresh Chat">Refresh Chat</button></a> 
</form> 
<div id="messages" style="width:100%;"> 
    <?php echo $tbl; ?> 
</div></center> 
<script type="text/javascript"> 
$(document).ready (function() { 
    var updater = setTimeout (function() { 
     $('div#messages').load ('chat.php', 'update=true'); 
    }, 1000); 
}); 
</script> 
</body></html> 

至于编码技术,你可能想看看SQL注入,也许编写更干净的HTML,但我相信你会到达那里:)

+0

是的,正是:)我会在平均时间看,谢谢! –

+0

谢谢! ahhhh :) –

1

你会做没有JavaScript中的唯一方法是使用iframe的聊天界面,和元刷新。

但为什么不使用JavaScript?

+1

,查找“SQL注入”...你的聊天脚本有一个漏洞。 –

+0

对不起,混淆哈哈,我没有问题,使用JavaScript ...我只是不想使用Javascript,将重新加载整个页面...我只是想重新加载表数据,并保持在页面上的一切它是(例如流式传输视频,文本框中带有文本,进度条,定时器等) –

+0

您不需要重新加载整个页面。使用Ajax加载聊天数据并刷新界面。 –