En tiedä olenko tehnyt alkuunsakaan oikein, mutta en ole muutakaan keinoa keksinyt.
Olen käyttänyt sivujen ohjauksessa headeria, esim. "header("Location: testi.php");", mutta jostain syystä ei toimi oikein kunnolla.
Eräällä sivulla minulla on niitä PHP-koodissa useita, ja ne määräytyvät if-lauseen mukaan. Mutta jostain syystä sivu näyttää ohjautuvan kaikkein alimman "headerin" mukaan..
Kuuluuko headeria edes käyttää tällä tavoin? Vain onko olemassa jokin toinen eteenpäinohjausmenetelmä? Käytän niitä esimerkiksi ohjaamaan käyttäjä sivulle jossa näkyy jokin viesti kun on kirjautunut, esim. "Tervetuloa!"..
Olenko edes käsittänyt oikein, keskeyttääkö header koodin lukemisen ja siirtää määrätylle sivulle?
Kyllä header()-funktiota voi käyttää valintarakenteiden avulla usemman kerran samalla sivulla. Varmaankin sun if-lauseet kusee sit jotenkin...
Muuten ne toimivat moitteettomasti paitsi juuri tuon headerin osalta. :)
Tota noin, pasteetkos sun koodin tähän, sitten olis sata kertaa helpompi korjaita virheitä? Ja yks pyyntö: Jos laitat koodin tänne, niin saiskos sen kooditagien väliin, ellet oo niin jo aikasemmin tehny. Helpottaa muuten kummasti koodin lukemista jos se on tagien sisällä :P Hehe.
Tein testauksen:
<?php // testi $joo = "jei"; if ($joo == "jei") { header("Location: index.php"); } elseif ($joo == "hei") { header("Location: log_in.php"); } header("Location: register.php"); ?>
Ja se menee aina tuohon register.phpeehen, oli $joo "jei" tai "hei"..
Hehe, tottakai se menee, koska sille ei ole annettu ehtoa. Se suoritetaan jokatapauksessa. Kokeiles näin:
<?php // testi $joo = "jei"; if ($joo == "jei") { header("Location: index.php"); } elseif ($joo == "hei") { header("Location: log_in.php"); } else { header("Location: register.php"); } ?>
Laitat ton viimeisen headerin elsen sisään, niinkun tossa ylläolevassa koodissa se on, sitte voi toimiakki. Eli, jos muuttuja $joo ei ole "jei" tai "hei", niin sillon se ohjaa tohon register.php -tiedostoon.
Toimisi se näinkin
<?php // testi $joo = "jei"; if ($joo == "jei") { header("Location: index.php"); exit(); } elseif ($joo == "hei") { header("Location: log_in.php"); exit(); } header("Location: register.php"); exit(); ?>
On tosin silti järkevämpää sijoittaa tuo viimeinenkin header() saman if-lauseen sisään.
Hmmm, hämärä komento.. :)
Eli sitä ei siis voi suorittaa toisistaan erillisissä ehtolauseissa? Miksi ei?
Esim:
<?php // testi $joo = "jei"; if ($joo == "jei") { header("Location: index.php"); } if ($joo == "hei") { header("Location: log_in.php"); } ?>
Mitä tuo exit(); tekee?
lainaus:
Hmmm, hämärä komento.. :)
header()-funktio lähettää headerin (mikä se on suomeksi?), mutta ei lopeta skriptin suorittamista. Tämän takia alkuperäinen skriptisi ei toiminut oikein. Ohjelma lähetti kyllä oikean uudelleenohjaus-headerin, mutta skriptin lopussa lähetetty toinen uudelleenohjaus-header jäi voimaan lopulta ja käyttäjä ohjattiin väärään paikkaan.
lainaus:
Esim:
Kyllä tämä onnistuu, headereita lähetetään vain yksi, koska toinen ehtolauseista on epätosi.
Jos molemmat ehtolauseet olisivat tosia, käyttäjä ohjattaisiin log_in.php -sivulle, koska se on jälkimmäisenä ohjauksista.
lainaus:
Mitä tuo exit(); tekee?
exit() lopettaa ohjelman suorituksen siihen paikkaan.
Jeps, tapoja on monia. Yksi ainakin olisi switch-rakenne, mutta perinteiset if-lauseet roksaa :]
Muuten, exit(); = die();
Ahaa, kiitokset hyvistä vastauksista, erityisesti k-mikon vastaus oli mitä halusin tietää!
Yksi ongelma taas pois pelistä.. *thumbs up*
lainaus:
header()-funktio lähettää headerin (mikä se on suomeksi?)
Otsikkotiedot?
lainaus:
mikä se on suomeksi
ylätunniste? xD Katoin sanakirjasta.
lainaus:
lähettää headerin (mikä se on suomeksi?)
HTTP-otsake(tieto) on mielestäni ymmärrettävä ja kuvaava termi sekä hyvää suomen kieltä.
Otsikoista puhuminen voidaan sekoittaa joskus muihin asioihin, kuten HTML:n TITLE- ja H1 - H6-elementteihin.
Edit: tämä boardi ei nähtävästi tykkää lyhyen ajatusviivan (n-viiva) käytöstä, vaan muuttaa sen muotoon "& a m p ; # 8 2 1 1 ;" (lisätty välilyönnit, jottei tuo taas sotkeutuisi uudelleen). Voisikohan tuohon saada korjausta, sillä oletetavasti se tekee silloin samaa monille muillekin merkeille?
Noniin, olisiko tämän asian kohdalta pilkunnussiminen ohitse :)
lainaus:
Voisikohan tuohon saada korjausta, sillä oletetavasti se tekee silloin samaa monille muillekin merkeille?
Vika liittyi ilmeisesti ASCII-merkistön ulkopuolisiin merkkeihin. Nyt pitäisi näidenkin merkkien näkyä oikein. ☺
Tesmitääs...
? ? ?? ?
Edit: Ja pah, sanon minä. Ensimmäinen oli euromerkki, toinen kyrillinen kirjain zhe, seuraavat pari hiraganaa ja viimeinen smailinaama. Hyvin näkyy kaikki, juu :)
Edit2: Tulipas mieleen kokeilla vaihtaa selainta...
€ Ж ばか ☺
Edit3: Jaahas, jaahas. Pitääpäs näköjään tutkailla Operan asetuksia...
Aihe on jo aika vanha, joten et voi enää vastata siihen.