/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problem med variabler - $_REQUEST, $_COOKI~
Fra : Henrik Stidsen


Dato : 26-01-03 14:57

Jeg har følgende kode:

$foo = "bar";
if($_REQUEST["foo2"]){$foo = $_REQUEST["foo2"];}
else if($_COOKIE["foo2"] AND $_REQUEST["foo2"] != "bar2"){$foo =
$_COOKIE["foo2"];}
else {$foo = "bar2";}

Senere i koden sættes en cookie med navnet "foo2" for at huske den
valgte indstilling. (ud fra enten at der ikke er valgt noget eller
hvad der er valt i requestet - som er GET).

Uanset hva ender jeg med $foo = "bar2" og er ved at blive skør i
hovedet fordi jeg ikke kan finde ud af hvorfor!

--
..: Henrik Stidsen - HS235.dk ::...
Visit http://hs235.dk/drugs

 
 
Christian Iversen (26-01-2003)
Kommentar
Fra : Christian Iversen


Dato : 26-01-03 15:36

Henrik Stidsen wrote:

> Jeg har følgende kode:
>
> $foo = "bar";
> if($_REQUEST["foo2"]){$foo = $_REQUEST["foo2"];}
> else if($_COOKIE["foo2"] AND $_REQUEST["foo2"] != "bar2"){$foo =
> $_COOKIE["foo2"];}
> else {$foo = "bar2";}
>
> Senere i koden sættes en cookie med navnet "foo2" for at huske den
> valgte indstilling. (ud fra enten at der ikke er valgt noget eller
> hvad der er valt i requestet - som er GET).
>
> Uanset hva ender jeg med $foo = "bar2" og er ved at blive skør i
> hovedet fordi jeg ikke kan finde ud af hvorfor!

Jeg må indrømme at det ikke er den mest læselige kode jeg har set til dato.
Prøv at stille det lidt mere op, fx sådan:

$foo = "bar";
if($_REQUEST["foo2"]) {
$foo = $_REQUEST["foo2"];
} else {
if($_COOKIE["foo2"] AND $_REQUEST["foo2"] != "bar2") {
$foo = $_COOKIE["foo2"];
} else {
$foo = "bar2";
}
}

Derudover kan du bruge:

print var_dump($_REQUEST);
print var_dump($_COOKIE);

til at undersøge samtlige request- og cookie-vars. Dette giver mulighed for
hurtigt at lokalisere fejl med netop disse globale vars.

Held og lykke

--
M.V.H
Christian Iversen

Henrik Stidsen (26-01-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 26-01-03 18:04

Christian Iversen <iversen@it.dk> wrote in
news:b10rui$9he$2@news.cybercity.dk

> Jeg må indrømme at det ikke er den mest læselige kode jeg har
> set til dato. Prøv at stille det lidt mere op, fx sådan:

Jeg har ik noget problem med det - der er jo bare at læse fra en ende
af :)

> $foo = "bar";
> if($_REQUEST["foo2"]) {
> $foo = $_REQUEST["foo2"];
> } else {
> if($_COOKIE["foo2"] AND $_REQUEST["foo2"] != "bar2") {
> $foo = $_COOKIE["foo2"];
> } else {
> $foo = "bar2";
> }
> }

Syns næsten der der er mere uoverskueligt når det kun er en "action"
for hver if - men hver sin smag :)

> Derudover kan du bruge:
>
> print var_dump($_REQUEST);
> print var_dump($_COOKIE);

$_REQUEST[];
array(1) {
["foo2"]=>
string(5) "bar2"
}

(giver samme resultat selvom jeg angiver ?foo2=bar i URL´en...)

$_COOKIE[];
array(1) {
["foo2"]=>
string(5) "bar2"
}

- og det er vel også sådan det skal være ikke ? :(

--
..: Henrik Stidsen - HS235.dk ::...
Visit http://hs235.dk/drugs

Jesper Brunholm (26-01-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 26-01-03 22:55

Henrik Stidsen wrote:
> Jeg har følgende kode:
>
> $foo = "bar";
> if($_REQUEST["foo2"]){$foo = $_REQUEST["foo2"];}

Jeg ville bruge
if(isset($_REQUEST[....
eller
if(!empty($_REQUEST

- jeg kan ikke se at det gør forskellen i dette tilfælde, men hvis jeg
kan heller ikke garantere at jeg ikke har overset noget

> else if($_COOKIE["foo2"] AND $_REQUEST["foo2"] != "bar2"){$foo =
> $_COOKIE["foo2"];}

så vidt jeg kan se giver din elseif her ikke fuld mening - den er else
til at $_REQUEST["foo2"] er empty, så AND-delen er givet.

Hvis ikke noget af dette hjælper dig på vej, og du ikke får nogen hjælp
ved at checke indholdet af de globale variabler inden brug, så er jeg blank.

mvh

Jesper Brunholm


Henrik Stidsen (27-01-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 27-01-03 00:35

Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in
news:3e345922$1@news.wineasy.se

>> else if($_COOKIE["foo2"] AND $_REQUEST["foo2"] != "bar2"){$foo
>> = $_COOKIE["foo2"];}
>
> så vidt jeg kan se giver din elseif her ikke fuld mening - den
> er else til at $_REQUEST["foo2"] er empty, så AND-delen er
> givet.

Det giver meget mening tror jeg, men det giver vist mest mening med
de korrekte variabel navne i...

$reverseornot = "true";
if($_REQUEST["reverse"]){
   $reverseornot = $_REQUEST["reverse"];
} else if($_COOKIE["reverse"] AND $_REQUEST["reverse"] != "false"){
   $reverseornot = $_COOKIE["reverse"];
} else {
   $reverseornot = "false";
}

Hvis $reverse er "true" skal "listen" vises i omvendt rækkefølge, er
den false skal den vises i standard rækkefølgen (ligesom hvis
$reverse ikke er sat).

Hvis $reverseornot er "true" sættes (senere) en cookie med værdien,
samme procedure ved false.

Problemet er at *alt* er "false" uanset hva... (faktisk er
$_REQUEST["reverse"] også "false" selvom url'en er ?reverse=true).

--
..: Henrik Stidsen - HS235.dk ::...
Visit http://hs235.dk/drugs

Jesper Brunholm (27-01-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 27-01-03 11:10

Henrik Stidsen wrote:
> Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in
> news:3e345922$1@news.wineasy.se
>
>
>>>else if($_COOKIE["foo2"] AND $_REQUEST["foo2"] != "bar2"){$foo
>>>= $_COOKIE["foo2"];}
>>
>>så vidt jeg kan se giver din elseif her ikke fuld mening - den
>>er else til at $_REQUEST["foo2"] er empty, så AND-delen er
>>givet.

> Det giver meget mening tror jeg, men det giver vist mest mening med
> de korrekte variabel navne i...

jeps - og ikke mindst det korrekte indhold - det fortæller mig også
hvorfor du har brugt den form for if som du har i stedet for at bruge
isset() eller ligndende.
Du kan dog stadig hjælpe dig selv en del med at sikre at de warnings som
du sikkert ikke ser ikke indeholder værdifuld information

> $reverseornot = "true";

true er en boolean literal, og sættes derfor bedst uden "":
$reverseornot = true;

> if($_REQUEST["reverse"]){

bør være if($_REQUEST["reverse"] == true) ellers er du ikke sikker på om
du tjekker for positionens eksistens eller dens indhold...

fortsæt selv igennem resten...

/Jesper Brunholm


Henrik Stidsen (27-01-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 27-01-03 23:51

Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in
news:3e350575@news.wineasy.se

>> $reverseornot = "true";
>
> true er en boolean literal, og sættes derfor bedst uden "":
> $reverseornot = true;

Det gav den modsatte effekt - nu bliver alting "true"...
Kan det være fordi cookien læses som en string ?

--
..: Henrik Stidsen - HS235.dk ::...

Jesper Brunholm (28-01-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 28-01-03 11:25

Henrik Stidsen wrote:
> Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in
> news:3e350575@news.wineasy.se
>
>
>>>$reverseornot = "true";
>>
>>true er en boolean literal, og sættes derfor bedst uden "":
>>$reverseornot = true;
>
>
> Det gav den modsatte effekt - nu bliver alting "true"...
> Kan det være fordi cookien læses som en string ?

jeg er ikke 100% sikker på hvordan den læser en boolean true hvis du
sammenligner med en string, men det kan du let teste selvstændigt.

Du kender forskellen på == og === ikke?

true == "true" # sand efter min bedste overbevisning
true === "true" # falsk! idet enhederne er hver sin type og 3. = er
type-sensitivt.

Du har ikke kommenteret på de mange skriblerier om var_dump mv. som vi i
øvrigt har smidt efter den her tråd, har du implementeret dem?

/Jesper Brunholm

--
H.C. Andersen-Centret med nyt design: <http://www.andersen.sdu.dk/>
Phønix - dansk folk-musik fra unge musikere - <http://www.phonixfolk.dk/>


Henrik Stidsen (28-01-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 28-01-03 17:28

Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in
news:3E365A93.5090605@brunholm-scharff.dk

> Du kender forskellen på == og === ikke?

Egentlig ikke nej...

> true == "true" # sand efter min bedste overbevisning
> true === "true" # falsk! idet enhederne er hver sin type og 3. =
> er type-sensitivt.

Det må jeg lige prøve...

> Du har ikke kommenteret på de mange skriblerier om var_dump mv.
> som vi i øvrigt har smidt efter den her tråd, har du
> implementeret dem?

Jo jeg har:
news:Xns930FB7848BEE3HS235DK@130.225.247.90

--
..: Henrik Stidsen - HS235.dk ::...

Jesper Brunholm (28-01-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 28-01-03 17:55

Henrik Stidsen wrote:
> Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in
> news:3E365A93.5090605@brunholm-scharff.dk

[snip type-sensitiv if-equals]

> Det må jeg lige prøve...

jeg krydser fumlefingre og håber

>>Du har ikke kommenteret på de mange skriblerier om var_dump mv.
>>som vi i øvrigt har smidt efter den her tråd, har du
>>implementeret dem?
>
>
> Jo jeg har:
> news:Xns930FB7848BEE3HS235DK@130.225.247.90

ja - men lidt sporadisk, og jeg hentydede med "mv" lige så meget til de
forslag jeg er kommet med i de seneste 3 indlæg her i tråden, men hvis
du bare har taget det ind, så er jeg godt tilfreds

/Jesper Brunholm


Henrik Stidsen (28-01-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 28-01-03 22:58

Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in
news:3e36b5fd$1@news.wineasy.se

> ja - men lidt sporadisk, og jeg hentydede med "mv" lige så meget
> til de forslag jeg er kommet med i de seneste 3 indlæg her i
> tråden, men hvis du bare har taget det ind, så er jeg godt
> tilfreds

Nu er det lige jeg kommer til at tænke på hvor det egentlig er du vil
have === ind i billedet ?


$reverseornot = true;
if($_REQUEST["reverse"]){
   $reverseornot = $_REQUEST["reverse"];
} else if($_COOKIE["reverse"] AND $_REQUEST["reverse"] != false){
   $reverseornot = $_COOKIE["reverse"];
} else {
   $reverseornot = false;
}


Den første if skal netop bare checke om $_REQUEST["reverse"] findes.
Hvis den ikke gør skal der kigges efter en cookie. Hvis denne heller
ikke findes skal der sættes en default.

--
..: Henrik Stidsen - HS235.dk ::...

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste