<?php 
//用COOKIE保存投票人的投票记录
if($vote && !$already_voted) SetCookie("already_voted","1");
?>
<html>
<head>
<title>简易投票系统</title>
</head>
<body alink="#FF0000" link="#000099" vlink="#CC6600" topmargin="8" leftmargin="0" bgColor="#FFFFFF">
<br><center><font color=green>简易投票系统-学习PHP 4.0容易吗?</font></center><br>
<table cellspacing=0 bordercolordark=#FFFFFF width="60%" bordercolorlight=#000000 border=1 align="center" cellpadding="2">
  <tr>
    <td align="center">
<form action="<?php echo $PHP_SELF?>" method="post" name="frmVote">
<br>添加一个投票类别: 
<input type="text" name="newvoteitem" size="20" maxlength="30">
<input type=submit value="添 加">
<br><br>
<?php 
//连接数据库
mysql_connect("localhost","root","");
$mysqldb="test";
if($newvoteitem)
{
//添加新的投票项
if(!mysql_db_query($mysqldb,"insert into vote values ('$newvoteitem',0)"))
{
echo "添加出错!<br>";
}
}
//用COOKIE保存投票人的投票记录
if($vote && $already_voted) {
         echo "<font color=red>请您不要重复投票,谢谢!</font><br><br>\n";
     }
     else if($vote)
     {
         if(!mysql_db_query($mysqldb,"update vote set votes=votes+1 where name='$vote'"))
         {
             echo "投票出错!<br>";
         }
     }
     //计算总投票数
     $result=mysql_db_query($mysqldb,"select sum(votes) as sum from vote");
     if($result)
     {
         $sum=(int) mysql_result($result,0,"sum");
         mysql_free_result($result);
     }
     //读出投票项数据
     $result=mysql_db_query($mysqldb,"select * from vote order by votes DESC");
?>
<table cellspacing=0 bordercolordark=#FFFFFF width="90%" bordercolorlight=#000000 border=1 align="center" cellpadding="2">
  <tr>
    <td align="center" width="15%">投票</td>
    <td align="center" width="60%">选项</td>
    <td align="center" width="25%">票数/比例</td>
  </tr>
<?php 
//循环读出投票项
while($row=mysql_fetch_row($result))
{
//计算百分比
$per=(int)(100*$row[1]/$sum);
?>
  <tr>
    <td align="center"><input type=radio name=vote value="<?php echo $row[0]?>">
</td>
    <td><?php echo $row[0]?></td>
    <td align="right"><?php echo $row[1]?>
<img src="blue.gif" height=10 width="<?php echo $per?>">
<?php echo $per?>
</td>
  </tr>
<?php 
}
//释放结果集
     mysql_free_result($result);
 ?>
</table>
<br><input type=submit value="投 票">
</form>
    </td>
  </tr>
</table>
</BODY>
</HTML>$result=mysql_db_query($mysqldb,"select sum(votes) as sum from vote");
     if($result)
     {
         $sum=(int) mysql_result($result,0,"sum");
         mysql_free_result($result);
     }
这个地方我有几个问题
1
$result=mysql_db_query($mysqldb,"select sum(votes) as sum from vote");
返回的是什么?产生变量$sum吗?
2
$sum=(int) mysql_result($result,0,"sum");
中的sum是字段名吗?
如果是,那我在mysql中没有建立这一字段也正常工作了啊。
并且从if(!mysql_db_query($mysqldb,"insert into vote values ('$newvoteitem',0)"))这一句来看,应该就有两个字段啊。
3mysql_free_result($result);
释放内存以后,是$sum不消失,$result消失了吗?

解决方案 »

  1.   


    $result=mysql_db_query($mysqldb,"select sum(votes) as sum from vote"); 
    返回的是布尔值(查询执行是否成功),不产生变量$sum
      

  2.   

    3mysql_free_result($result); 
    释放内存以后,是$sum不消失,$result消失了
      

  3.   


    $sum=(int) mysql_result($result,0,"sum"); 
    中的sum是字段别名
      

  4.   

    1.成功的话返回的是一个resource,失败返回false
    2.sum是在上面的查询语句中指定的列的别名,上面查询语句select sum(votes) as sum from vote中as sum指定了别名为sum,所以在mysql中没这字段也一样能正常工作
    3.mysql_free_result(resource $result ) 将释放所有与结果标识符 $result 所关联的内存。文档中是这么写的。具体的我也不清楚,LZ测试下就知道了详细的还是参考文档吧
      

  5.   

    其实我还是不清楚这句
    $sum=(int) mysql_result($result,0,"sum"); 
    sum是谁的别名?
    是字段的吗?
    mysql_result是怎么通过 0 和sum 来找到那个值的?
    或者干脆理解成为
    就是想把值赋给一个变量$sum,就通过字段别名sum的第一行来得到?
      

  6.   

    别名是这样的:
    select sum(votes) as sum from vote
    这个语句中,会产生一行,里面其中一列,就是计算sum(votes)的那一列,别名被定为summysql_result 中的0就是指上面查询语句中产生的第1行(跟数组下标的情况类似),这个函数返回的就是第1行中sum列的值其实现在已经不推荐使用mysql_result的语句了,文档中推荐使用其他高效的函数来替代这个函数