[ 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 | 74
Bydlisko: Michalovce
NapísalOffline : 12.10.2008 15:41 | Vysvetlenie kodu na galeriu

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 | 90
Bydlisko: Slovakia-Ko...
NapísalOffline : 12.10.2008 15:58 | Vysvetlenie kodu na galeriu

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 | 35
Bydlisko: BA - WESTSIDE
NapísalOffline : 12.10.2008 19:38 | Vysvetlenie kodu na galeriu

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 | 17
NapísalOffline : 12.10.2008 19:46 | Vysvetlenie kodu na galeriu

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 | 35
Bydlisko: BA - WESTSIDE
NapísalOffline : 12.10.2008 19:53 | Vysvetlenie kodu na galeriu

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 | 17
NapísalOffline : 12.10.2008 19:58 | Vysvetlenie kodu na galeriu

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 | 35
Bydlisko: BA - WESTSIDE
NapísalOffline : 12.10.2008 20:07 | Vysvetlenie kodu na galeriu

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 | 90
Bydlisko: Slovakia-Ko...
NapísalOffline : 12.10.2008 22:49 | Vysvetlenie kodu na galeriu

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
 [ Príspevkov: 8 ] 


Vysvetlenie kodu na galeriu



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

493

18.10.2017 16:36

IPP

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

ako vytvorit galeriu

v PHP, ASP

16

2375

21.01.2008 17:50

emer

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

Ako spravit galeriu obrazkov

v JavaScript, VBScript, Ajax

0

558

27.02.2010 15:47

Pades

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

poznate galeriu na audi.sk?

v Grafické programy

3

976

07.09.2008 16:18

JanoF

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

Vysvetlenie

v Modifikácie, návody a projekty

19

4069

14.01.2011 8:31

mack0

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

Vysvetlenie

v PHP, ASP

3

475

13.08.2010 11:32

qacer

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

Vysvetlenie

v Správy pre vedenie fóra

5

1134

25.05.2010 11:28

Daron

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

Vysvetlenie

v PHP, ASP

9

672

22.04.2009 19:39

Ďuri

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

Vysvetlenie

v HTML, XHTML, XML, CSS

11

845

24.09.2008 12:19

zaciatocnik

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

Coinminer ? Vysvetlenie

v Antivíry a antispywary

5

494

14.07.2014 0:56

stopa27

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

vysvetlenie pojmov

v Siete

1

910

19.08.2006 15:10

Harlequin

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

Vysvetlenie importu

v Ostatné

2

298

30.01.2013 15:37

zaciatocnik

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

Vysvetlenie programu

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

11

857

23.11.2008 20:41

shiro

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

Vysvetlenie bublesort

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

2

406

10.12.2014 22:37

Misosvk

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

vysvetlenie scriptu

v JavaScript, VBScript, Ajax

4

542

13.11.2010 20:57

DeeJay3

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

Java, vysvetlenie prikazu

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

3

652

24.11.2013 17:18

Vikinger



© 2005 - 2024 PCforum, edited by JanoF