热点

html网页留言板源代码

时间:2010-12-5 17:23:32  作者:娱乐   来源:综合  查看:  评论:0
内容摘要:<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title&

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>一个能跑的网页留言板</title> <style> body {  font-family: "Microsoft YaHei", sans-serif; max-width: 600px; margin: 40px auto; padding: 0 20px; background: #f5f5f5; } .message-box {  background: white; padding: 15px; margin-bottom: 10px; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); } .message-box strong {  color: #333; } .time {  color: #999; font-size: 12px; float: right; } form {  background: white; padding: 20px; border-radius: 8px; margin-bottom: 20px; } input, textarea {  width: 100%; box-sizing: border-box; margin: 5px 0; padding: 8px; border: 1px solid #ddd; border-radius: 4px; } button {  background: #4CAF50; color: white; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; } button:hover {  background: #45a049; } h1 {  color: #444; border-bottom: 2px solid #4CAF50; padding-bottom: 10px; } </style> </head> <body> <h1>访客留言板</h1> <?php // 数据文件路径 $dataFile = 'messages.txt'; // 处理表单提交 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['name']) && isset($_POST['content'])) {  $name = trim(strip_tags($_POST['name'])); $content = trim(strip_tags($_POST['content'])); if ($name !== '' && $content !== '') {  $time = date('Y-m-d H:i:s'); $entry = $name . "||" . $content . "||" . $time . "\n"; // 追加到文件(注意:生产环境需要加锁处理) file_put_contents($dataFile, $entry, FILE_APPEND | LOCK_EX); // 重定向防止刷新重复提交 header('Location: ' . $_SERVER['PHP_SELF']); exit; } } // 读取已有留言 $messages = []; if (file_exists($dataFile)) {  $lines = file($dataFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach ($lines as $line) {  $parts = explode('||', $line); if (count($parts) === 3) {  $messages[] = ['name' => $parts[0], 'content' => $parts[1], 'time' => $parts[2]]; } } } // 最新留言显示在最上面 $messages = array_reverse($messages); ?> <form method="post" action=""> <input type="text" name="name" placeholder="你的名字" required> <textarea name="content" rows="4" placeholder="写下点什么..." required></textarea> <button type="submit">提交留言</button> </form> <div id="message-list"> <?php if (empty($messages)): ?> <p style="color: #999; text-align: center;">还没有留言,来抢沙发吧!板源</p> <?代码php else: ?> <?php foreach ($messages as $msg): ?> <div class="message-box"> <span class="time"><?php echo htmlspecialchars($msg['time']); ?></span> <strong><?php echo htmlspecialchars($msg['name']); ?></strong> <p><?php echo nl2br(htmlspecialchars($msg['content'])); ?></p> </div> <?php endforeach; ?> <?php endif; ?> </div> </body> </html> 
这段代码不是玩具。我把它丢在一个廉价的网页虚拟主机上跑过——就是那种一年几十块、后台还带个“已过期”红色警告的板源老古董。它扛住了连续三天的代码垃圾评论轰炸,数据文件从2KB涨到47KB,网页最后我用一行`file_put_contents`加`LOCK_EX`就解决了并发写入的板源问题。你猜怎么着?代码连个`500`错误都没出过。 真正的网页留言板核心就三件事:接收输入、存起来、板源再显示出来。代码这里我用了个文本文件当数据库——`messages.txt`。网页每行按“姓名||内容||时间”用双竖线分隔。板源这招在数据量不超过几百条时比MySQL还快,代码因为省去了数据库连接的开销。你要是访问量真大到文本文件扛不住,那说明你已经赚到钱了,到时候再换SQLite也不迟。 表单提交后,PHP先处理`$_POST`数据。注意我用`trim`和`strip_tags`做了基础过滤——别指望这能防住所有攻击,但它能挡掉90%的无脑脚本。真正该做的还有`htmlspecialchars`,在输出时转义。你看代码里,留言内容输出时套了`htmlspecialchars`,这就是防XSS的底线。不这么做,别人在你页面上弹个`alert`是小事,偷你cookie才是麻烦。 那个重定向`header('Location: ' . $_SERVER['PHP_SELF'])`是个小细节。没有它,用户刷新页面就会重复提交上一条留言。这毛病我在无数入门教程里见过,他们光教怎么写,不教怎么防重复。加这一行,配合`exit`,干干净净。 读取文件时我用`file()`函数,它会把文件每行读成数组。然后`array_reverse`反转一下,让新留言排前面。你要是想让旧留言在前,删掉那行就行。就这么简单——别去装什么框架,一个`$messages`数组加个`foreach`循环,比什么都直观。 样式部分我故意写得极简。白底、圆角、绿按钮,够了。留言板的本质是内容,不是花哨的CSS动画。你要是想加个删除功能,在`foreach`循环里添个`<a href="?delete=ID">`链接,然后用`unlink`或重写文件就行。但说实话,个人站点的留言板,删不删都行——垃圾评论直接无视,真正的留言留着反而显得有人气。 这段代码放到任何支持PHP的虚拟主机上都能跑。没有数据库配置,没有环境变量,没有Composer依赖。一个文件搞定所有事,连命名都随随便便——`messages.txt`,直白得像个工具箱里的扳手。 最后说一句,别把`strip_tags`当安全护身符。它只是去标签,但像`javascript:`这类协议攻击它管不了。真要防得彻底,用`htmlspecialchars`加白名单过滤,或者干脆用`filter_var`配合`FILTER_SANITIZE_STRING`。但那是另一篇文章的事——你现在拿这段代码去用,至少比网上那些动不动就报错的教程强得多。
最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap