2010-01-16 18 views
7

Sigo recibiendo el siguiente error y me preguntaba cómo solucionarlo.Error fatal: tipos de operandos no admitidos

Fatal error: Unsupported operand types on line 97 

Es alrededor de esta área del código que se enumera a continuación. Puedo listar el código completo si es necesario.

código 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)'; 
} 

Aquí es la línea 97

$avg = (round($total_rating_points/$total_ratings,1)); 

Aquí está el código completo.

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)'; 
    } 
} 

Respuesta

18

$total_rating_points es una matriz. no puedes dividirlo por un número.

+0

¿cómo puedo solucionar esto porque tengo que dividir $ total_rating_points/$ TOTAL_RATINGS – tEcHnUt

+1

$ TOTAL_RATINGS [0]/$ total_rating_points [0]. También es posible que desee comprobar si Count (*) es la función de agregación correcta para ambas consultas. – VolkerK

1

Esto generalmente se produce cuando el tipo de una de sus variables es algo que no se espera que sea.

$x = "8"; 
$y = 4; 
$x/$y; // this is OK, PHP converts "8" to 8 

$x = new FooObject(); 
$y = 4; 
$x/$y; // PHP says "wtfmate??" 

Vuelca las variables $total_rating_points y $total_ratings:

var_dump($total_rating_points); 
var_dump($total_ratings); 

.. luego trabajar hacia atrás a través de su código (comprobación debug_backtrace() si es necesario) para encontrar donde salió mal.

Edit: duhhh .. Acabo de ver su código de nuevo y vi el problema. El $total_rating_points es una matriz, y esta es la causa del problema. ¿Cómo se divide una matriz por un número? Respuesta: no puedes.

¿Desea dividir cada uno de los miembros de la matriz entre $total_ratings? por ejemplo:

// 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; 
} 

... ¿o quiere dividir el total?

input: [2, 4, 6, 16]/2 
output: 14 // (2 + 4 + 6 + 16)/2 

function divideTotal($arr, $denominator) { 
    return array_sum($arr)/$denominator. 
} 
2

(editado desde la consulta de MySQL se añadió a la pregunta)

Usted ha utilizado mysql_fetch_array para obtener su resultado de MySQL, como el nombre sugiere que este devuelve una matriz. No se puede hacer una matemática así en las matrices.

desea cambiar su consulta MySQL a esto:

$sql1 = "SELECT COUNT(*) as count 
     FROM articles_grades 
     WHERE users_articles_id = '$page'"; 

cambiar su código mysql_fetch_array a esto:

$total_rating_points = mysql_result($result, 0, "count"); 

que devolverá el número real, que luego se puede utilizar para las matemáticas. Cambie ambas consultas a este formato y debería estar listo para continuar.

1

Utilice array_sum() en $total_rating_points y $total_ratings.

0
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; 

     } 
    } 
+0

Error fatal: tipos de operandos no soportados (viene así) – pradeep

Cuestiones relacionadas