图 2. 评级页面
单击页面的中星形图案时,投票将添加到数据库中;星形图案、投票和平均评级的 HTML 代码会发生改变,从而反映出投票已添加。
理想情况下,我希望能够在主页上看到所有电影的评分情况。清单 5 中的新版索引页面实现了这一功能。 清单 5. index2.php<html> <body> <table> <?php require_once("DB.php"); $db =& DB::Connect( 'mysql://root@localhost/comments', array() ); if (PEAR::isError($db)) { die($db->getMessage()); } $res = $db->query( 'SELECT * FROM movies' ); while( $res->fetchInto( $row ) ) { $res2 = $db->query( 'SELECT count( rating ), sum(rating ) FROM ratings WHERE movie_id=?', $row[0] ); $rating = 0.0; while( $res2->fetchInto( $row2 ) ) { $rating = $row2[1] / $row2[0]; } ?> <tr><td align="center"> <?php echo( $rating > 0 ? $rating : 0 ) ?> <td><td> <a href="rate2.php?id=<?php echo($row[0]) ?>"><?php echo($row[1]) ?></a> </td></tr> <?php } ?> </table> </body> </html>
从 图 3 中可以看出,各个电影的评级情况都在新版的索引页面中显示出来了。
图 3. 更新后的电影页面
使用 Ajax、PHP、MySQL 和非常方便的 Prototype.js JavaScript 库实现投票模式就这么简单。
在下一个示例中,我们将实现电影评论功能。
评论
Web 上的评论系统形式各异,从极其简单的博客评论系统(可以对博客条目发表一连串的评论)到异常复杂的主题评论系统(比如 Slashdot 上的评论系统),不一而足。
本例所使用的评论系统比较简单。您可以根据需要对它进行适当的调整。
首先,在已有数据库模式中添加一个表,如 清单 6 所示。
清单 6. comments.sqlDROP TABLE IF EXISTS comments; CREATE TABLE comments ( movie_id INTEGER NOT NULL, email VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, comment TEXT NOT NULL );
所添加的是 comments 表,这个表通过 movie_id 字段与电影关联在一起。表中定义了一个电子邮件地址、评论者名称和评论文本。这是一个相当基本的评论系统,类似于 WordPress 和 MoveableType 博客软件上的评论系统。
如果想要创建一个主题评论系统,则需要在表中添加一个自动递增的 ID 字段,然后使用一个可为空的 parent_id 字段指向各个评论的父级评论。如果该 字段为空,则这个评论是顶层评论。
要在评级页面中加入评论功能,我们需要在页面底部包含一些额外的脚本。清单 7 显示了这个新的 PHP 代码。
清单 7. rate2.php... <h2>Comments</h2> <div id="comments"> <?php $res3 = $db->query( 'SELECT * FROM comments WHERE movie_id=?', $id ); while( $res3->fetchInto( $row3 ) ) { ?> <div> <a href="mailto:<?php echo($row3[1]) ?>"><?php echo($row3[2]) ?></a> says: '<?php echo($row3[3]) ?>' </div> <?php } ?> </div> <div style="margin-top:20px;">Add your own comment:</div> <form id="cform"> <input type="hidden" name="id" value="<?php echo($id)?>"> <table> <tr><td>Name:</td><td><input type="text" name="name"></td></tr> <tr><td>Email:</td><td><input type="text" name="email"></td></tr> <tr><td>Comment:</td><td><textarea name="comment" id="comment_text"></textarea></td></tr> </table> </form> <button onclick="addcomment()">Add Comment</button> <script> function addcomment() { new Ajax.Updater( 'comments', 'addcomment.php', { method: 'post', parameters: $('cform').serialize(), onSuccess: function() { $('comment_text').value = ''; } } ); } </script> </body> </html>
脚本首先使用数据库中关于该电影的评论填充 “comments” <div> 标记。 然后,在标准 HTML <form> 标记中包含评论名称、评论者电子邮件和评论内容的字段。form 标记中还包含一个隐藏值(当前所查看电影的 ID),从而评论添加脚本知道应该将这个评论指派给哪部电影。
(编辑:aniston)
|