ugrás a tartalomhoz

For(if), mint menü...

MSzilveszter · 2005. Május. 17. (K), 13.19
Megpróbáltam azt megcsinálni, hogy ami az amúgy másnál is szükséges kategoria táblában van, azt menüvé tegyem. Hogy mindig a db-ből olvassa ki, így ha megváltozik valaminek a neve, akkor nem kell a menu.php-t is átírnom.

a connect.php csatlakozik a dbhez.
A kategoria a tábla.
print("<tr><td class=\"menu1\">Mindig Jóóó</td></tr>

sor lenne a menük közti címekre egy példa.
maga a menü sora ez lenne:
<a href=\"index.php?page=cikkek.php&kat_id=" . $kateg(id) . "\">" . $kateg(nev) . "</td></tr>

Ez pedig a teljes forráskód. Szerintem teljesen elrontottam, de nincs rá semmi ötletem, hogy hogyan tudnám megoldani.
<?php
require_once("connect.php");
print("<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\"><body bgcolor=\"BFFFD3\">");
print ("<table width=\"100\" border=\"0\" align=\"center\">");
$keres = mysql_query("SELECT * FROM kategoria ORDER by id desc");
for($i = 1; $kateg = mysql_fetch_row($keres); $i++); {
    if ($i <= 8); {
        print("<tr><td class=\"menu1\">Írásaink</td></tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg(id) . "\">" . $kateg(nev) . "</td></tr>");
    }
    if ($i > 8 AND $i <== 15) {
        print("<tr><td class=\"menu1\">Mindig Jóóó</td></tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg(id) . "\">" . $kateg(nev) . "</td></tr>");
    }
    if ($i > 15 AND $i <== 17) {
        print("<tr><td class=\"menu1\">Letöltések</td></tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg(id) . "\">" . $kateg(nev) . "</td></tr>");
    }
    if ($i > 17 AND $i <== 19) {
        print("<tr><td class=\"menu1\">Fan Clubbok</td></tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg(id) . "\">" . $kateg(nev) . "</td></tr>");
    }
    if ($i > 19 AND $i <== 22) {
        print("<tr><td class=\"menu1\">Egyéb</td></tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg(id) . "\">" . $kateg(nev) . "</td></tr>");
    }
}

?>


Ha tudtok segíteni, azt megköszönöm.

M.Szilveszter - www.netnap.hu
 
1

For helyett használj

kris7topher · 2005. Május. 17. (K), 15.29
For helyett használj while-t

<?php

//...

while ($kateg = mysql_fetch_row($keres))
{
    // Itt csinálod a dolgokat
}

//...

?>
2

gerzson · 2005. Május. 17. (K), 15.54
  1. $kateg(id) helyett $kateg[id], mert ez tömbelem-hivatkozás és nem függvényhívás.
  2. if ($i <= 8); { Ez az if semmit nem fog csinálni, mert a "then" ágban üres utasítás áll ;, viszont amit - szerintem -szerettél volna feltételessé tenni, az mindig le fog futni, mert már nem az if-en belüli blokknak minősül, hanem egy teljesen önálló feltétel nélkül futó blokknak.

ui.: célszerűbb lenne a DB-ben tárolni azt is, h. egyes menüpontok milyen kategória alatt jelenlenek meg, és azt sem a PHP fájlban bedrótozva megadni. Ekkor ez a reménytelenül sok és zavaró if sem kellene.

testing can reveal the presence of errors, but never their absence. - Edsger Dijkstra
3

than ág, de csak kötekedni

tiny · 2005. Május. 17. (K), 17.26
than ág, de csak kötekedni akartam :)
Mr.Tiny
4

Ne kötekedj, hanem nézd

gerzson · 2005. Május. 17. (K), 20.00
Ne kötekedj, hanem nézd meg a szótárban:
then : akkor, aztán, azután, majd
than : mint, (jobb |több) mint ...
;-) bocs
testing can reveal the presence of errors, but never their absence. - Edsger Dijkstra
5

Kipróbáltam

MSzilveszter · 2005. Május. 17. (K), 20.07
Átírtam amiket mondtatok (megmaradt az ifes rendszer, de már ; jó helyen van, [] van () helyett, és semmi... azaz mostmár nem jön vissza hibaüzenet, hanem olyan, mintha üres lenne...

Mi ez a then, meg hova kellene írni...? Sajnálom tudatlanságom, de legalább a jelentésést ismertem :D

Köszi előre:


MSzilveszter - http://www.netnap.hu
6

Semmi gond, én turbo

tiny · 2005. Május. 17. (K), 22.45
Semmi gond, én turbo pascalból szedtem, ott than van és én mindig elcseszem :)
Mr.Tiny
7

na jól ezt zárjuk

gerzson · 2005. Május. 17. (K), 23.06
na jól ezt zárjuk rövidre! Légy szíves, írj egy Pascal programot thennel aztán thannel és tedd közzé az eredményt! Én most írok egy Delphi programot, és ott nincs than - csak then, pedig nehezen hinném, h. elírták volna.
testing can reveal the presence of errors, but never their absence. - Edsger Dijkstra
8

Szerintem is

MSzilveszter · 2005. Május. 17. (K), 23.13
Szerintem is zárjuk rövidre és foglalkozzunk az eredeti problémával :P

Üdv.:
MSzilveszter - http://www.netnap.hu
10

A pascalt is tanuld még egy kicsit!

kgyt · 2005. Május. 17. (K), 23.58
Itt néhány linket találsz, ahol a pascal alapokat is elsajátíthatod...
;-)
http://zeus.nyf.hu/~akos/pascal/pascal.htm
http://digo.inf.elte.hu/~iszcs/segedany/pascal.htm
http://www.ank.sulinet.hu/tantargy/szamtech/tetelek/szt27.html
http://staff.kzs.hu/tamas/programozas/pascal.htm
http://erettsegi.ircnet.hu/e3/szt19.html
http://www.pollak.sulinet.hu/~faur/pascal3.htm
http://www.pollak.sulinet.hu/~faur/pascal5.htm
http://indy.poliod.hu/program/Pascal/Tankonyv/Tankonyv.htm
http://indy.poliod.hu/program/Pascal/Munkafuz/Munkafuz.htm
http://www.iit.bme.hu/education/mume/bevi1.htm
http://www.geocities.com/hotdogcom/ptutor/chap04.html
http://goforit.unk.edu/pascal/pas017.htm
http://www.pcengines.ch/tp3.htm
http://shop.store.yahoo.com/onecentcomputer/tupa15prtrcd.html

--
Szeretettel: Károly György Tamás
kgyt&kgyt.hu - http://kgyt.hu
11

MEGOLDVA!

MSzilveszter · 2005. Május. 18. (Sze), 00.29
MEGOLDÓDOTT A PROBLÉMA. Köszönöm.
Az eredmény a http://www.netnap.hu odldalon már látszik is. Köszi a segítséget!
<?php
print("<tr><td class=\"menu1\">Írásaink</td></tr>");
$i = 1;
while ( $i <= 8 ){
$kateg = mysql_fetch_row($keres);
print("</tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg[0] . "\">" . $kateg[1] . "</td></tr>");
$i++; }
print("<tr><td class=\"menu1\">Mindig Jóóó</td></tr>");
while ($i > 8 AND $i <= 15) {
$kateg = mysql_fetch_row($keres);
print("</tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg[0] . "\">" . $kateg[1] . "</td></tr>");
$i++; }
print("<tr><td class=\"menu1\">Letöltések</td></tr>");
while ($i > 15 AND $i <= 17) {
$kateg = mysql_fetch_row($keres);
print("</tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg[0] . "\">" . $kateg[1] . "</td></tr>");
$i++; }
print("<tr><td class=\"menu1\">Fan Clubbok</td></tr>");
while($i > 17 AND $i <=19) {
$kateg = mysql_fetch_row($keres);
print("</tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg[0] . "\">" . $kateg[1] . "</td></tr>");
$i++; }
print("<tr><td class=\"menu1\">Minden más</td></tr>");
while($i > 19 AND $i <= 22) {
$kateg = mysql_fetch_row($keres);
print("</tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg[0] . "\">" . $kateg[1] . "</td></tr>");
$i++; }
?>


Amúgy meg: Pascalhoz értek annyit, hogy ne kellje törni a fejem than és then közötti különbségen :)


MSzilveszter - http://www.netnap.hu
12

amúgy

PiG · 2005. Május. 18. (Sze), 10.44
amúgy meg, ha valaki nem tudja, akkor felüt egy szótárt és egyértelművé válik, hogy jelen esetben csakis then-ről lehet szó. meg persze az is aki esetleg még c64-es basic programot is írt. Még jó, hogy php-ben nem kell ezen gondolkozni!
P][G
13

Jowanna, én voltam a

tiny · 2005. Május. 18. (Sze), 14.57
Jowanna, én voltam a hülye, meg most már megjegyeztem, saját jegyzetemet csesztem el, megértettem, megjegyeztem, de azért jó, hogy kiderült, hogy jó a memóriám :D, mert még 1 párszor biztos elírtam volna.
Mr.Tiny
14

Remélem, megtaláltad az

gerzson · 2005. Május. 18. (Sze), 18.21
Remélem, megtaláltad az előző hozzászólásomat, mert sikerült egy kicsit keverni a böngészőmben, így valami árva bejegyzésként vette fel a téma alá - sorrendben legelőre.
Amúgy meg: Pascalhoz értek annyit, hogy ne kellje törni a fejem than és then közötti különbségen :)
- ez nem rád vonatkozott, bocsánat az interferenciáért a két eligazítás között.

testing can reveal the presence of errors, but never their absence. - Edsger Dijkstra
19

Most elkezdheted

PiG · 2005. Május. 19. (Cs), 01.26
Most, hogy már van egy működőképes verziód kezdd el megírni normálisan, mert - ne is haragudj - szörnyű megoldás az a sok > <= Ha pl majd törölsz egy kategóriát vagy újat veszel fel, esetleg újabb főkategóriád lesz, netán szeretnéd tetszőleges módon sorrendben elhelyezni a menüidet, akkor mit csinálsz?Írsz még egy halom if-et meg < = > -t? Neeee máááár.
Egyébként szerintem érdemesebb mysql_fetch_assoc-t használni, mert a $kateg[1]-ról te magad sem fogod megmondani egy hónap múlva, hogy mi az, de pl a $kateg['kategoria_nev']-ről talán igen. Arról nem is szólva, hogy esetleg módosítasz az adatbázistábla szerkezetén (mondjuk létrehozol vagy eltávolítasz egy új mezőt az elején - elő szokott fordulni), így a $kateg[1] már lehet, hogy egy tök másik mezőt fog jelenteni aztán cseszheted, keresgélheted a kódban, hogy mit javítsál.
Persze nem kötelező...

P][G
20

PiG

MSzilveszter · 2005. Május. 19. (Cs), 14.23
Nézdd meg a 18-as bejegyzést Pig! Ott tart a fiatalabb változat, bár még nem jöttem rá, hogy hogyan állítsam le azt, hogy állandóan írja uat a sort, amíg csak le nem állítom az oldal töltését :D

Üdv.:

MSzilveszter - http://www.netnap.hu
15

smg & ÚJ alakon a menüm :)

MSzilveszter · 2005. Május. 18. (Sze), 20.22
Semmi gond.

A menümre, meg amivel indult ez a téma annyit, hogy mostmár teljesen új alapokra fektetetett... Bár ennek meg annyi a hibája jelenleg, hogy megállás nélkül generálja az egyik sort, és nem fejezi be... :)
Íme:

<?php
require_once("connect.php");
$i=1;
while(empty($i)=FALSE)
{
$kerfokateg = mysql_query("SELECT fokateg FROM fokategoria where (id = " . $i . ")");
$fokateg = mysql_fetch_row("$kerfokateg");
print("<tr><td class=\"menu1\">" . $fokateg[1] . "</td></tr>");
$kerkateg = mysql_query("SELECT * FROM kategoria where (fokateg = " . $i . ")");
while(empty($kerkateg)=FALSE)
{
        $kateg = mysql_fetch_row("$kerkateg");
        print("</tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg[0] . "\">" . $kateg[1] . "</td></tr>");
}
$i++;
}
?>


Nah. Jó than-elést :D
MSzilveszter - http://www.netnap.hu
16

Ez egyszerűbb

PiG · 2005. Május. 18. (Sze), 21.13
Elég egy lekérdezést megcsinálni INNER JOIN-nal, utána pedig php segítségével akkor léptetünk 'főkategóriát', ha az más, mint az előzőleg megkapott főkategória. Mivel az elején semmi sincs, ezért van a $temp, ami kap egy olyan értéket, amit a 'fokateg' sosem vesz fel (pl.: '', 0, null, stb.)
Amennyire kisilabizáltam a kódodból, nagyjából vmi hasonló lekérdezés kell neked. A többi cuccost dl-el csináltam, de ízlés szerint átalakítható. Lehet, hogy vannak hibák, nem próbáltam ki, csak ide pötyögtem, de az elve azért stimmel:

$sql="SELECT kategoria.*, fokategoria.fokateg FROM kategoria INNER JOIN fokategoria ON (kategoria.fokategoria=fokategoria.id) ORDER BY fokategoria.fokat";
$result=mysql_query($sql);
if ($result){	
  $tmp='';
  echo '<dl>';
  while ($sor=mysql_fetch_assoc($result){
    if ($tmp!=$sor['fokateg']){				
      echo "<dt>{$sor['fokateg']}</dt>";
      $tmp=$sor['fokateg'];
    }
    echo '<dd>';
    echo '<a href="/index.php?valami_link_az_azonositobol"></a>';
    echo '</dd>';
  }//while
  echo '</dl>';
}//if
else{
  echo 'Sajnos nincs megjeleníthető elem!';
}
P][G
17

Nem nagyon értem, hogy a

tiny · 2005. Május. 18. (Sze), 21.16
Nem nagyon értem, hogy a $kerkateg mitől lesz empty a while-on belül, ha egyszer nem volt az. Tehát ha elindul az a cucc, akkor mikor lesz vége?

 while(empty($kerkateg)=FALSE)
{
        $kateg = mysql_fetch_row("$kerkateg");
        print("</tr><td class=\"menu2\"><a href=\"index.php?page=cikkek.php&kat_id=" . $kateg[0] . "\">" . $kateg[1] . "</td></tr>");
} 
Erre a részre gondolok. Vagy csak én vagyok megint hüle?
Mr.Tiny
18

nem te vagy...

MSzilveszter · 2005. Május. 18. (Sze), 22.59
Így, hogy belegondolok, nem te vagy a h*lye.

Tényleg nem fog üres lenni az érték, bár.... ha minden olyat felhasznált a táblából, aminél a főkategória 1, akkor elvileg nincs mit adni neki értéket, azaz a mysql_fetch_row false értékkel (0) tér vissza. Azt hittem legaláb is

Aztán mint a tapasztalat mutatja, nincs igazam, mert a végtelenségig írja a sorokat az első táblánál.

:)

Megpróbálom a másik ötletet, amit az elötted szóló mondot. :)


MSzilveszter - http://www.netnap.hu
9

Használj

gerzson · 2005. Május. 17. (K), 23.26
Használj mysql_fetch_array()-t mysql_fetch_row helyett!
Ajánlom, h. ismerkedj meg a nyelv alapjaival is a PHP kézikönyv Vezérlési szerkezetek c. fejezet elolvasásával! A misztikus then-ről nem itt fogsz a legjobb leírást találni, ahhoz inkább egy átfogóbb, alapozó programozási könyvet ajánlok: kaphatók szakmai könyvesboltokban.
A then azt a programblokkot jelöli, ami akkor fog lefutni ha az if-ben megadott feltétel igaz lesz. Ellenkező esetben az else után megadott blokk fut le, ha van ilyen megadva. Röviden ennyi.
<?php
if ( feltetel ) {
    // then ág: ha a feltetel igaz, akkor ez fog lefutni
} else {
    // else ág: ha a feltétel hamis, akkor ez fog lefutni
}
ui: a jelentésre vonatkozó szrevételeimet pedig annak szántam, aki eltökélte, h. az if-then-else szerkezetben a then-t than-nek kell írni, még ha annak vajmi kevés értelme is van/lenne.
testing can reveal the presence of errors, but never their absence. - Edsger Dijkstra