Joku kaunis olio tai funktio

$_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?
6334
Äänestä

Muut lukivat myös

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 ?

Äänestä
  • >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.

    Äänestä

  • tarpeeseen kirjoitti:

    >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,"/");

    Äänestä

  • tarpeeseen kirjoitti:

    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,"/");
    }   

    Äänestä

  • Tyhmeliini_ kirjoitti:

    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 :)

    Äänestä

  • tarpeeseen kirjoitti:

    >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.

    Äänestä

Kommentoi aloitusta


tarpeeseen kirjoitti:

$_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?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu