清单 3. rate.php<?php require_once("DB.php"); $db =& DB::Connect( 'mysql://root@localhost/comments', array() ); if (PEAR::isError($db)) { die($db->getMessage()); } $id = $_GET['id']; $title = ''; $res = $db->query( 'SELECT name FROM movies WHERE movie_id=?', array( $id ) ); while( $res->fetchInto( $row ) ) { $title = $row[0]; } ?> <html> <head> <title><?php echo($title); ?></title> <script src="prototype.js"></script> <script> function rate( value ) { new Ajax.Updater( 'rating', 'ratemovie.php?id=<?php echo($id)?>&v='+value ); } </script> </head> <body> <h1><?php echo($title); ?></h1> <div id="rating"> <img src="star_off.gif" onclick="rate(1)"></img> <img src="star_off.gif" onclick="rate(2)"></img> <img src="star_off.gif" onclick="rate(3)"></img> <img src="star_off.gif" onclick="rate(4)"></img> <img src="star_off.gif" onclick="rate(5)"></img> <br/><br/> <?php $res2 = $db->query( 'SELECT count( rating ), sum(rating ) FROM ratings WHERE movie_id=?', $id ); while( $res2->fetchInto( $row ) ) { ?> Votes: <?php echo($row[0]); ?><br/> Average Rating: <?php echo($row[1]/$row[0]); ?> <?php } ?> </div> </body> </html>
文件顶部的代码通过传递 ID 参数获得电影标题。在脚本中间部分,我们导入了 prototype.js 库并创建了一个 rate() JavaScript 函数,这个函数将通过 Ajax 使用 Prototype 库调用 ratemovie.php 页面。然后,我们添加了一组星形图像,点击这些图像时脚本将调用 rate() 函数。
在文件底部的代码中,我们运行了一个快速查询获取投票数和指定电影的投票总数。然后,在页面中显示出这些数据,这样读者就可以知道该电影的评级情况。
清单 4 中的 ratemovie.php 脚本负责在数据库中添加评级,然后返回一些超文本标志语言(Hypertext Markup Language,HTML)代码,以替换原始页面中的投票星级和评论数。
清单 4. ratemovie.php<?php require_once("DB.php"); $db =& DB::Connect( 'mysql://root@localhost/comments', array() ); if (PEAR::isError($db)) { die($db->getMessage()); } $v = $_GET['v']; $id = $_GET['id']; $sth = $db->prepare( 'INSERT INTO ratings VALUES ( ?,? )' ); $db->execute( $sth, array( $id, $v ) ); ?> <img src="star_<?php echo( ($v>0)?'on':'off' ) ?>.gif"></img> <img src="star_<?php echo( ($v>1)?'on':'off' ) ?>.gif"></img> <img src="star_<?php echo( ($v>2)?'on':'off' ) ?>.gif"></img> <img src="star_<?php echo( ($v>3)?'on':'off' ) ?>.gif"></img> <img src="star_<?php echo( ($v>4)?'on':'off' ) ?>.gif"></img> <br/><br/> <?php $res2 = $db->query( 'SELECT count( rating ), sum(rating ) FROM ratings WHERE movie_id=?', $id ); while( $res2->fetchInto( $row ) ) { ?> Votes: <?php echo($row[0]); ?><br/> Average Rating: <?php echo($row[1]/$row[0]); ?> <?php } ?>
图 2 显示了运行中的评级页面。
(编辑:aniston)
|