我需要帮助修复一些代码。
我有一个查询从表中提取了多行,但是我需要它来计算其中一列“Price”中的值。
我的总计算工作正常并且输出但是它似乎在页面下方的重复区域中断了。我假设它与WHILE语句有关,但我不完全确定如何修复它。任何人都可以建议一种方法来解决它或提供替代方案。
mysql_select_db($database_otters, $otters);
$query_CartDetails = "SELECT eventregistrations.*, swimmers.*, events.*, eventtypes.*, timetable.* FROM eventregistrations LEFT JOIN swimmers ON eventregistrations.SwimmerID=swimmers.SwimmerID LEFT JOIN events ON eventregistrations.EventID=events.EventID JOIN eventtypes ON events.EventTypeID=eventtypes.EventTypeID JOIN timetable ON eventregistrations.ParentDiaryID=timetable.DiaryID WHERE eventregistrations.SessionID = '$sessionid'";
$CartDetails = mysql_query($query_CartDetails, $otters) or die(mysql_error());
$row_CartDetails = mysql_fetch_assoc($CartDetails);
$totalRows_CartDetails = mysql_num_rows($CartDetails);
$cartvalue= 0;
while ($num = mysql_fetch_assoc($CartDetails)) {
$cartvalue += $num['Price'];
}
这是重复区域的代码,如果我注释掉上面的'cartvalue'部分,它可以正常工作:
<?php do { ?>
<tr>
<td><?php echo $row_CartDetails['Fixture']; ?></td>
<td><?php echo $row_CartDetails['EventType']; ?></td>
<td><?php echo $row_CartDetails['SwimmerFName']; ?> <?php echo $row_CartDetails['SwimmerSName']; ?></td>
<td>£<?php echo $row_CartDetails['EventCost']; ?></td>
</tr>
<?php } while ($row_CartDetails = mysql_fetch_assoc($CartDetails)); ?>
答案 0 :(得分:0)
是的问题在这里
while ($num = mysql_fetch_assoc($CartDetails)) {
$cartvalue += $num['Price'];
}
在将白色循环设置为结果集的末尾之后,循环遍历结果集和指针。因此,如果您对同一结果集进行进一步迭代,那么您很可能什么也得不到。
在这种情况下,当您需要再次进行迭代时,您需要使用
重置指针所以在运行第二个循环之前做一些事情
mysql_data_seek($CartDetails, 0) ; // this will set the pointer to the 1st row
注意:您正在使用已弃用的mysql函数版本,请使用带有预处理语句的mysqli或pdo开始。
答案 1 :(得分:0)
你好我可以弄清楚的一个可能的原因是while while循环会第一次运行是否while条件是否为真所以我建议你使用while循环
<?php while ($row_CartDetails = mysql_fetch_assoc($CartDetails)) { ?>
<tr>
<td><?php echo $row_CartDetails['Fixture']; ?></td>
<td><?php echo $row_CartDetails['EventType']; ?></td>
<td><?php echo $row_CartDetails['SwimmerFName']; ?> <?php echo $row_CartDetails['SwimmerSName']; ?></td>
<td>£<?php echo $row_CartDetails['EventCost']; ?></td>
</tr>
<?php } ?>
以上代码将保存额外的&lt; tr&gt;&lt; / tr&gt;