/ 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 $_REQUEST['mode'];
Fra : Bo Rattenborg


Dato : 04-08-02 01:58

jeg benytter $_REQUEST['mode'] til at læse værdien mode. Men hvis mode ikke
er difineret i url'n, så får jeg fejlmeddelelsen:
Notice: Undefined index: mode in index.php on line 13

Hvordan løser jeg dette problem ?

Bo



 
 
Bo Rattenborg (04-08-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 04-08-02 08:21

jeg burde nok nævne at det er PHP version 4.2.2 jeg anvender

Bo



Jesper & Pernille (04-08-2002)
Kommentar
Fra : Jesper & Pernille


Dato : 04-08-02 09:19

Bo Rattenborg wrote:
> jeg benytter $_REQUEST['mode'] til at læse værdien mode. Men hvis mode ikke
> er difineret i url'n, så får jeg fejlmeddelelsen:
> Notice: Undefined index: mode in index.php on line 13

det må vel blive

if(!empty($_REQUEST['mode'])){
$mode=$_REQUEST['mode'];
}else{
$mode=$default_vaerdi;
}

Hvis du har mange variabler du trækker ud og checker kan det betale sig
at lave noget i retning af: (håber ikke jeg har misforstået dit
spørgmål, for så er det et langt forkert svar )

<?php

$RequestVars=array(
"mode"=>0,
"id"=>0 #etc
);

foreach($RequestVars as $noegle => $indhold){
if(!empty($_REQUEST["$noegle"])){
$$noegle=$_REQUEST["$noegle"]; /* $$ sørger for at variablen som
hedder $noegle bliver sat. "Variable variables" i manualen */
} else {
$$noegle=$indhold;
}
/* gør andre nyttige ting til input-check, såsom striptags og
addslashes afhængigt af hvor dit input skal bruges */
}
#tester:
echo "mode: $mode, id: $id";
?>

mvh

Jesper Brunholm


Bo Rattenborg (04-08-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 04-08-02 09:26

> foreach($RequestVars as $noegle => $indhold){
> if(!empty($_REQUEST["$noegle"])){
> $$noegle=$_REQUEST["$noegle"]; /* $$ sørger for at variablen som
> hedder $noegle bliver sat. "Variable variables" i manualen */
> } else {
> $$noegle=$indhold;
> }

puha det er da omstændigt, før i tiden kunne $mode ganske normalt aflæses,
skyldes besværet register_globals = Off ?

Og hvorfor får man fejl når man tjekker på en værdi - 'bare' fordi den er
tom ?


Bo



Jesper & Pernille (04-08-2002)
Kommentar
Fra : Jesper & Pernille


Dato : 04-08-02 09:35

Bo Rattenborg wrote:
>>foreach($RequestVars as $noegle => $indhold){
>> if(!empty($_REQUEST["$noegle"])){
>> $$noegle=$_REQUEST["$noegle"]; /* $$ sørger for at variablen som
>>hedder $noegle bliver sat. "Variable variables" i manualen */
>> } else {
>> $$noegle=$indhold;
>> }
>
>
> puha det er da omstændigt, før i tiden kunne $mode ganske normalt aflæses,
> skyldes besværet register_globals = Off ?

ja - og grunden til at jeg opbygger arrayet med vars som jeg checker er
at jeg ikke vil ødelægge den øgede sikkerhed som det giver - ellers
kunne man jo bare skrive foreach($_REQUEST

> Og hvorfor får man fejl når man tjekker på en værdi - 'bare' fordi den er
> tom ?

Spørg ikke mig - men det har vist været sådan meget længe, _hvis_ man
altså er på en server hvor der er sat error_level = all &e^notice (frit
fra hovedet, ingen garantier for den sættings korrekthed ). Du får
jo ikke en fejl (error eller warning) men en notice, så vidt jeg har
forstået implicit om at du har nedsat dit scripts afviklingshastighed og
kan kode bedre for at undgå dette... Så har jeg vist alligevel svaret
lidt på "hvorfor"


Du kan også gøre noget ved den side af sagen ved at ændre på din
fejlmeldingsprocedure (error_handler()), men det er da en lidt "loose"
håndtering af problemet .

mvh

Jesper Brunholm


Bo Rattenborg (04-08-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 04-08-02 12:31

Tak for den tid du allerede har brugt på en novice som mig . måske kan
du kort forklare hvad ovenstående
'as $noegle => $indhold' gør ? - jeg har nu arbejdet med PHP i flere år, men
holder mig af - pga. evnerne - til en simpel programmerings teknik, men er
flere gang stødt på => -> uden helt at forstå hvad de egentlig gør....

Bo



Bo Rattenborg (04-08-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 04-08-02 13:23

hmm hvis nu det omskrives til en funktion, hvordan gør jeg så bedst /
nemmest værdierne globale ?

Bo



Bo Rattenborg (04-08-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 04-08-02 13:28

jeg fandt selv svaret:
$GLOBALS["$key"] = $_REQUEST["$key"];

eller bør jeg benytte mig af en anden metode ?

hvad med $value vil den ikke altid være 0 da det først er i linien hvor
$_REQUEST["$key"] er, at værdien hentes ?

Bo



Jesper Brunholm (04-08-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 04-08-02 14:08

Bo Rattenborg wrote:
> jeg fandt selv svaret:
> $GLOBALS["$key"] = $_REQUEST["$key"];
>
> eller bør jeg benytte mig af en anden metode ?

du kan gøre det "med det samme"

foreach($RequestVars as $noegle => $indhold){
if(!empty($_REQUEST["$noegle"])){
$GLOBALS["$noegle"]=$_REQUEST["$noegle"]; /* $$ sørger for at
variablen som hedder $noegle bliver sat. "Variable variables" i manualen */
} else {
$$noegle=$indhold;
}
/* gør andre nyttige ting til input-check, såsom striptags og
addslashes afhængigt af hvor dit input skal bruges */
}

> hvad med $value vil den ikke altid være 0 da det først er i linien hvor
> $_REQUEST["$key"] er, at værdien hentes ?

ovenstående skulle gøre det

mvh

Jesper

--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


Jesper Brunholm (04-08-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 04-08-02 14:04

Bo Rattenborg wrote:
> hmm hvis nu det omskrives til en funktion, hvordan gør jeg så bedst /
> nemmest værdierne globale ?

hvorfor vil du det (hvad får du ud af det, andet end noget bøvl)

Umiddelbart tror jeg at du bør returnere værdierne ved funktionens
afslutning.

mvh

Jesper

--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


Jesper Brunholm (04-08-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 04-08-02 14:02

Bo Rattenborg wrote:
> Tak for den tid du allerede har brugt på en novice som mig . måske kan
> du kort forklare hvad ovenstående
> 'as $noegle => $indhold' gør ? - jeg har nu arbejdet med PHP i flere år, men

For mig er det i den sammenhæng en del af foreach-konstruktionen (måske
en datalog kan uddybe på det - jeg kan ikke :))

normalt gør det at man kan sætte en nøgle/key i et array til at have en
værdi i stedet for at skulle nøjes med at indeksere med 0,1,2 etc.
Flg to arrays er faktisk identiske, i nummer to har jeg bare vist
nøglerne eksplicit.

$eks = array(
"a",
"b",
"c"
);

$eks2 = array(
0 => "a",
1 => "b",
2 => "c"
);

man kan så også bruge strenge som nøgler:

$eks3=array(
"foerstebogstav" => "a",
"andetbogstav" => "b"
);

> holder mig af - pga. evnerne - til en simpel programmerings teknik, men er

Ouh - det skal du lade være med (undskyld jeg siger det). Du spilder i
den grad din egen tid ved ikke at uddybe din viden om hvad sproget kan
når du støder ind i et problem - php er _så_ meget stærkere og hurtigere
når man kender en del til det, end når man benytter de første 5-10% af
dets funktioner...

> flere gang stødt på => -> uden helt at forstå hvad de egentlig gør....

der er forskel på hvad de gør. => er assignment af keys, hvorimod -> har
med tilhørsforhold i objekt orienteret programmering at gøre.

mvh

Jesper


--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


Flemming Joensson (04-08-2002)
Kommentar
Fra : Flemming Joensson


Dato : 04-08-02 09:48

"Bo Rattenborg" <bo.rattenborg@[nospam]mail.dk> wrote in
news:3d4ce4fb$0$249$ba624c82@nntp03.dk.telia.net:

>
>

Ja, det er fordi register_globals er off. Hvis den stod til on- ville
variablen befinde sig i det "globale" scope og kunne tilgås på samme
måde som alle andre globale variable.

> Og hvorfor får man fejl når man tjekker på en værdi - 'bare' fordi
> den er tom ?

Det er fordi den tilgås som et array, og du prøver at tilgå et index i
arrayet der ikke eksisterer. Lidt ligesom hvis du laver en løkke der
læser alle værdier i et array og kommer til at lave løkken så den går
ud over størrelsen af arrayet.

Prøv eventuel noget i stil med
if(isSet($_REQUEST)
{
   if(isSet($_REQUEST['mode']))
   {
       echo $_REQUEST['mode'];
   }
}

Eller denne som jeg tog fra PHP.net

function display($ar){

while(list($key,$val)=each($ar)){
echo "<ul>";
echo "$key = $val \n\n";
if (is_array($val)){
display($val);
}
echo "</ul>";
}//while

}//function

display($_REQUEST);

Den burde så returnere en ikke-ordnet liste i HTML med de variable du
sender med siden. Med lidt få ændringer kan du bruge den til at tjekke
for hvilke variable du har at arbejde med.

Flemming

Bo Rattenborg (04-08-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 04-08-02 10:08

tak til jer begge - jeg kikker på det.......



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

Månedens bedste
Årets bedste
Sidste års bedste