Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] System glosowania i błąd
Forum PHP.pl > Forum > Przedszkole
Mlodycompany
Witam. Mam skrypt oceniania filmow na stronie.
  1. <?
  2. $glosy = mysql_query("SELECT * FROM `filmy_glosy` WHERE `ID` = '".$_GET['film']."'");
  3. while($row = mysql_fetch_array($glosy)){
  4. $wartosc = ($row[1] * 1) + ($row[2] * 2) + ($row[3] * 3) + ($row[4] * 4) + ($row[5] * 5) + ($row[6] * 5) + ($row[6] * 6) + ($row[7] * 7) + ($row[8] * 8) + ($row[9] * 9) + ($row[10] * 10);
  5. $suma_glosow = $row[1] + $row[2] + $row[3]+ $row[4]+ $row[5]+ $row[6]+ $row[7]+ $row[8]+ $row[9]+ $row[10];
  6. $srednia = $wartosc / $suma_glosow; // linia 39
  7. if($srednia != 0){
  8. echo('<tr class=naglowek3><th>Głosów</th><th>'.$suma_glosow.'</th></tr>');
  9. echo('<tr class=naglowek2><th>Średnia Głósów</th><th>'.round ($srednia , 2).'</th></tr>');
  10. }
  11. }
  12. <tr class=naglowek3>
  13. <th>Oceń Film</th>
  14. <th>
  15. <a href="index.php?film='.$_GET['film'].'&vote=1">1</a>
  16. <a href="index.php?film='.$_GET['film'].'&vote=2">2</a>
  17. <a href="index.php?film='.$_GET['film'].'&vote=3">3</a>
  18. <a href="index.php?film='.$_GET['film'].'&vote=4">4</a>
  19. <a href="index.php?film='.$_GET['film'].'&vote=5">5</a>
  20. <a href="index.php?film='.$_GET['film'].'&vote=6">6</a>
  21. <a href="index.php?film='.$_GET['film'].'&vote=7">7</a>
  22. <a href="index.php?film='.$_GET['film'].'&vote=8">8</a>
  23. <a href="index.php?film='.$_GET['film'].'&vote=9">9</a>
  24. <a href="index.php?film='.$_GET['film'].'&vote=10">10</a>
  25. </th>
  26. </tr>
  27. </table>
  28. ');
  29.  
  30. if($_GET['vote'] != ""){
  31. $glosy = mysql_query("SELECT * FROM `filmy_glosy` WHERE `ID` = '".$_GET['film']."'");
  32. $ilosc = mysql_num_rows($glosy);
  33. while($glos = mysql_fetch_array($glosy)){
  34. echo $glos[$_GET['vote']];
  35.  
  36. $glos_dodaj = $glos[$_GET['vote']] + 1;
  37. $vote = mysql_query("UPDATE `filmy_glosy` SET `".$_GET['vote']."` = '".$glos_dodaj."' WHERE `ID` = '".$_GET['film']."'");
  38. if($vote){
  39. header("Location: index.php?film=".$_GET['film']."#");
  40. }
  41. }
  42. }
  43. ?>

i jezeli w tabeli filmy_glosy mam wszystkie wartosci '0' oprocz id to wyskakuje mi taki bład:Warning: Division by zero in c:\usr\www\filmy\film.php on line 39. Od czego to zależy i jak sie tego pozbyc??
nospor
No pomysl troche.
$srednia = $wartosc / $suma_glosow;
Przeciez jesli masz same zera to dzielisz przez 0. Nie uczyli cie w szkole ze nie wolno dzielic przez zero?
Daj warunek na sume glosow ze jesli jest rowna zero to srednia tez jest zero juz bez wyliczania
Mlodycompany
no tez prawda, ale na zdrowy rozsadek wartosc powinna byc pokazana jako 0.
webdice
Przenoszę na przedszkole.
nospor
Cytat
ale na zdrowy rozsadek wartosc powinna byc pokazana jako 0.
Nie, ponieważ nie wolno dzielic przez zero. Takie prawa matematyki. Kazdy jezyk programowania w takim wypadku wypluje ci bledem.
Mlodycompany
no dobrze. zrobilem tak jak mowisz, ale to tez nie jest idealne rozwiazanie poniewaz srednia nie jest pokazywana. pokazuje ilosc glosow, a srednia jest '0'
  1. <?php
  2. $glosy = mysql_query("SELECT * FROM `filmy_glosy` WHERE `ID` = '".$_GET['film']."'");
  3. while($row = mysql_fetch_array($glosy)){
  4. $wartosc = ($row[1] * 1) + ($row[2] * 2) + ($row[3] * 3) + ($row[4] * 4) + ($row[5] * 5) + ($row[6] * 5) + ($row[6] * 6) + ($row[7] * 7) + ($row[8] * 8) + ($row[9] * 9) + ($row[10] * 10);
  5. $suma_glosow = $row[1] + $row[2] + $row[3]+ $row[4]+ $row[5]+ $row[6]+ $row[7]+ $row[8]+ $row[9]+ $row[10];
  6. $srednia = $wartosc / $suma_glosow;
  7. if($suma != 0 && $wartosc != 0){
  8. $srednia = $wartosc / $suma_glosow;
  9. }
  10. echo('<tr class=naglowek3><th>Głosów</th><th>'.$suma_glosow.'</th></tr>');
  11. echo('<tr class=naglowek2><th>Średnia Głósów</th><th>'.$srednia.'</th></tr>');
  12. }
  13. ?>
nospor
Nie, zrobiles inaczej niz ci mowilem a na dodatek pomyliles nazwy zmiennych tongue.gif Jak można popelniac bledy przy takich pierdulach? Jak ci nie wychodzi to pomysl troche dluzej na przyszlosc a nie od razu na forum walisz. Jak sam dojdziesz gdzie masz blad to dla ciebie wyjdzie z wiekszym pozytkiem

  1. <?php
  2. $glosy = mysql_query("SELECT * FROM `filmy_glosy` WHERE `ID` = '".$_GET['film']."'");
  3. while($row = mysql_fetch_array($glosy)){
  4. $wartosc = ($row[1] * 1) + ($row[2] * 2) + ($row[3] * 3) + ($row[4] * 4) + ($row[5] * 5) + ($row[6] * 5) + ($row[6] * 6) + ($row[7] * 7) + ($row[8] * 8) + ($row[9] * 9) + ($row[10] * 10);
  5. $suma_glosow = $row[1] + $row[2] + $row[3]+ $row[4]+ $row[5]+ $row[6]+ $row[7]+ $row[8]+ $row[9]+ $row[10];
  6. if($suma_glosow != 0){
  7. $srednia = $wartosc / $suma_glosow;
  8. } else
  9. $srednia = 0;
  10. echo('<tr class=naglowek3><th>Głosów</th><th>'.$suma_glosow.'</th></tr>');
  11. echo('<tr class=naglowek2><th>Średnia Głósów</th><th>'.$srednia.'</th></tr>');
  12. }
  13. ?>
Kicok
Cytat(batman)
Można dzielić przez zero. Wynikiem dzielenia przez zero jest nieskończoność smile.gif

Niekoniecznie.



~Mlodycompany - nie lepiej byłoby ci używać takiej struktury tabeli filmy_glosy:
Kod
+------------+--------+
|  ID_filmu  |  glos  |
+------------+--------+
|     1      |   10   |
|     1      |    9   |
|     1      |    9   |
|     1      |    1   |
|     1      |   10   |
|     2      |    7   |
|     2      |    8   |
(...)

Dodawanie nowego głosu to zwykły INSERT, a obliczanie średniej jest jeszcze prostsze:
  1. <?php
  2.  
  3. // $_POST['ID_filmu'] = 1
  4. $query = 'SELECT AVG( glos ) AS srednia FROM filmy_glosy WHERE ID_filmu = ' . intval( $_POST['ID_filmu'] );
  5. $result = mysql_query( $query ) or die( mysql_error() );
  6.  
  7. $row = mysql_fetch_row( $result );
  8. $srednia = $row['srednia'];
  9.  
  10. echo $srednia; // 7,8
  11.  
  12. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.