$_POST / $_GET / $_COOKIE arvojen tarkistamiseen pitäisi kehitellä joku olio tai funktio, mutta en keksi mitään "kaunista".
Ideana on että muuttujan arvo voidaan saada kolmella yllämainituilla tavoilla.
$_POST on ensisijainen, jos $_POST arvo ei ole annettu, niin katsotaan $_GET ja jos ei ole sitäkään, niin katsotaan $_COOKIE.
Jos $_COOKIE:kin ei ole asetettu, niin on olemassa muuttujan "oletusarvo". Kun kaikki nämä tarkistukset on tehty, niin asetetaan ja tallennetaan $_COOKIE, jotta ensi kerralla tieto olisi saatavilla.
Kaiken lisäksi pitäisi vielä tarkistaa että $_POST / $_GET / $_COOKIE arvo on mahdollisten arvojen taulussa, eikä mitään pupua.
Keksikö joku näppärän tavan tarkistaa nuo tiedot?
Ideana on että muuttujan arvo voidaan saada kolmella yllämainituilla tavoilla.
$_POST on ensisijainen, jos $_POST arvo ei ole annettu, niin katsotaan $_GET ja jos ei ole sitäkään, niin katsotaan $_COOKIE.
Jos $_COOKIE:kin ei ole asetettu, niin on olemassa muuttujan "oletusarvo". Kun kaikki nämä tarkistukset on tehty, niin asetetaan ja tallennetaan $_COOKIE, jotta ensi kerralla tieto olisi saatavilla.
Kaiken lisäksi pitäisi vielä tarkistaa että $_POST / $_GET / $_COOKIE arvo on mahdollisten arvojen taulussa, eikä mitään pupua.
Keksikö joku näppärän tavan tarkistaa nuo tiedot?
Vastaukset 6
Vanhimmat
eihän siinä muuta keinoa ole kun tehdä funktio joka käy läpi yksitellen jokaisen muuttujataulun ja valitse arvon sen perusteella mistä se löytyy ja tarkistaa, että ei ole puppua.
Mihin oletusarvot ja sallittujen arvojen lista on tallennettu ?
>Mihin oletusarvot ja sallittujen arvojen lista on tallennettu ?
Jossain muuttujassa, ihan staattisina.
Eli funktiolle annetaan viisi arvoa: get, post, coocie, default ja array() ja sitten funktio palauttaa jonkun arvon. Ja lopuksi koodissa tallennetaan tämä arvo vielä keksiin.
Jos joku keksi "paremman" tavan kertokaa :)
$kielet = array("fin","eng","swe");
$kielidefault = "fin";
function test ($data, $data_in, $default) {
foreach($data as $tmp) {
if (in_array($tmp, $data_in))
return $tmp;
}
return $default;
}
$tmp = array($_POST['kielivalinta'],$_GET['kielivalinta'],$_COOKIE['kielivalinta']);
$kieli = test ($tmp, $kielet, $kielidefault);
setcookie("kielivalinta",$kieli,time() 60*60*24*30,"/");
Mitä tuol on tarkoitus tehdä?
Jos tarkoitus on valita sivun kieli kuten tuosta esimerkistä ymmärtää niin mielestäni sitä noin ei kannata tehdä.
Tuo koodisi on vähän outo
Miksi määrität $kielet ja $kielidefault function ulkopuolella?
Jos haluat helppoa asetusmäärityksiä niin ennemmin
function test($data)
{
global $kielet $kielidefault
....
}
Ja kutsut functiota $kieli = test($tmp);
Function kutsussa niin vähän tavaraa kuin mahollista. Toisaaltaan kielivalinnat vois ottaa suoraan functiossa jolloin ei tarvitsisi viedä mitään.
Miksi ihmeessä haluat GET, POST ja COOKIE kielen valintaan?
Ennemmin vaik pelkkä GET ja kuljetat sitä aina osoitteen peräs. Jos et halua et kielivalinta näkyy osoitteessa niin tallenna se sessioniin(ei kekseihin). Jos haluat käyttää noita kaikkia niin vilkaseppas $_REQUEST['kieli'] sisältää $_COOKIE, $_GET ja $_POST ilmeisesti tuos järjestykses, jos ei ekasta niin tokasta jos ei siinäkään niin $_POSTista
Täs on vuosia sit tekemäni esimerkki samaan asiaan
$kielet = array('fin','eng','swe');
if ($_COOKIE['kieli'] && empty($_GET['kieli']))
$kieli = $_COOKIE['kieli'];
else
{
$kieli = in_array($_GET['kieli'],$kielet) ? $_GET['kieli'] : 'fin';
setcookie("kieli",$kieli,time() 60*60*24*30,"/");
}
>Miksi määrität $kielet ja $kielidefault function ulkopuolella?
Koska pidän kaikki asetukset erillisessä tiedostossa: "setting.php"
>Jos haluat helppoa asetusmäärityksiä niin ennemmin
>global $kielet $kielidefault
Miksi haluaisin? Näin funktio on sidottu vain ja ainoastaan tähän kielivalintaan, mutta jos kaikki arvot annetaan parametreina, niin samalla funktiolla voi tarkistaa ja asettaa kaikki muutkin arvot. Ja samaa koodia voi käyttää vaikka toisesta ohjelmasta/skriptista.
>Function kutsussa niin vähän tavaraa kuin mahollista.
Miksi? Monipuolisuuden ja päivitettävyyden kustannuksella saavutettu etu on mikä?
>Miksi ihmeessä haluat GET, POST ja COOKIE kielen valintaan?
No koska kielen voi vaihtaa GETilla ja POSTilla. Sivulla on linkki jolla voi vaihtaa kielen, joten käytössä on GET, ja kun käyttäjä rekisteröityy formissa on myös kielivalinta, joten tarvitaan POST, ja samalla funktiolla voi myös tarkistaa formin arvot yhtä hyvin kuin tuolla linkillä (get arvo). Cookie on siitä varalta ettei käytä halua rekisteröityä, näin asetukset säilyvät seuraavallakin vierailulla.
>Jos haluat käyttää noita kaikkia niin vilkaseppas $_REQUEST['kieli']
En ole koskaan kuulutkaan tästä, pitää tutustua :)
*>Jos haluat helppoa asetusmäärityksiä niin ennemmin
>global $kielet $kielidefault
Miksi haluaisin? Näin funktio on sidottu vain ja ainoastaan tähän kielivalintaan, mutta jos kaikki arvot annetaan parametreina, niin samalla funktiolla voi tarkistaa ja asettaa kaikki muutkin arvot. Ja samaa koodia voi käyttää vaikka toisesta ohjelmasta/skriptista.*
Aivan, sain tuosta esimerkistäsi semmoisen käsityksen että haluat testata juuri noihin tietoihin ja silloinhan global on parempa ratkaisu kuin parametrien vieminen. Varsinkin jos kutsut functiota useamman kerran.
*>Function kutsussa niin vähän tavaraa kuin mahollista.
Miksi? Monipuolisuuden ja päivitettävyyden kustannuksella saavutettu etu on mikä?*
Nopeus, keveys, koodin selkeys jne... Toki parametreja käytetään jos muutoin ei saada haluttua toiminnallisuutta.
Täs on hieman erillainen esimerkki ja mielestäni helppo käyttösempi kuin tuo sinun jos halutaan pelkästään käyttäjän syötteitä tutkia.
Tosin jos monikäyttösen haluaa niin function kannattaisi ehkä $default sijasta palauttaa false ja sitten itse koodissa tekee halutut jutut, tämä mahdollistaisi error jne... ilmoitukset.
Harkitse myös sessioneita cookieiden sijasta tällöin kielenmuistamis juttu toimii niilläkin keillä cookiet estetty.