Autor Zpráva
Mufna
Profil
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
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
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
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
Mufna - tak si ho otvor kedy potrebuješ a zatvor kedy potrebuješ...
Mufna
Profil
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
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
$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
if ($i%3==0)

ANO, to jsem potřeboval. A sorry, že jsem s tím otravoval, už mi to moc nemyslelo. Díky.

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: