ecshop留言扳和商品评论显示分析和bug处理

2011-11-23 23:25 来源:www.chinab4c.com 作者:ecshop专家

     ecshop留言扳和商品评论显示分析和bug处理,主要是通过分析 ecshop message.php这个页面显示的ecshop商品评论和ecshop用户留言。这个页面的程序其实包括两方面的内容。一方面是ecshop数据库表comment的内容,一方面是表feedback的内容。在这个页面就是将ecshop的两个数据库表中的内容集中显示。

     首先我们看。如果是大于mysql.3.2的版本的数据库。可以直接支持 $sql .= " UNION ";的查询。这样很方便的将两个表中的数据集中在一个查询的数组结果中了。如果是很老的版本的mysql就考虑到整合到临时表中去查询了。

    $cre_con = "CREATE TEMPORARY TABLE tmp_table ".$con_sql;
        $GLOBALS['db']->query($cre_con);

    ecshop的评论和留言,虽然分别存储在不同的表,但是他们的回复,却是和主内容在同一个表里面。比如ecshop商品评论,comment表中的comment_id,那么他的parent_id字段是空的,也就是为0。那么很显然,当ecshop comment表中,某条评论有回复的时候。那么直接向ecshop comment表中插入一条数据。就成为了该条主评论的回复了。ecshop评论的回复的parent_id为主评论的comment_id ,如果是ecshop主评论。那么status的值有几种不同的情况,那么如果是ecshop的回复。那么就只有status=0唯一的一种情况了。

     这就是ecshop的message.php页面显示的数据和以及他们在数据库中的一些关系的基本原理。下面我们谈ecshop商品评论和回复程序里面的一些bug;

     首先,我们看ecshop的程序。

     通过检索,   $res = $GLOBALS['db']->SelectLimit($sql, $num, $start);

     然后循环出$msg[$rows['msg_time']]['tablename'] = $rows['tablename'];一些数据,这个时候我们认真看。也是通过循环取得商品评论的回复的。

     $sql = 'SELECT user_name AS re_name, email AS re_email, add_time AS re_time, content AS re_content ,parent_id
                FROM ' . $GLOBALS['ecs']->table('comment') .
                " WHERE parent_id = $id ";

     $msg[$rows['msg_time']]['re_name']   = $reply['re_name'];

     通过这点我们分析,这个写法是十分危险的。如果有一条评论,和另外一条评论是同时写入数据库的。那么很简单。将会造成ecshop留言板造成非常大的混乱,会造成所有的评论的第一条和最后一条的回复整合在一起显示。将所有中间的结果都合并了。所以避免这个问题的最简单的办法就是通过$msg[$rows['comment_id']]['tablename'] =$rows['tablename'];类似这样的方式来解决这个问题。

    来源:http://www.chinab4c.com