Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok NapísalOffline : 12.10.2008 15:41

Nazdarek. Nasiel som si taky to kod na zobrazenie obrazkov v galerii.

Kód:
$numRows = mysql_num_rows($result);

if ($result) {

echo "
<table width=\"300px\" border=\"1\">
<tr>
<td width=\"100px\" valign=\"top\"><b>Náhlad<b></td>
<td align=\"left\"><b>Názov</b></td>
</tr>
";


$riadok = 0;

while ($row = mysql_fetch_assoc($result)) {
$obrazok = ($row['subor']);
$id= ($row['id]);
if ($riadok == 0) echo "<tr>\n";
echo "
<td>
<img src=\"./obrazky/$obrazok\" align=\"left\" width=\"100\">
</td>
<td valign=\"top\">{$row['info']}</td>\n";
if ($riadok == ($numRows - 1)) echo "</tr>\n";
else if ($riadok != 0 && $riadok % 2) echo "</tr>\n<tr>\n";

$riadok++;

}
echo "</table>";


Lenze tento kod vlastne vypisuje obrazky do 2 stlpcov. Nemohol by mi niekto poradit ako ho upravit aby mi to vypisovalo do 3 alebo viac stlpcov??
A este jedna vec. Co presne znamena, alebo robi tento prikaz?? :
Kód:
if ($riadok == ($numRows - 1)) echo "</tr>\n";
else if ($riadok != 0 && $riadok % 2) echo "</tr>\n


Zvlast ma zaujima ($numRows - 1) a && $riadok % 2. Co znamena ten znak % 2 ??
Dik za odpovede..


Offline

Užívateľ
Užívateľ
Vysvetlenie kodu na galeriu

Registrovaný: 26.07.06
Prihlásený: 20.03.16
Príspevky: 1378
Témy: 90
Bydlisko: Slovakia-Ko...
Príspevok NapísalOffline : 12.10.2008 15:58

niesom velmi zbezny "uz" v tychto kodoch
if ($riadok == ($numRows - 1)) echo "</tr>\n";
ked premenna riadok sa rovna ciselny vytazok z datababazy(zrejma nevidim co to je ale iba podla sposobu) minus jednej, tak potom vypise </tr> a novy riadok

else if ($riadok != 0 && $riadok % 2) echo "</tr>\n";
alebo ak premenna riadok sa nerovna nule a zaroven premenna riadok je cislo delitelne 2(myslim ze percento 2 znamena cislo delitelne 2 tj bez zvysku), tak potom vipise </tr> a novy riadok

mozno je to chybne alebo z uplne inej strany opisane







_________________
CPU: Intel E7200 momentalne default + freezer 7 pro | MB: Gigabyte GA-P35-DS3 rev. 2.0 F14 | RAM: A-DATA 4x1GB EE Vitesta | VGA: ATI Radeon HD4850 Sapphire Dual Slot | Monitor: BenQ E2200HD+17CTX | HDD: WD 3200AAKS + Maxtor 6Y080M0 80GB SATAII + 120GB ATA Barracuda | PSU: Corsair VX450W | Windows 7 Ultimate Sk | REPRO: Logitech X-210
+
IPhone 3GS JB 3.1.3 (new BR)
múdry sa postara o seba ale ešte múdrejši sa postara aj o druhých
Offline

Skúsený užívateľ
Skúsený užívateľ
Vysvetlenie kodu na galeriu

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35
Bydlisko: BA - WESTSIDE
Príspevok NapísalOffline : 12.10.2008 19:38

Tak si to rozoberme:
Kód:
$riadok != 0 && $riadok % 2
Dá sa to rozdeliť na dva podvýrazy:
Kód:
($riadok != 0) && ($riadok % 2)
Prvý výraz vráti true, ak sa hodnota v premennej $riadok nerovná nule (resp. inej hodnote ekvivalentnej s nulou, viac tu), inak vráti false a vyhodnocovanie celého výrazu sa tak ukončí (ak sa výraz skladá z viacerých výrazov spojených spojkou && [and, "a zároveň"] a prvý podvýraz má hodnotu false, tak bez ohľadu na hodnoty ostatných podvýrazov má celý výraz hodnotu false a preto sa ďalšie výrazy nevyhodnocujú - analogicky, ak sú podvýrazy pospájané spojkou || [or, "logické alebo"] a prvý má hodnotu true, ďalšie sa ignorujú; inak sa výrazy vyhodnocujú zľava doprava).

Náš druhý výraz je trochu zaujímavejší, je v ňom totiž skrytá troška programátorskej mágie (a ja osobne ho považujem za veľmi prasácky, pretože nie je na prvý letmý plytký pohľad jasné, čo vlastne znamená). Zopakujme si ho ešte raz:
Kód:
$riadok % 2
. Operátor % znamená zvyšok po delení - v tomto prípade dvomi; čiže nám povie, či je číslo buď párne, alebo nepárne. To znamená, že ak je v premennej $riadok párne číslo, hodnota výrazu bude nula, pretože párne čísla sú deliteľné dvomi bezo zvyšku. Naopak, aj je v premennej $riadok nepárne číslo, výraz vráti celočíselnú hodnotu jeden. V čom spočíva tá skrytá mágia, o ktorej som hovoril na začiatku? Práve v tom, že náš výraz vracia CELOČÍSELNÉ (integer) hodnoty a spolieha sa na magickú vlastnosť jazyka PHP podľa potreby "meniť" typ premennej. V PHP platí, že za logickú hodnotu FALSE možno považovať aj číslo 0, aj prázdny reťazec, aj hodnotu NULL , aj neinicializovanú premennú. Existuje ešte špeciálny operátor porovnávania, "trojité rovná sa" === ktorý striktne kontroluje aj typ premennej. Viac v spomenutom odkaze. Vráťme sa teraz k nášmu výrazu - čo teda v skutočnosti znamená? Ak je číslo v premennej $riadok párne, výraz vráti logickú hodnotu FALSE (v skutočnosti je to celočíselná 0), ak je číslo nepárne, výraz vráti logickú hodnotu TRUE.

OK, vráťme sa teraz k celému výrazu. Keď sa zamyslíme, zistíme, že prvý podvýraz je tam úplne zbytočne! Prečo? Pretože vráti TRUE na každé číslo okrem nuly a FALSE len ak je to nula. Nula sa však považuje za párne číslo (zvyšok po delení nuly dvomi je nula) a preto nám v tom prípade aj druhý podvýraz vráti FALSE. Prvý podvýraz teda len zneprehľadňuje kód (druhý na tom však nie je o nič lepšie).

Nuž a ako to zapísať poriadne? Takto:
Kód:
(($riadok % 2) == 1)
Z tohto zápisu je na prvý pohľad jasné, o čo nám ide (vrátiť true na nepárne čísla).

O tom, že ide o zlý zápis sme sa mohli presvedčiť aj pri prečítaní kmsa-ovho príspevku, ktorý sa mylne domnieval, že ($riadok % 2) vráti true pre párne čísla.







_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 02.09.08
Prihlásený: 23.01.13
Príspevky: 81
Témy: 17
Príspevok NapísalOffline : 12.10.2008 19:46

Kód:
$riadok = 0;

$riadok je pred cyklom while nastavena na nulovu hodnotu

Kód:
$riadok++;

a kazdym priechodom cyklu sa zvysi o jedna

Kód:
$numRows = mysql_num_rows($result);

$numRows je pocet vratenych hodnot z dotazu na databazu, ktory je ulozeny v $result

Kód:
else if ($riadok != 0 && $riadok % 2) echo "</tr>\n<tr>\n";

takze v ludskej reci, tento riadok znamena to to: za kazdym druhym priechodom cyklu vloz znak koniec riadka a zaciatok noveho riadka.

Kód:
$riadok != 0

toto znamena, aby sa predchadzajuci kod nevykonal pri prvom priechode cyklom. pretoze iba vtedy sa $riadok rovna nule.

takze ak chces, aby ti to hadzalo tri obrazky na jeden riadok, tak musis zmenit 2 na trojku
Kód:
else if ($riadok != 0 && $riadok % 3) echo "</tr>\n<tr>\n";


mozno ti to bude fungovat hned a mozno ti to bude robit nejake chyby, ktore este bude treba osetrit. no ja si myslim, ze ti to hned pojde...

p.s. to percento sa vola modulo a vracia zvysok po deleni.

Kód:
 echo 10 % 3;

ti vrati hodnotu 1, pretoze 10/3 = 3 a zvysok je 1


Offline

Skúsený užívateľ
Skúsený užívateľ
Vysvetlenie kodu na galeriu

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35
Bydlisko: BA - WESTSIDE
Príspevok NapísalOffline : 12.10.2008 19:53

Roko píše:
takze ak chces, aby ti to hadzalo tri obrazky na jeden riadok, tak musis zmenit 2 na trojku
Kód:
else if ($riadok != 0 && $riadok % 3) echo "</tr>\n<tr>\n";
Chyba!
Len si to skús:
Kód:
var_dump((boolean)(1 % 3)); // TRUE
var_dump((boolean)(2 % 3)); // TRUE
var_dump((boolean)(3 % 3)); // FALSE
var_dump((boolean)(4 % 3)); // TRUE
var_dump((boolean)(5 % 3)); // TRUE
var_dump((boolean)(6 % 3)); // FALSE

Ako vidíš, správa sa to presne naopak! Vysvetlenie viď môj predchádzajúci príspevok







_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 02.09.08
Prihlásený: 23.01.13
Príspevky: 81
Témy: 17
Príspevok NapísalOffline : 12.10.2008 19:58

aha, jasne, tiez ma to splietlo.


Offline

Skúsený užívateľ
Skúsený užívateľ
Vysvetlenie kodu na galeriu

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35
Bydlisko: BA - WESTSIDE
Príspevok NapísalOffline : 12.10.2008 20:07

Takže aby sme definitívne vyriešili otázku výpisu viacerých fotiek na riadok, skúsime napísať a vysvetliť tento kód:
Kód:
define('POCET_FOTIEK_NA_RIADOK', 3);
$fotky = array();
while($row = mysql_fetch_assoc($result)) {
  $fotky[] = $row;
}
$fotky = array_chunk($fotky, POCET_FOTIEK_NA_RIADOK);
if (count($fotky) > 0) {
  echo "<table>";
  foreach ($fotky as $riadok) {
    echo "<tr>";
    if (count($riadok) > 0) {
      foreach ($riadok as $fotka) {
        echo "<td><img src=\"./obrazky/".$fotka['subor']."\"></td>";
      }
    }
    echo "</tr>";
  }
  echo "</table>";
}

V prvom riadku kódu si definujeme počet fotiek, ktoré chceme mať v jednom riadku (je dobré si takéto údaje dávať do konštánt, ale aj o tom som tu už niekedy písal). Potom cyklom while získame všetky záznamy do poľa fotky. Následne využijeme vstavanú funkciu array_chunk, ktorá nám naše veľké pole rozdelí do viacerých menších polí danej veľkosti (viac o tej funkcii v manuáli). No a už nám stačí len dvomi vnorenými cyklami foreach vypísať obsah do krásnej tabuľky (pre istotu sa pred každým cyklom foreach kontroluje, či je pole, cez ktoré sa chystáme prechádzať neprázdne, pretože inak foreach vyhlási chybu).

Výsledkom je kratší, prehľadnejší a flexibilnejší kód. Ak niekedy budeš mať chuť upraviť počet fotiek v riadku na iné číslo, napr. 5, stačí zmeniť hodnotu konštanty POCET_FOTIEK_NA_RIADOK...







_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Vysvetlenie kodu na galeriu

Registrovaný: 26.07.06
Prihlásený: 20.03.16
Príspevky: 1378
Témy: 90
Bydlisko: Slovakia-Ko...
Príspevok NapísalOffline : 12.10.2008 22:49

nj p360t presne opacne som doteraz vnimal % ale aspon v tom mame viacery jasno







_________________
CPU: Intel E7200 momentalne default + freezer 7 pro | MB: Gigabyte GA-P35-DS3 rev. 2.0 F14 | RAM: A-DATA 4x1GB EE Vitesta | VGA: ATI Radeon HD4850 Sapphire Dual Slot | Monitor: BenQ E2200HD+17CTX | HDD: WD 3200AAKS + Maxtor 6Y080M0 80GB SATAII + 120GB ATA Barracuda | PSU: Corsair VX450W | Windows 7 Ultimate Sk | REPRO: Logitech X-210
+
IPhone 3GS JB 3.1.3 (new BR)
múdry sa postara o seba ale ešte múdrejši sa postara aj o druhých
Odpovedať na tému [ Príspevkov: 8 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie PHP kodu

v PHP, ASP

2

445

18.10.2017 16:36

IPP Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ako vytvorit galeriu

v PHP, ASP

16

2306

21.01.2008 17:50

emer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako spravit galeriu obrazkov

v JavaScript, VBScript, Ajax

0

492

27.02.2010 15:47

Pades Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. poznate galeriu na audi.sk?

v Grafické programy

3

936

07.09.2008 16:18

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie

v Modifikácie, návody a projekty

19

4014

14.01.2011 8:31

mack0 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie

v PHP, ASP

3

443

13.08.2010 11:32

qacer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie

v Správy pre vedenie fóra

5

1093

25.05.2010 11:28

Daron Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie

v PHP, ASP

9

639

22.04.2009 19:39

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie

v HTML, XHTML, XML, CSS

11

798

24.09.2008 12:19

zaciatocnik Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Coinminer ? Vysvetlenie

v Antivíry a antispywary

5

446

14.07.2014 0:56

stopa27 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vysvetlenie pojmov

v Siete

1

874

19.08.2006 15:10

Harlequin Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie importu

v Ostatné

2

266

30.01.2013 15:37

zaciatocnik Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie bublesort

v Assembler, C, C++, Pascal, Java

2

367

10.12.2014 22:37

Misosvk Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vysvetlenie programu

v Assembler, C, C++, Pascal, Java

11

804

23.11.2008 20:41

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vysvetlenie scriptu

v JavaScript, VBScript, Ajax

4

501

13.11.2010 20:57

DeeJay3 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Java, vysvetlenie prikazu

v Assembler, C, C++, Pascal, Java

3

609

24.11.2013 17:18

Vikinger Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra