Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] System glosowania i błąd
Mlodycompany
post 24.04.2008, 14:32:32
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
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post 24.04.2008, 14:36:44
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mlodycompany
post 24.04.2008, 14:37:52
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 24.04.2008, 14:39:17
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 24.04.2008, 14:40:16
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mlodycompany
post 24.04.2008, 14:53:40
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 24.04.2008, 14:55:56
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 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. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kicok
post 24.04.2008, 19:23:48
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ść 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. ?>


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 22:57