函数count_vote()用于计算从表单收集并存储在数据库中的投票。
function count_vote($result ,$Q_X){
$res = array(0, 0, 0, 0, 0);
while ($report = mysqli_fetch_array($result)) {
if ($report[$Q_X] == 'X1') {
$res[0] = $res[0] + 1;
} elseif ($report[$Q_X] == 'X2') {
$res[1] = $res[1] + 1;
} elseif ($report[$Q_X] == 'X3') {
$res[2] = $res[2] + 1;
} elseif ($report[$Q_X] == 'X4') {
$res[3] = $res[3] + 1;
} elseif ($report[$Q_X] == 'X5') {
$res[4] = $res[4] + 1;
}
}
if (mysqli_num_rows($result) > 1) {
return $res;
}
}
用户回答了四个问题,其中包含五个文本答案。
text | very good | good | works | bad | very bad
value| X1 | X2 | X3 | X4 | X5
使用此格式在数据库中收集答案
| Q1 | Q2 | Q3 | Q4 |
user1 | X1 | X3 | X5 | X4 |
user2 | X2 | X2 | X3 | X2 |
user3 | X1 | X1 | X1 | X1 |
我期待来自count_vote()
Question answer count
Q1 X1 2
Q1 X2 1
Q1 X3 0
Q1 X4 0
Q1 X4 0
Q2 X1 2
Q2 X2 1
Q2 X3 0
Q2 X4 0
Q2 X4 0
表示Q3,Q4也是
我得到的结果
count_vote()函数适用于第一个问题但不适用于其他问题
Question answer count
Q1 X1 2
Q1 X2 1
Q1 X3 0
Q1 X4 0
Q1 X4 0
Q2 X1 0
Q2 X2 0
Q2 X3 0
Q2 X4 0
Q2 X4 0
表示Q3,Q4也是
我用来显示结果
list($Q1_1, $Q1_2, $Q1_3, $Q1_4, $Q1_5) = count_vote($result ,"Q1");
echo $Q1_1 . ',';
echo $Q1_2 . ',';
echo $Q1_3 . ',';
echo $Q1_4 . ',';
echo $Q1_5 . '<br>';
list($Q2_1, $Q2_2, $Q2_3, $Q2_4, $Q2_5) = count_vote($result ,"Q2");
echo $Q2_1 . ',';
echo $Q2_2 . ',';
echo $Q2_3 . ',';
echo $Q2_4 . ',';
echo $Q2_5 . '<br>';
表示Q3,Q4也是
我如何选择数据
$query="SELECT * FROM `ex`";
$result=mysqli_query($link, $query);
答案 0 :(得分:1)
请参阅下面问题的解决方法:
<?php
include '../mysqCode/masterlink.php';
mysqli_set_charset($link, 'utf8');
if (mysqli_connect_error()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = "SELECT * FROM `ex`";
$result = mysqli_query($link, $query);
$rows = [];
while ($report = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$rows[] = $report;
}
function count_vote($rows, $Q_X)
{
$res = [0, 0, 0, 0, 0];
array_walk($rows, function ($row) use (&$res, $Q_X) {
switch ($row[ $Q_X ]) {
case 'X1':
$res[0] = $res[0] + 1;
break;
case 'X2':
$res[1] = $res[1] + 1;
break;
case 'X3':
$res[2] = $res[2] + 1;
break;
case 'X4':
$res[3] = $res[3] + 1;
break;
case 'X5':
$res[4] = $res[4] + 1;
break;
}
});
return $res;
}
list($Q1_1, $Q1_2, $Q1_3, $Q1_4, $Q1_5) = count_vote($rows, "Q1");
echo $Q1_1 . ',';
echo $Q1_2 . ',';
echo $Q1_3 . ',';
echo $Q1_4 . ',';
echo $Q1_5;
list($Q2_1, $Q2_2, $Q2_3, $Q2_4, $Q2_5) = count_vote($rows, "Q2");
echo $Q2_1 . ',';
echo $Q2_2 . ',';
echo $Q2_3 . ',';
echo $Q2_4 . ',';
echo $Q2_5 . '<br>';
之前的解释和原因尚无法解决
array mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] )
返回与获取的行对应的数组,向前移动内部数据指针。
所以当你第二次调用函数时,指针向前移动并且再也不会追踪每一行,结果你在第一次运行后总是收到$ res = [0,0,0,0,0]。
答案 1 :(得分:0)
你的函数获得$ result作为第一个参数。 它在进程中修改$ result:
mysqli_fetch_array($result)
所以在第二次运行期间,$ result是在结果集的末尾,如果没有更多的数据......
我认为使用count_vote()
函数直接访问数据库是一种不好的做法。你必须分开关注。
或者,如果你不能,重命名你的函数read_resultset_and_count_votes()
以避免出现意外错误......