Autor | Zpráva | ||
---|---|---|---|
Mufna Profil |
#1 · Zasláno: 19. 1. 2009, 01:31:24
Zdravím Vás. Tak jsem si poprvé ověřoval, jakou hodnotu $i mi vypíše cyklus while, a docela mě to dostalo. Čekal jsem hodnoty 1,2,3 atd., příp. 0,1,2,3 atd., místo toho jsou to hodnoty 1,3,5,7,9 a 11 pro celkem 6 nalezených položek v DB. To je normální ? Navazuje to na moje můj dotaz zde. Kromě toho, že jsem chtěl po každé 3. položce uzavřít <div> a otevřít nový, tak taky potřebuju (snažím se o to, ale zatím marně) ošetřit, aby když poslední položkou bude nějaká "dělitelná 3" - což právě teď mám - 6 - aby už nový <div> nezačínal. Přemýšlel jsem o tom, že si to ošetřím tak, že nejprve spočítám počet nalezených položek z výsledku dotazu a pak v něm najdu nejbližší nižší hodnotu dělitelnou 3 a tu pak použiju do podmínky if. Ale než jsem se pustil do vytváření tohoto, tak jsem zkusil použít hodnotu 11, tedy poslední $i, ale očekávaný výsledek se jaksi nedostavil - nevím proč. Nový <div> začne.
Už mi z toho začíná hrabat. Takto vypadá celý kód následující po dotazu na DB $i=0; echo "\n".'<!-- Div Start -->'."\n"; echo '<div class="floatImages">'."\n"; while ($row=mysql_fetch_array($res)) { $i++; echo $i; show_items($row); if ($i++%3==2 && !($i==11)) { echo '</div>'."\n"; echo '<div class="cleaner"><hr /></div>'."\n"; echo '<!-- Div End -->'."\n"; echo "\n".'<!-- Div Start -->'."\n"; echo '<div class="floatImages">'."\n"; } } echo '</div>'."\n"; echo '<div class="cleaner"><hr /></div>'."\n"; echo '<!-- Div End -->'."\n"; |
||
Chamurappi Profil |
#2 · Zasláno: 19. 1. 2009, 01:34:49
Reaguji na Mufnu:
V té zvýrazněné části zvyšuješ proměnnou „$i“. Máš tam $i++ a o tři řádky výše také, proto skáčeš po dvou. |
||
Mufna Profil |
#3 · Zasláno: 19. 1. 2009, 01:56:29
Chamurappi
ó díky, spáso, konečně jsem se alespoň někam pohnul. Už jsem z toho byl na nervy. Teď je $i OK, ještě 100% nevím jak ten <div> |
||
Mufna Profil |
#4 · Zasláno: 19. 1. 2009, 03:04:19 · Upravil/a: Mufna
Tak jsem si ošetřil další podmínkou (možná je to nešikovný či krkolomný, ale hlavně to teď funguje) to, když by náhodou 3,6,9 atd. byly poslední, aby se <div> neotvíral. Ale pořád nevím (a ta Alphardova rada není OK - tak to prostě nefunguje), jak udělat nějak šikovně vnitřní podmínku. Logicky bych ji zapsal jako "Pokud $i je dělitelné 3 beze zbytku", ale nevím jak a zda vůbec to lze takto v PHP zapsat.
EDIT: Možná jsem zapomněl zmínit, že ty <divy> se zobrazují pod sebou, do nich se načítají další divy (to jsou právě ty tři - jejich kód je ve funkci show_reference2() ) a těch "vnějších" divů vždy se 3 vnitřními divy může být v podstatě nekonečně mnoho. EDIT 1: V podstatě mi u té zatím nevyhovujíví podmínky jde o to, jak pokud možno jednoduše zapsat "když $i je 3 nebo 6 nebo 9 nebo 12 atd - tzn. když je násobkem trojky - a třeba zatím do určitého omezení, řekněme třeba 100, resp. 99" $num_rows = mysql_num_rows($res); $i=0; echo "\n".'<!-- Logo reference table Start -->'."\n"; echo '<div class="floatImages">'."\n"; while ($row=mysql_fetch_array($res)) { $i++; show_reference_2($row); if ($i != $num_rows) { if ($i%3==2) { bohužel tohle není pro můj případ správně echo '</div>'."\n"; echo '<div class="cleaner"><hr /></div>'."\n"; echo '<!-- Logo reference table End -->'."\n"; echo "\n".'<!-- Logo reference table Start -->'."\n"; echo '<div class="floatImages">'."\n"; } } } Poradíte mi ještě někdo ? Předem díky, rád bych tuhle záležitost uzavřel a pohnul se zase dál |
||
tiso Profil |
#5 · Zasláno: 19. 1. 2009, 03:21:17
Mufna - tak si ho otvor kedy potrebuješ a zatvor kedy potrebuješ...
|
||
Mufna Profil |
#6 · Zasláno: 19. 1. 2009, 03:27:00
tiso
tak si ho otvor kedy potrebuješ a zatvor kedy potrebuješ Hm, to je sice hezká rada, ale bez bližšího vysvětlení co tím máš na mysli je mi dost na prd. Samozřejmě můžu třeba zapsat: if ($i==3 || $i==6 || $i==9 atd.) ale ptám se tady proto, zda to nejde nějak elegantněji |
||
Tomasds Profil |
#7 · Zasláno: 19. 1. 2009, 03:36:14
Mufna
Nechce se mně v tuto hodinu nějak podrobně studovat tvou slohovou práci, ale když vidím tvoje 3 6 9, tak mám pocit, že potřebuješ modulo. místo if ($i==3 || $i==6 || $i==9 atd.) použij if ($i%3==0) |
||
tiso Profil |
#8 · Zasláno: 19. 1. 2009, 03:36:29
$i=0; while ($row=mysql_fetch_array($res)) { if ($i%3 == 0){echo '<div class="floatImages">';} $i++; show_reference_2($row); if ($i % 3 == 0){echo '</div><div class="cleaner"><hr /></div>';} } if ($i % 3 != 0){echo '</div><div class="cleaner"><hr /></div>';} Máš za čo! |
||
Mufna Profil |
#9 · Zasláno: 19. 1. 2009, 03:46:01
if ($i%3==0)
ANO, to jsem potřeboval. A sorry, že jsem s tím otravoval, už mi to moc nemyslelo. Díky. |
||
Časová prodleva: 15 let
|
0