Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] System glosowania i błąd
Mlodycompany
post
Post #1





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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??
Powód edycji: Dodałem tag. /webdicepl
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #3





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


no tez prawda, ale na zdrowy rozsadek wartosc powinna byc pokazana jako 0.
Go to the top of the page
+Quote Post
webdice
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Przenoszę na przedszkole.
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #6





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie, zrobiles inaczej niz ci mowilem a na dodatek pomyliles nazwy zmiennych (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
Kicok
post
Post #8





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Cytat(batman)
Można dzielić przez zero. Wynikiem dzielenia przez zero jest nieskończoność (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:20