Autor Zpráva
Manny
Profil *
Banalita, ale mám nějaké zatmění:-)
Následujícím kódem vypisuji z db 5 položek a chtěl jsem je mít na začátku očíslované. While funguje, ale for mi to nechce počítat správně.
while($zaznam=mysql_fetch_array($dotaz))

{	for ($i=1; $i<=5; $i++)

	$znamka=$zaznam["znamka"];
	if ($znamka >= 1   && $znamka <1.5 )	{$hodnoceni = "1star";}
	elseif ($znamka >= 1.5 && $znamka < 2  ){$hodnoceni = "15star";}
	elseif ($znamka >= 2   && $znamka <2.5 ){$hodnoceni = "2star";}
	elseif ($znamka >= 2.5 && $znamka < 3  ){$hodnoceni = "25star";}
	elseif ($znamka >= 3   && $znamka <3.5 ){$hodnoceni = "3star";}
	elseif ($znamka >= 3.5 && $znamka < 4  ){$hodnoceni = "35star";}
	elseif ($znamka >= 4   && $znamka <4.5 ){$hodnoceni = "4star";}
	elseif ($znamka >= 4.5 && $znamka < 5  ){$hodnoceni = "45star";}
	elseif ($znamka >= 5)					{$hodnoceni = "5star";}
	else $hodnoceni = "00star";
		
	echo '<h3>'.$i.'<a href="komiksy/galerie.php?cislo='.$zaznam["poradi"].'" target="_blank" title="Autor: '.$zaznam["autor"].', Překlad: '.$zaznam["preklad"].'">'.$zaznam["nazev"].'</a></h3> &nbsp;<img src="design/znamky/'.$hodnoceni.'.png" alt="'.$znamka.' hvězdy"><br> hvězdiček: '.$znamka.', hlasů: '.$zaznam["pocethlasovani"].'.<br>';
 }
radas
Profil *
to for by mělo uzavírat všechny podmínky a ne jen ten řádek č.5 ?
mohl by jste uvést i dotaz na db?
Cup
Profil
nějak moc to nezkoumám, ale nechybí ti u for chlupatý závorky? {}
fandaa
Profil
Manny:
vyzkoušej...
$i = 1;
while($zaznam=mysql_fetch_array($dotaz))
{   
    $znamka=$zaznam["znamka"];
    if ($znamka >= 1   && $znamka <1.5 )    {$hodnoceni = "1star";}
    elseif ($znamka >= 1.5 && $znamka < 2  ){$hodnoceni = "15star";}
    elseif ($znamka >= 2   && $znamka <2.5 ){$hodnoceni = "2star";}
    elseif ($znamka >= 2.5 && $znamka < 3  ){$hodnoceni = "25star";}
    elseif ($znamka >= 3   && $znamka <3.5 ){$hodnoceni = "3star";}
    elseif ($znamka >= 3.5 && $znamka < 4  ){$hodnoceni = "35star";}
    elseif ($znamka >= 4   && $znamka <4.5 ){$hodnoceni = "4star";}
    elseif ($znamka >= 4.5 && $znamka < 5  ){$hodnoceni = "45star";}
    elseif ($znamka >= 5)                    {$hodnoceni = "5star";}
    else $hodnoceni = "00star";
        
    echo '<h3>'.$i.'<a href="komiksy/galerie.php?cislo='.$zaznam["poradi"].'" target="_blank" title="Autor: '.$zaznam["autor"].', Překlad: '.$zaznam["preklad"].'">'.$zaznam["nazev"].'</a></h3> &nbsp;<img src="design/znamky/'.$hodnoceni.'.png" alt="'.$znamka.' hvězdy"><br> hvězdiček: '.$znamka.', hlasů: '.$zaznam["pocethlasovani"].'.<br>';
    $i++;
 }
Manny
Profil *
fandaa:
No jo, fuguje. Jak jednoduché. Nějak jsem se upnul k tomu for a tohle je super.
tiso
Profil
Manny: miesto tej if/elseif brutality môžeš spraviť niečo takéto:
$hodnoceni=(($znamka < 1) ? '00' : str_replace('.', '', min(10, floor($znamka * 2)) / 2)).'star';
výsledok bude ten istý.
imploder
Profil
Manny:
for je v podstatě takový mocnější while, tady se dá dobře použít na celý cyklus:
for($i=1; $zaznam=mysql_fetch_array($dotaz); $i++)
{   
    $znamka=$zaznam["znamka"];
    if ($znamka >= 1   && $znamka <1.5 )    {$hodnoceni = "1star";}
    elseif ($znamka >= 1.5 && $znamka < 2  ){$hodnoceni = "15star";}
    elseif ($znamka >= 2   && $znamka <2.5 ){$hodnoceni = "2star";}
    elseif ($znamka >= 2.5 && $znamka < 3  ){$hodnoceni = "25star";}
    elseif ($znamka >= 3   && $znamka <3.5 ){$hodnoceni = "3star";}
    elseif ($znamka >= 3.5 && $znamka < 4  ){$hodnoceni = "35star";}
    elseif ($znamka >= 4   && $znamka <4.5 ){$hodnoceni = "4star";}
    elseif ($znamka >= 4.5 && $znamka < 5  ){$hodnoceni = "45star";}
    elseif ($znamka >= 5)                    {$hodnoceni = "5star";}
    else $hodnoceni = "00star";
        
    echo '<h3>'.$i.'<a href="komiksy/galerie.php?cislo='.$zaznam["poradi"].'" target="_blank" title="Autor: '.$zaznam["autor"].', Překlad: '.$zaznam["preklad"].'">'.$zaznam["nazev"].'</a></h3> &nbsp;<img src="design/znamky/'.$hodnoceni.'.png" alt="'.$znamka.' hvězdy"><br> hvězdiček: '.$znamka.', hlasů: '.$zaznam["pocethlasovani"].'.<br>';
 }


Dělá to to samé jako fandoova verze, jenom je $i=1 a $i++ dané do hlavičky for a ne jen tak do while. Je to takové čistější. Jinak se dá samozřejmě použít i while, vlastně for na programování vůbec nepotřebuješ, stačí while. For ale kód zpřehledňuje.
Joker
Profil
imploder:
Je to takové čistější.
No, mně to přijde méně intuitivní.
imploder
Profil
Joker:
No, mně to přijde méně intuitivní.
No, tak je to pokročilejší konstrukce jazyka. Pro začátečníka je nejintuitivnější while, protože je nejjednodušší. For je přehlednější v tom, že logika cyklu (inicializace, podmínka, krok) je na jednom místě, ne roztahaná na 3 různých místech.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0