joo, tossa sitä vissiin käytettiin zippitiedoston purkamisessa. mutta mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?
0Äänestä
jeje5
hmmmmmmm........ kirjoitti:
joo, tossa sitä vissiin käytettiin zippitiedoston purkamisessa. mutta mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?
Tuo on ihan eriasia mitä Ohjelmointiputkassa on.
extract tekee taulukosta muuttujia avaimen perusteella.
siis $x['testi'] = 'testi teksti';
echo $x['testi'];
extract($x); echo $testi;
Nuo tulostaa saman tekstin.
"mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?" Joudut kirjoittaa $_GET['testi'] jne... Jos käytät extractia niin voit ihan $testi jne... käyttää.
Monet ihmiset eivät alusta muuttujia. Juuri tuon takia superglobaalit tuli siis $_GET, $_POST jne.... Ja PHP6 ei ole enää edes mahdollista laittaa registerglobaaleita päälle.
Alustaminen tarkoittaa extract($_GET);
$kirjaantunut = false; if ($kirjaantunut) { // salaisia juttuja }
Tuossa ei olekkaan enaa tietoturva aukkoa.
0Äänestä
jaskajokunen_
jeje5 kirjoitti:
Tuo on ihan eriasia mitä Ohjelmointiputkassa on.
extract tekee taulukosta muuttujia avaimen perusteella.
siis $x['testi'] = 'testi teksti';
echo $x['testi'];
extract($x); echo $testi;
Nuo tulostaa saman tekstin.
"mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?" Joudut kirjoittaa $_GET['testi'] jne... Jos käytät extractia niin voit ihan $testi jne... käyttää.
Monet ihmiset eivät alusta muuttujia. Juuri tuon takia superglobaalit tuli siis $_GET, $_POST jne.... Ja PHP6 ei ole enää edes mahdollista laittaa registerglobaaleita päälle.
Alustaminen tarkoittaa extract($_GET);
$kirjaantunut = false; if ($kirjaantunut) { // salaisia juttuja }
Tuossa ei olekkaan enaa tietoturva aukkoa.
Sehän selkeni hyvin, kiitos paljon! Vielä olisi kuitenkin yksi asia:
""mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?" Joudut kirjoittaa $_GET['testi'] Jos käytät extractia niin voit ihan $testi jne... käyttää."
Eli onko sama asia käytänkö tuossa yhteydessä clean() -funktiota vai extract() ?
Sehän selkeni hyvin, kiitos paljon! Vielä olisi kuitenkin yksi asia:
""mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?" Joudut kirjoittaa $_GET['testi'] Jos käytät extractia niin voit ihan $testi jne... käyttää."
Eli onko sama asia käytänkö tuossa yhteydessä clean() -funktiota vai extract() ?
Ei ole. $testi = clean($_POST['testi']); sijoittaa $testi muuttujaan clean-function palauttaman tiedon. Tuo clean-functio ei ole PHP:n joten en tiedä mitä se tekee.
Mielestäni on parempa luetella scriptin alussa tai siinä kohti missä tarttet $testi = $_POST['testi']; Näin tiedät mitä missäkin muuttujassa on eikä tule mitään yllätyksiä kuten tuon extract voi käydä. Muista, että käyttäjä voi tehdä oman lomakkeen ja lähettää sillä tietoja, myös $_POSTiinkin.
Ja turhaan jokaiselle tekee $x = $_POST['x']; vain jos tarvetta on. Vaikka ens alkuun $_POST['x'] saattaa tuntua vaikeelta niin ei se sitä ole. voit tehdä näin echo "nimesi on {$_POST['nimi']}."; Tuo on vain esimerkki ja siinä on tietoturva aukko, ikinä ei saa tulostaa suoraan käyttäjän syötettä selaimelle, koska voi laittaa esim Javascriptin pätkän jonka avulla saa vaikkapa sivusi keksit tietoon jolloin session kaappaus käy helposti, mikäli et sitä ole ottanut huomioon.
Vaikka yleisen käytännön mukaan superglobaaleja saisi vain lukea, niin itse olen havainnut selkeemmäksi myös muuttaa niiden tietoa tietyissä tapauksissa.
Vastaukset 5
Vanhimmat
http://www.ohjelmointiputka.net/opas.php?tunnus=pclzip
joo, tossa sitä vissiin käytettiin zippitiedoston purkamisessa.
mutta mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?
Tuo on ihan eriasia mitä Ohjelmointiputkassa on.
extract tekee taulukosta muuttujia avaimen perusteella.
siis
$x['testi'] = 'testi teksti';
echo $x['testi'];
extract($x);
echo $testi;
Nuo tulostaa saman tekstin.
"mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?"
Joudut kirjoittaa
$_GET['testi'] jne...
Jos käytät extractia niin voit ihan $testi jne... käyttää.
Kannattaa vilkasta http://fi.php.net/manual/fi/function.extract.php
Mutta kannattaa olla varovainen tuon kanssa.
Tässä ei ole mitään hätää (jos registerglobaalit pois päältä, kuten ne oletuksena on).
if ($kirjaantunut)
{
// salaisia juttuja
}
Mutta laitat scriptin alkuun
extract($_GET);
niin http://sivusi.com?kirjaantunut=juu pääsetkin salaisille sivuille, ellet ole muuttujia alustanut.
Monet ihmiset eivät alusta muuttujia. Juuri tuon takia superglobaalit tuli siis $_GET, $_POST jne.... Ja PHP6 ei ole enää edes mahdollista laittaa registerglobaaleita päälle.
Alustaminen tarkoittaa
extract($_GET);
$kirjaantunut = false;
if ($kirjaantunut)
{
// salaisia juttuja
}
Tuossa ei olekkaan enaa tietoturva aukkoa.
Sehän selkeni hyvin, kiitos paljon!
Vielä olisi kuitenkin yksi asia:
""mitä sen toiminta tarkoittaa post, get -metodien yhteydessä?"
Joudut kirjoittaa
$_GET['testi']
Jos käytät extractia niin voit ihan $testi jne... käyttää."
Eli onko sama asia käytänkö tuossa yhteydessä clean() -funktiota vai extract() ?
Eli:
$testi = clean($_POST['testi']);
Vai:
extract($_POST);
"Eli onko sama asia käytänkö tuossa yhteydessä clean() -funktiota vai extract() ?
Eli:
$testi = clean($_POST['testi']);
Vai:
extract($_POST);"
Ei ole.
$testi = clean($_POST['testi']); sijoittaa $testi muuttujaan clean-function palauttaman tiedon. Tuo clean-functio ei ole PHP:n joten en tiedä mitä se tekee.
Mielestäni on parempa luetella scriptin alussa tai siinä kohti missä tarttet
$testi = $_POST['testi'];
Näin tiedät mitä missäkin muuttujassa on eikä tule mitään yllätyksiä kuten tuon extract voi käydä. Muista, että käyttäjä voi tehdä oman lomakkeen ja lähettää sillä tietoja, myös $_POSTiinkin.
Ja turhaan jokaiselle tekee $x = $_POST['x']; vain jos tarvetta on. Vaikka ens alkuun $_POST['x'] saattaa tuntua vaikeelta niin ei se sitä ole. voit tehdä näin
echo "nimesi on {$_POST['nimi']}.";
Tuo on vain esimerkki ja siinä on tietoturva aukko, ikinä ei saa tulostaa suoraan käyttäjän syötettä selaimelle, koska voi laittaa esim Javascriptin pätkän jonka avulla saa vaikkapa sivusi keksit tietoon jolloin session kaappaus käy helposti, mikäli et sitä ole ottanut huomioon.
Vaikka yleisen käytännön mukaan superglobaaleja saisi vain lukea, niin itse olen havainnut selkeemmäksi myös muuttaa niiden tietoa tietyissä tapauksissa.
$_POST['nimi'] = !empty($_POST['nimi']) ? htmlspecialchars($_POST['nimi']) : 'nimetön';
Tuo on ihan tavallinen if/else lauseke. !empty sen takia kun olen tottunut että oikeella puolella on ns oletus tieto(nimetön).