留言表单
留言板的留言表单位于 index.php 页面的下面部分,在显示完当前页的留言信息后显示留言表单以供来访用户输入并提交留言:
<form id="form1" name="form1" method="post" action="submiting.php" onSubmit="return InputCheck(this)"> <h3>发表留言</h3> <p> <label for="title">昵 称:</label> <input id="nickname" name="nickname" type="text" /><span>(必须填写,不超过16个字符串)</span> </p> <p> <label for="title">电子邮件:</label> <input id="email" name="email" type="text" /><span>(非必须,不超过60个字符串)</span> </p> <p> <label for="title">留言内容:</label> <textarea id="content" name="content" cols="50" rows="8" ></textarea> </p> <input type="submit" name="submit" value=" 确 定 " /> </form>
Javascript 检测代码
JavaScript 检测代码用于检测表单信息是否填写完整。本留言板例子中,要求留言者必须输入昵称及留言内容,而对于电子邮件可以不用必须输入:
<script language="JavaScript"> function InputCheck(form1) { if (form1.nickname.value == "") { alert("请输入您的昵称。"); form1.nickname.focus(); return (false); } if (form1.content.value == "") { alert("留言内容不可为空。"); form1.content.focus(); return (false); } } </script>
需要说明的是,Javascript 检测代码只是在当前页面友好的提醒用户将必须填写的信息填写完整,但不能保证提交到处理页面的信息也是完整的(如浏览器可以禁用 Javascript 代码而使之失效)。因此在处理表单信息的 PHP 程序里仍需对表单信息做检测。
留言表单信息处理
submiting.php 用于处理留言者提交的留言信息。该页面分为两个部分:留言信息预处理与留言信息写入数据表。
留言信息预处理
留言信息预处理部分首先要对信息的安全性做处理,其次对有长度要求或格式要求(如 email 格式)的做处理:
// 禁止非 POST 方式访问 if(!isset($_POST['submit'])){ exit('非法访问!'); } // 表单信息处理 if(get_magic_quotes_gpc()){ $nickname = htmlspecialchars(trim($_POST['nickname'])); $email = htmlspecialchars(trim($_POST['email'])); $content = htmlspecialchars(trim($_POST['content'])); } else { $nickname = addslashes(htmlspecialchars(trim($_POST['nickname']))); $email = addslashes(htmlspecialchars(trim($_POST['email']))); $content = addslashes(htmlspecialchars(trim($_POST['content']))); } if(strlen($nickname)>16){ exit('错误:昵称不得超过16个字符串 [ <a href="javascript:history.back()">返 回</a> ]'); } if(strlen($nickname)>60){ exit('错误:邮箱不得超过60个字符串 [ <a href="javascript:history.back()">返 回</a> ]'); }
在安全性处理部分,对系统 get_magic_quotes_gpc() 参数做检测。默认 get_magic_quotes_gpc() 为开启状态(值为1),但也有可能为关闭状态。因此当没开启时,进行 addslashes 转义处理。
除了 get_magic_quotes_gpc() 检测外,还做了 htmlspecialchars 特殊字符串转换及 trim 处理。
接下来对昵称及电子邮件的长度限制做了检测,注意在本例中没有做邮箱格式检测。如果需要做邮箱格式检测,请参考《PHP 用户注册》一文。
留言信息写入数据表
当留言信息处理完毕之后,可将数据写入对应的留言表:
// 数据写入库表 require("./conn.php"); $createtime = time(); $insert_sql = "INSERT INTO guestbook(nickname,email,content,createtime)VALUES"; $insert_sql .= "('$nickname','$email','$content',$createtime)"; if(mysql_query($insert_sql)){ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm l1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta http-equiv="Refresh" content="2;url=index.php"> <title>留言成功</title> </head> <body> <p> 留言成功!非常感谢您的留言。<br />请稍后,页面正在返回... </p> </body> </html> <?php } else { echo '留言失败:',mysql_error(),'[ <a href="javascript:history.back()">返 回</a> ]'; } ?>
这里是很普通的 mysql_query 函数数据写入操作。由于写入成功后要使用 html meta 的 Refresh 属性自动转向至留言主界面,因此在两段 PHP 代码间插入了 html 代码。
至此,整个 PHP 留言板程序的前台用户留言及展示部分已经完成。