Autor Zpráva
David1256
Profil
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
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
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
Radek Cvek:
máte v kódu if místo while
Radek Cvek
Profil
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
Radek Cvek:

To ale nema nic spolocne s tym ze tam mas if namiesto while...
Radek Cvek
Profil
pcmanik:
aha endwhile - opravím to
Tori
Profil
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
Tori:
Souhlas - a bude tam jenom tolik řádků, kolik je článků. Nebude tam zbytečně tolik řádků, kolikrát se hlasovalo.
Tori
Profil
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.
se dá i zkrátit:
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.'">';
Ale není to žádná chyba. Jen mi to subjektivně připadá přehlednější.
Alphard
Profil
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
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
Alphard:
anebo tak
David1256
Profil
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
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
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()
pcmanik
Profil
David1256:
Tak si nedomyslaj, ale pozri sa na svoj insert...
David1256
Profil
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
$prumer_hodnoceni = $soucet_hodnoceni/$pocet_hodnoceni;
David1256
Profil
Díky moc, to jsem netušil, že PHP vadí toto obrácené.
Tori
Profil
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í.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: