Я продолжаю получать следующую ошибку, и мне было интересно, как ее исправить.
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
– это массив. вы не можете разделить его на число.
(отредактирован, так как запрос 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");
Это вернет фактическое число, которое вы затем можете использовать для математики. Измените оба ваших запроса на этот формат, и вам должно быть хорошо идти.
Обычно это происходит, когда тип одной из ваших переменных является тем, чего вы не ожидаете.
$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_rating_points
и $total_ratings
:
var_dump($total_rating_points); var_dump($total_ratings);
.. затем работать в обратном направлении через свой код (при необходимости проверять debug_backtrace()
), чтобы найти, где он пошатнулся.
Edit: 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. }
Используйте array_sum()
для $total_rating_points
и $total_ratings
.
if($_REQUEST['cityCode'] != ''){ $_SESSION['Cri_locations'] = $_REQUEST["s"]; $_SESSION['Cri_DateFrom'] = $_REQUEST["startDate"]; $_SESSION['Cri_DateTo'] = $_REQUEST["endDate"]; $what_to_search_id =str_replace("AREA-","",$_REQUEST["cityCode"]); $total_adults =0; $total_childs =0; $child_ages =0; $no_of_room =0; for($i=1;$i<=$_REQUEST["Cri_noofRooms"];$i++){ $check_adults =$_REQUEST['adults-r'.$i.'']; if($check_adults>0){ $adults =$_REQUEST['adults-r'.$i.'']; $childs =$_REQUEST['childs-r'.$i.'']; $childAge =$_REQUEST['childAge-r'.$i.'']; $packs_arr[] =array('adults'=>$adults,'childs'=>$childs,'childAge'=>$childAge); $total_adults =$total_adults+$adults; $total_childs =$total_childs+$childs; $child_ages =$child_ages+$childAge;//error accours here pls help $no_of_room =$no_of_room+1; } }