我有一张桌子:"下载",有4列:" id","文件名"," dldate"和"计算"。
我想用PHP打印整个活动表(每次我在数据库中添加一个新行时,我希望自动更新并在此处添加一行:
+------+-------+--------------------------------------+
| id | filename | dldate | count |
+------+-------+--------------------------------------+
| 1 | file1.exe | 12.12.2012 | 322 |
| 2 | file2.exe | 13.12.2012 | 112 |
+------+-------+--------------------------------------+
我一直在尝试自己:
<?php
mysql_connect("localhost", "db_user", "password") or die(mysql_error());
mysql_select_db("db_name") or die(mysql_error());
$data = mysql_query("SELECT * FROM downloads") or die(mysql_error());
Print "<table border cellpadding=3>";
while($info = mysql_fetch_array( $data )) { Print "<tr>";
Print "<th>1:</th> <td>".$info['SELECT * FROM downloads'] . " </td></tr>";
}
Print "</table>";
?>
我需要帮助。我不明白我在这里做错了什么。
答案 0 :(得分:1)
您想要的简短答案:
<?php
mysql_connect("localhost", "db_user", "password") or die(mysql_error());
mysql_select_db("db_name") or die(mysql_error());
echo "<table border cellpadding=3>";
function do_the_query($id_higher_than) {
$query = mysql_query("SELECT * FROM downloads WHERE id > ".$id_higher_than) or die(mysql_error());
return mysql_fetch_array($query, MYSQLI_ASSOC);
}
// headers
$info = do_the_query(-1);
echo "<tr>"
foreach ($info as $col_name => $col_value) {
echo "<td>".$col_name."</td>"
}
echo "</tr>"
// records
while(1) { // yeah, its an infinite loop
echo "<tr>"
foreach ($info as $col_name => $col_value) {
echo "<td>".$col_value."</td>"
}
echo "</tr>"
flush(); // this will force PHP to send the output to your browser
// check for new records
sleep(1);
$info = do_the_query($info["id"]);
}
// I won't put a "</table>" because this will never happen
?>
您不想要的长答案(但我会这样做):
Web编程与桌面编程有很大不同。在桌面编程世界中,您的应用程序将无限期运行,直到用户关闭它。因此,当用户按下按钮或稍微关闭应用程序时,您将在一个进程中运行无限循环。
在网络编程世界中,您的应用必须在几毫秒内快速结束。生命周期很短。您阅读数据库,获取答案,格式化,输出并下车 - 关闭应用程序。如果用户想要获得更多更新数据,则需要手动刷新(例如按F5)。为了更友好,您可以使用JS自动刷新 - 为了获得更高级和更好的体验,您可以使用Ajax技术进行刷新并使用JS来更新HTML。
由于这种性质,网络编程世界的所有工具都设计为“快点关闭”的心态。例如,“mysql_query”函数执行查询并退出。
使用“my_sql_fetch_array”处理的内容只是已经发生的事情的缓冲区 - 您不会与db进行“直播”连接。此外,您可能不会在屏幕上看到任何内容,因为PHP将您的所有输出(“打印”,“回声”等)放在一个变量中,该变量仅在PHP应用程序关闭时发送给浏览器 - 这就是为什么我打了一个“同花顺”的电话。此外,您的PHP将在大约5分钟内被杀死 - 因为PHP会认为您有一个错误的应用程序:PHP应用程序不应该持续超过几毫秒。您可以通过更改php.ini中的“max-execution-time”指令或在执行时调用“set_time_limit”来更改此设置。这就是为什么“while”/“do..while”/“for”语句是坏词(总是更喜欢“foreach” - 所以你要避免陷入无限循环)。
毕竟,假设您使用PHP进行网络编程(而不是桌面应用程序),不要那样做。这不是网站的设计方式。
PS:我还没有测试过上面的代码(我从脑子里写过)因为我没有用PHP编程超过2年而且我没有安装PHP。因此可能包含一些语法错误。