自动刷新表而不刷新页面 PHP MySQL

Posted

技术标签:

【中文标题】自动刷新表而不刷新页面 PHP MySQL【英文标题】:Auto refresh table without refreshing page PHP MySQL 【发布时间】:2011-12-29 01:21:21 【问题描述】:

我有一个使用 phpmysql 构建的非常简单的聊天系统(这是我使用这些语言的第二天),我想知道是否有任何方法可以自动刷新我从我的数据库并通过 PHP 加载到 html 表中,而无需使用 javascript 之类的东西去重新加载整个网页......只需重新加载 html 表,其中包含 PHP 填充的数据......这有意义吗?

如果有帮助,这是我的代码(用于 /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>

【问题讨论】:

PHP 只是服务器端的,因此您需要类似 Javascript 的东西来运行 PHP 脚本并重新填充表格。您可以使用 Jquery 的 $.ajax 函数来填充某些内容 I.E.在这种情况下只是 DIV - api.jquery.com/jQuery.ajax 【参考方案1】:

该技术称为 AJAX,最容易添加到项目中的库之一是 jQuery。我认为您的问题不在于 JavaScript,而在于重新加载整个页面的想法。

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

<?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,但我相信您会成功的 :)

【讨论】:

是的,正是 :) 我会同时查一下,谢谢!【参考方案2】:

不使用 javascript 的唯一方法是使用 iframe 作为聊天界面,并使用元刷新。

但为什么不使用 javascript?

【讨论】:

对了,查一下“sql注入”……你的聊天脚本有漏洞。 抱歉造成混乱哈哈,我用JavaScript没问题...我只是不想使用会重新加载整个页面的Javascript...我只想重新加载表格数据和将其他所有内容保留在页面上(例如流式视频、带有文本的文本框、进度条、计时器等) 您不需要重新加载整个页面。使用 Ajax 仅加载聊天数据并刷新界面。 这会修复 SQL 注入吗? mysql_real_escape_string(

以上是关于自动刷新表而不刷新页面 PHP MySQL的主要内容,如果未能解决你的问题,请参考以下文章

使用php表单将记录添加到mysql数据库而不离开/刷新页面

将数据从下拉菜单提交到mysql而不刷新页面

提交文件而不刷新页面[重复]

PHP刷新表格而不刷新整个页面

POST到PHP而不刷新页面?

刷新 iframe 而不刷新整个页面