Я Продолжаю получать следующую ошибку, и я задавался вопросом о том, как зафиксировать ее.
Fatal error: Unsupported operand types on line 97
Вокруг этой области кода упоминается ниже. Я могу перечислить полный код в случае необходимости.
Код PHP
$total_rating_points = mysqli_fetch_array($result);
if (!empty($total_rating_points) && !empty($total_ratings)){
$avg = (round($total_rating_points / $total_ratings,1));
$votes = $total_ratings;
echo $avg . "/10 (" . $votes . " votes cast)";
} else {
echo '(no votes cast)';
}
Вот Строка 97
$avg = (round($total_rating_points / $total_ratings,1));
Вот полный код.
function getRatingText(){
$dbc = mysqli_connect ("localhost", "root", "", "sitename");
$page = '3';
$sql1 = "SELECT COUNT(*)
FROM articles_grades
WHERE users_articles_id = '$page'";
$result = mysqli_query($dbc,$sql1);
if (!mysqli_query($dbc, $sql1)) {
print mysqli_error($dbc);
return;
}
$total_ratings = mysqli_fetch_array($result);
$sql2 = "SELECT COUNT(*)
FROM grades
JOIN articles_grades ON grades.id = articles_grades.grade_id
WHERE articles_grades.users_articles_id = '$page'";
$result = mysqli_query($dbc,$sql2);
if (!mysqli_query($dbc, $sql2)) {
print mysqli_error($dbc);
return;
}
$total_rating_points = mysqli_fetch_array($result);
if (!empty($total_rating_points) && !empty($total_ratings)){
$avg = (round($total_rating_points / $total_ratings,1));
$votes = $total_ratings;
echo $avg . "/10 (" . $votes . " votes cast)";
} else {
echo '(no votes cast)';
}
}
$ total_rating_points
- это массив. Вы не можете разделить его по номеру.
, которые обычно вызываются, когда тип одной из ваших переменных - это то, что вы не ожидаете этого.
$x = "8";
$y = 4;
$x / $y; // this is OK, PHP converts "8" to 8
$x = new FooObject();
$y = 4;
$x / $y; // PHP says "wtfmate??"
Выбросить переменные $ total_rating_points
и $ total_ratings
:
var_dump($total_rating_points);
var_dump($total_ratings);
.. Затем работайте назад через код (проверка debug_backtrace ()
, если требуется) найти там, где он вышел.
Править: Duhhh .. Я только что посмотрел на ваш код снова и увидел проблему. $ total_rating_points
- это массив, и это причина проблемы. Как вы разделите массив по номеру? Ответ: Вы не можете.
Вы хотите разделить каждый из членов массива на $ total_ratings
? Например:
// input: [2, 4, 6, 16] / 2
// output: [1, 2, 3, 8]
function divideArrayMembers($arr, $denominator) {
$ret = array();
foreach ($arr as $key => $val) {
$ret[$key] = $val / $denominator;
}
return $ret;
}
... Или вы хотите разделить общую сумму?
input: [2, 4, 6, 16] / 2
output: 14 // (2 + 4 + 6 + 16) / 2
function divideTotal($arr, $denominator) {
return array_sum($arr) / $denominator.
}
(отредактировано, поскольку запрос MySQL был добавлен к вопросу)
, который вы использовали mysql_fetch_array
, чтобы получить результат в MySQL, так как имя предлагает, это возвращает массив. Вы не можете делать математику, как это на массивах.
Вы хотите изменить запрос MySQL к этому:
$sql1 = "SELECT COUNT(*) as count
FROM articles_grades
WHERE users_articles_id = '$page'";
Измените код mysql_fetch_array к этому:
$total_rating_points = mysql_result($result, 0, "count");
, который вернет фактическое число, которое вы можете использовать для математики. Измените оба ваших запроса к этому формату, и вы должны быть хорошими, чтобы пойти.
Использование Array_Sum ()
на $ total_rating_points
и $ total_ratings
.