«
用PHP来制作评论系统

时间:2008-5-31    作者:Deri    分类: 分享


   <p>  我们在实际做的过程中很是简单的,希望大家好好研究一下,给补充多点功能。本程序须在PHP and mySQL的环境下运行。有三个文件:comments.php, 是用来显示评论的, commentadd.php, 用来处理评论内容的, commentform.html 通过FROM来提交评论。</p><p>  1.首先建立一个数据库,如果已经建立则建立一个符合条件的表:</p><code>  CREATE TABLE `comtbl` (<br />   `postID` INT NOT NULL AUTO_INCREMENT ,<br />   `postTITLE` TEXT NOT NULL ,<br />   `posterNAME` TEXT NOT NULL ,<br />   `posterEMAIL` TEXT NOT NULL ,<br />   `postTIME` TIMESTAMP NOT NULL ,<br />   `postTXT` TEXT NOT NULL ,<br />   PRIMARY KEY ( `postID` )<br />   );</code><p>  评论查看页:COMMENTS.PHP,具体内容为(有用户名和密码的在实际工作中要改变):</p><code>$dbcnx = mysql_connect("localhost", "username", "password");<br />mysql_select_db("comments");</code><p>  接下来需要对表进行查询,并且把ID 按Descending: 顺序排序:</p><code>  $result = mysql_query("SELECT * FROM comtbl ORDER BY postID DESC");<br />if (!$result) {<br />echo("<b>Error performing query: " . mysql_error() . "</b>");<br />exit();<br />}</code><p>  在这里因为要读出好多条记录,所以用循环来读,具体程序如下:</p><code>while ($row = mysql_fetch_array($result) ) {<br />$msgTxt = $row["postTXT"];<br />$msgId = $row["postID"];<br />$SigName = $row["posterNAME"];<br />$SigDate = $row["postTIME"];<br />$msgTitle = $row["postTITLE"];<br />$url = $row["posterEMAIL"];</code><p>  现在到了最关键的一步了,也是困难的一步: 因为在这里用到MySQL's TIMESTAMP 函数 (功能是可以自动的饿把时间添加到一个表中),并且需要取得时间的字符串,使用字符串函数substr() ( $yr 表示年, $mo 表示月, 等等):</p>
<p> </p>

   <code>$yr = substr($SigDate, 2, 2);<br />$mo = substr($SigDate, 4, 2);<br />$da = substr($SigDate, 6, 2);<br />$hr = substr($SigDate, 8, 2);<br />$min = substr($SigDate, 10, 2);</code><p>  还需要对上述代码的功能加以扩充来实现12或24小时表示或者用 AM和PM来表示上下午,代码如下:</p><code>  if ($hr > "11") {<br />$x = "12";<br />$timetype = "PM";<br />$hr = $hr - 12;<br />}else{<br />$timetype = "AM";<br />}</code><p>  另外,当评论者要是留下Email 的话,我们可以在这里来建立一个连接实现联系发评论的人.代码如下:</p><code>  if (!$url) {<br />$url = "#";<br />}else{<br />$stat = $url;<br />$url = "mailto:" . $url . "";<br />}</code><p>  最后,我们可以按行来显示数据,并且关闭循环,最终的显示代码如下:</p><code>  echo("<p><b>$msgTitle</b><br />  $msgTxt<br><br />  <div align=right>$hr:$min $timetype | $mo/$da/$yr | $msgId, <a href='$url'>$SigName</a></div></p>");<br />}<br />  <p><b>Message Title</b><br />   Text within the message, blah blah<br><br />  <div align=right>Hour:Minute AM/PM | Month/Day/Year | Message ID, <a href='mailto:test@test.com'>Name with email link</a></div></p></code><p>  表单处理的程序: COMMENTADD.PHP</p><p>  首先我们设置一些变量,然后通过表单把变量获得的数据提交到后台数据库中,并且请记住用户名和密码。</p>
 <p> </p>

   <code>  $assume = $_POST['assume'];<br />  $posterEMAIL = $_POST['postemail'];<br />  $postTXT = $_POST['posttxt'];<br />  $posterNAME = $_POST['poster'];<br />  $postTITLE = $_POST['posttitle'];<br />if ($assume == "true") {<br />$dbcnx = mysql_connect("localhost", "username", "password");<br />mysql_select_db("comments");<br />$sql = "INSERT INTO comtbl SET posterNAME='$posterNAME', posterEMAIL='$posterEMAIL',<br />postTXT='$postTXT', postTITLE='$postTITLE'";<br />if (mysql_query($sql)) {<br />echo("<P>Your comment has been added</P>");<br />} else {<br />echo("<P>Error adding entry: " . mysql_error() . "</P>");<br />}<br />}</code><p>  提交了自己的评论之后还要有跳转的功能,下面的Javascript代码就可以实现跳转到指定的页面。</p><code><script language=javascript><br /><!--<br />location.href="comments.php";<br />//--><br /></script></code><p>  下面是具体的COMMENTFORM.HTML代码,通过下面的内容,可以让发表评论者发表评论,然后通过提交可以把数据提交到commentadd.php里面来实现数据的在线提交。</p><code><form action="commentadd.php" method=post><br /><input type="text" name="poster" size="23" value="name"><br /><br /><input type="text" name="posttitle" size="23" value="name"><br /><br /><input type="text" name="postemail" size="23" value="user@email.com"><br /><br /><textarea cols=44 rows=6 name="posttxt" size=24 wrap="VIRTUAL">message<br /><br /><input type=hidden name=assume value=true><br /><input type="submit" value="submit"></code><p>  下面是处理评论的代码 comments.php:</p>
 <p> </p>

   <code><?<br />$dbcnx = mysql_connect("localhost", "username", "password");<br />mysql_select_db("comments");<br />$result = @mysql_query("SELECT * FROM comtbl ORDER BY postID DESC");<br />if (!$result) { echo("<b>Error performing query: " . mysql_error() . "</b>");<br />exit();<br />}<br />while ($row = mysql_fetch_array($result) ) {<br />$msgTxt = $row["postTXT"];<br />$msgId = $row["postID"];<br />$SigName = $row["posterNAME"];<br />$SigDate = $row["postTIME"];<br />$msgTitle = $row["postTITLE"];<br />$url = $row["posterEMAIL"];<br />$yr = substr($SigDate, 2, 2);<br />$mo = substr($SigDate, 4, 2);<br />$da = substr($SigDate, 6, 2);<br />$hr = substr($SigDate, 8, 2);<br />$min = substr($SigDate, 10, 2);<br />if ($hr > "11") {<br />$x = "12";<br />$timetype = "PM";<br />$hr = $hr - 12;<br />}else{<br />$timetype = "AM";<br />}<br />if (!$url) {<br />$url = "#";<br />}else{<br />$stat = $url;<br />$url = "mailto:" . $url . "";<br />}<br />echo("<p><b>$msgTitle</b> $msgTxt<br><div align=right><br />$hr:$min $timetype | $mo/$da/$yr | $msgId, <a href='$url'>$SigName</a></div></p>");<br />}<br />?></code><p>  下面是 commentadd.php:</p></p><code><?<br />$assume = $_POST['assume'];<br />$posterEMAIL = $_POST['postemail'];<br />$postTXT = $_POST['posttxt'];<br />$posterNAME = $_POST['poster'];<br />$postTITLE = $_POST['posttitle'];<br />if ($assume == "true") {<br />$dbcnx = mysql_connect("localhost", "username", "password");<br />mysql_select_db("comments");<br />$sql = "INSERT INTO comtbl SET posterNAME='$posterNAME', posterEMAIL='$posterEMAIL',<br />postTXT='$postTXT', postTITLE='$postTITLE'";<br />if (mysql_query($sql)) {<br />echo("Your comment has been added");<br />} else {<br />echo("Error adding entry: " . mysql_error() . "");<br />}<br />}<br />?><br /><script language=javascript><br /><!--<br />location.href="comments.php";<br />//--><br /></script></code><p>  整个程序到这就完了。</p></p>