Autor | Zpráva | ||
---|---|---|---|
David1256 Profil |
#1 · Zasláno: 17. 1. 2011, 20:14:29 · Upravil/a: David1256
Dobrý den, jsem začátečník s mysql a mé první pokusy se snažím aplikovat na hodnocení článků atd. pomocí hvězdiček.
Jenže se mi vyskytlo pár problému, které jsou pro přehlednost okomentovány ve zdrojovém kódu. Jde mi hlavně o to, jak přiřadit do proměnné hodnotu určité buňky tabulky z databáze a jak odeslat data do určité buňky v databázi. Moje databáze: Můj script: <form method="POST"> <blockquote> 0<input type=radio name=oznaceno value=0> 1<input type=radio name=oznaceno value=1> 2<input type=radio name=oznaceno value=2> 3<input type=radio name=oznaceno value=3> <!-- Jak po stisknutí "Zhodnotit" přiřadit do buňky tabulky --> 4<input type=radio name=oznaceno value=4> <!-- se součtem hodnocení soucet_hodnoceni+oznaceno a --> 5<input type=radio name=oznaceno value=5> <!-- zároveň do buňky s počtem hodnocení pocet_hodnoceni+1 ? --> </blockquote> <input type=submit value="Zhodnotit"> <?php $spojeni = MySQL_connect("mysql.webzdarma.cz","mojedatabase","pass"); $pocet_hodnoceni = ;//přiřadit buňku tabulky s počtem hodnocení $soucet_hodnoceni = ;//přiřadit buňku tabulky se součtem hodnocení $soucet_hodnoceni/$pocet_hodnoceni=$prumer_hodnoceni; if($prumer_hodnoceni<0.5) echo "<img src="img/zadnahvezda">"; else if($prumer_hodnoceni<1.5) echo "<img src="img/jednahvezda">"; else if($prumer_hodnoceni<2.5) echo "<img src="img/dvehvezdy">"; else if($prumer_hodnoceni<3.5) echo "<img src="img/trihvezdy">"; else if($prumer_hodnoceni<4.5) echo "<img src="img/ctyrihvezdy">"; else if($prumer_hodnoceni<5) echo "<img src="img/pethvezd">"; ?> </form> Doufám že je pochopitelné, na co se ptám. |
||
Radek Cvek Profil |
#2 · Zasláno: 17. 1. 2011, 20:53:14 · Upravil/a: Radek Cvek
Data se získávají pomocí SELECT...
$ID_hodnoceni=1; $vysledek=mysql_query("SELECT pocet_hodnoceni, soucet_hodnoceni FROM nazev_tabulky WHERE ID_hodnoceni='".$ID_hodnoceni."' ;"); if ($zaznam=MySQL_Fetch_Array($vysledek)){ $pocet_hodnoceni = $zaznam["pocet_hodnoceni"]; $soucet_hodnoceni = $zaznam["soucet_hodnoceni"]; } ...a ukládají pomocí INSERT $vysledek=mysql_query("INSERT into nazev_tabulky SET soucet_hodnoceni='".($_POST["oznaceno"]+$soucet_hodnoceni)."', pocet_hodnoceni='".($pocet_hodnoceni+1)."' ;"); |
||
pcmanik Profil |
#3 · Zasláno: 17. 1. 2011, 20:58:58 · Upravil/a: pcmanik
Podla mojho nazoru mas zly navrch databazy, ja by som to riesil takto:
id_niecoho hodnotenenie A priemer by som si spocital tak, ze by som dal selecet vsetkych id, kde sa rovnaju, scital by som hodnotenie, a to nasledne vydelil tym suctom id, tak by ti vysiel priemer Radek Cvek: Mas zlu syntaz, v query mas naviac ; Je zbytocne pouzit '".$ID_hodnoceni."' staci '$ID_hodnoceni' A tvoj cyklus while je absolutne zly, a nebude fungovat.... |
||
Tori Profil |
#4 · Zasláno: 17. 1. 2011, 21:03:19
Radek Cvek:
máte v kódu if místo while |
||
Radek Cvek Profil |
#5 · Zasláno: 17. 1. 2011, 21:05:48 · Upravil/a: Radek Cvek
Tori:
Myslel jsem to tak, že ID_hodnoceni je id jednoho konkrétního článku a pak vybírám údaje jenom pro tento článek SELECT pocet_hodnoceni, soucet_hodnoceni FROM nazev_tabulky WHERE ID_hodnoceni= - ne pro všechny |
||
pcmanik Profil |
#6 · Zasláno: 17. 1. 2011, 21:07:02 · Upravil/a: pcmanik
Radek Cvek:
To ale nema nic spolocne s tym ze tam mas if namiesto while... |
||
Radek Cvek Profil |
#7 · Zasláno: 17. 1. 2011, 21:14:02
pcmanik:
aha endwhile - opravím to |
||
Tori Profil |
#8 · Zasláno: 17. 1. 2011, 21:17:17
pcmanik:
Proč ten návrh DB považujete za špatný? Pokud má být dohledatelné, jak hodnotili konkrétní uživatelé, tak bych to použila, ale pokud je to jen jednoduché hodnocení (každý i anonymní uživ. může hodnotit kolikrát chce), tak by stačilo mít jeden řádek na jeden hodnocený článek/foto/atd. |
||
Radek Cvek Profil |
#9 · Zasláno: 17. 1. 2011, 21:20:47
Tori:
Souhlas - a bude tam jenom tolik řádků, kolik je článků. Nebude tam zbytečně tolik řádků, kolikrát se hlasovalo. |
||
Tori Profil |
#10 · Zasláno: 17. 1. 2011, 21:24:20 · Upravil/a: Tori
David1256:
Tohle: if($prumer_hodnoceni<0.5) echo "<img src="img/zadnahvezda">"; else if($prumer_hodnoceni<1.5) echo "<img src="img/jednahvezda">"; atd. atd. if ($prumer_hodnoceni<0.5) $img = 'zadnahvezda'; elseif ($prumer_hodnoceni<1.5) $img = 'jednahvezda'; elseif ($prumer_hodnoceni<2.5) $img = 'dvehvezdy'; elseif ($prumer_hodnoceni<3.5) $img = 'trihvezdy'; elseif ($prumer_hodnoceni<4.5) $img = 'ctyrihvezdy'; else $img = 'pethvezd'; echo '<img src="img/'.$img.'">'; |
||
Alphard Profil |
#11 · Zasláno: 17. 1. 2011, 21:33:27
Tori:
„se dá i zkrátit:“ Když přejmenujete obrázky, jde to ještě víc zkrátit. echo '<img src="img/'.floor($prumer_hodnoceni).'_stars.png">'; David1256: Jestli netrváte na vlastním řešení, existuje hromada hotových scriptů. |
||
Radek Cvek Profil |
#12 · Zasláno: 17. 1. 2011, 21:39:22
anebo na jeden řádek (s obrázkem s jednou hvězdičkou):
for ($i = 1; $i <= round($prumer_hodnoceni); $i++) echo '<img src="img/jednahvezdicka.jpg">'; |
||
Radek Cvek Profil |
#13 · Zasláno: 17. 1. 2011, 21:40:37
Alphard:
anebo tak |
||
David1256 Profil |
#14 · Zasláno: 18. 1. 2011, 17:02:25 · Upravil/a: David1256
Tak mám ten kód nějak takto, ale pořád to asi nechápu, protože mi to nejde.
<form method="POST"> <blockquote> 0<input type=radio name=oznaceno value=0> 1<input type=radio name=oznaceno value=1> 2<input type=radio name=oznaceno value=2> 3<input type=radio name=oznaceno value=3> 4<input type=radio name=oznaceno value=4> 5<input type=radio name=oznaceno value=5> </blockquote> <input type=submit value="Zhodnotit"> <?php $spojeni = MySQL_connect("mysql.webzdarma.cz","mojedatabase","pass"); $ID_hodnoceni=1; $vysledek=mysql_query("SELECT pocet_hodnoceni, soucet_hodnoceni FROM hodnoceni WHERE ID_hodnoceni='".$ID_hodnoceni."' ;"); //do proměnné $vysledek přiřadí buňky soucet_honoceni, pocet_hodnoceni, s ID_hodnoceni = 1, což potřebuji if ($zaznam=MySQL_Fetch_Array($vysledek)){ // Proč je tady if? Chápal bych to bez if, to by znamenalo, že ty mé 2 buňky převedu jako prvky pole proměnné záznam, ale s tím if mi to není jasné $pocet_hodnoceni = $zaznam["pocet_hodnoceni"]; // do proměné $pocet_hodnoceni přiřadí hodnotu pole $záznam počet hodnocení, což potřebuji $soucet_hodnoceni = $zaznam["soucet_hodnoceni"];} //obdobné $vysledek=mysql_query("INSERT into hodnoceni SET soucet_hodnoceni='".($_POST["oznaceno"]+$soucet_hodnoceni)."', pocet_hodnoceni='".($pocet_hodnoceni+1)."' ;"); // do potřebných buňek připočte potřebné hodnoty z formuláře $soucet_hodnoceni/$pocet_hodnoceni=$prumer_hodnoceni; if($prumer_hodnoceni<0.5) echo "<img src="img/zadnahvezda">"; else if($prumer_hodnoceni<1.5) echo "<img src="img/jednahvezda">"; else if($prumer_hodnoceni<2.5) echo "<img src="img/dvehvezdy">"; else if($prumer_hodnoceni<3.5) echo "<img src="img/trihvezdy">"; else if($prumer_hodnoceni<4.5) echo "<img src="img/ctyrihvezdy">"; else if($prumer_hodnoceni<5) echo "<img src="img/pethvezd">"; ?> </form> Také mi to hlásí chybu :Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /3w/wz.cz/f/funradio/hodnoceni.php on line 21 |
||
jenikkozak Profil |
#15 · Zasláno: 18. 1. 2011, 17:13:18
David1256:
echo "<img src='img/zadnahvezda'>"; Vnitřní uvozovky nahraď apostrofy a máš klid. A mimochodem, nemají ty soubory mít koncovku? Třeba img/jednahvezda.png? |
||
David1256 Profil |
#16 · Zasláno: 18. 1. 2011, 17:29:59 · Upravil/a: David1256
jenikkozak:
Díky. Pořád mi to ale nefunguje viz.Odkaz Script je stejný jako v #15, jen jsou upravené ty apostrofy u obrázků, jak mi poradil jenikkozak. Celou tu nefunkčnost způsobuje asi funkce mysql_fetch_array() |
||
Časová prodleva: 3 dny
|
|||
pcmanik Profil |
#17 · Zasláno: 21. 1. 2011, 19:56:43
David1256:
Tak si nedomyslaj, ale pozri sa na svoj insert... |
||
David1256 Profil |
#18 · Zasláno: 23. 1. 2011, 17:21:37 · Upravil/a: David1256
Tak jsem lecos opravil do asi této podoby:
<?php $spojeni = MySQL_connect("mysql.webzdarma.cz","mojedb","heslo"); mysql_select_db('mojedb', $spojeni); $ID_hodnoceni=1; $vysledek=mysql_query("SELECT pocet_hodnoceni, soucet_hodnoceni FROM hodnoceni WHERE ID_hodnoceni='".$ID_hodnoceni."' ;"); $zaznam=MySQL_Fetch_Array($vysledek); echo mysql_error(); $pocet_hodnoceni = $zaznam["pocet_hodnoceni"]; $soucet_hodnoceni = $zaznam["soucet_hodnoceni"]; $vysledek=mysql_query("UPDATE hodnoceni SET soucet_hodnoceni='".($_POST["oznaceno"]+$soucet_hodnoceni)."', pocet_hodnoceni='".($pocet_hodnoceni+1)."' ;"); $soucet_hodnoceni/$pocet_hodnoceni=$prumer_hodnoceni; if($prumer_hodnoceni<1.5) echo "<img src='img/1.png'>"; else if($prumer_hodnoceni<2.5) echo "<img src='img/2.png'>"; else if($prumer_hodnoceni<3.5) echo "<img src='img/3.png'>"; else if($prumer_hodnoceni<4.5) echo "<img src='img/4.png'>"; else if($prumer_hodnoceni<5) echo "<img src='img/5.png'>"; ?> Data se do databáze ukládají, ale píše mi to chybu Warning: Division by zero in /3w/wz.cz/f/funradio/hodnoceni.php on line 19 zde 10. Přitom se nulou nedělí, v databázi je pocet_hodnoceni 8. Tak proč to hází tu chybu? |
||
xmark Profil |
#19 · Zasláno: 23. 1. 2011, 17:27:25
$prumer_hodnoceni = $soucet_hodnoceni/$pocet_hodnoceni; |
||
David1256 Profil |
#20 · Zasláno: 23. 1. 2011, 17:36:59
Díky moc, to jsem netušil, že PHP vadí toto obrácené.
|
||
Tori Profil |
#21 · Zasláno: 23. 1. 2011, 18:29:59
David1256:
To není obráceně. V tom chybovém řádku se nejdřív proměnné $pocet_hodnoceni přiřazuje hodnota nedefinované proměnné $prumer_hodnoceni - tedy nula, a pak se teprve dělí výsledkem přiřazení. |
||
Časová prodleva: 13 let
|
0