У меня очень простая чат-система, которую я построил с использованием PHP и MySQL (это мой второй день, когда-либо использующий эти языки), и мне интересно, есть ли способ автоматического обновления данных таблицы, которые я извлекаю из своей базы данных и загрузки в html-таблицу через PHP, не имея что-то вроде 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>
Этот метод называется 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, но я уверен, что вы доберетесь туда 🙂
единственный способ сделать это без javascript – использовать iframe для интерфейса чата и мета-обновление.
но почему бы не использовать javascript?