Avatar billede googolplex Novice
06. februar 2004 - 22:19 Der er 16 kommentarer og
1 løsning

$_POST $_GET spørgsmål

Jeg sidder og roder med noget formular validering, hvor jeg har en variabel der indeholder værdien af 'method':

$method (indeholder enten 'get' eller 'post')

Nu vil jeg gerne bruge enten:

$_POST['var'] eller
$_GET['var']

Hvordan bestemmer jeg hvilken af dem, der skal bruges ud fra min variabel ?

I øjeblikket bruger jeg en 'if', men det er jo ikke så fikst. Kan man ikke gøre noget lignende:

$_$method['var'] ?

Jeg vil ikke bruge $_REQUEST.
Avatar billede ztyxx Nybegynder
06. februar 2004 - 22:24 #1
hvis det er et link, eks.: www.side.dk/fil.php?link=side
skal det være GET, er det en form du submitter bruger du POST

kig her
http://www.php.net/manual/en/language.variables.predefined.php
Avatar billede erikjacobsen Ekspert
06. februar 2004 - 22:27 #2
$_POST['var']=77;
  $_GET['var']=88;

  $method='GET';
  print ${"_$method"}['var']."\n";

  $method='POST';
  print ${"_$method"}['var']."\n";

?>
Avatar billede googolplex Novice
06. februar 2004 - 22:29 #3
Ja, det ved jeg godt, det er slet ikke det :)

Jeg har en formular klasse, hvor man speciferer om man vil bruge 'post' eller 'get' metoden.

Gennem hele klassen skal jeg så bruge en $_POST eller $_GET alt efter hvad variablen $this->Method indeholder (post eller get).
Avatar billede googolplex Novice
06. februar 2004 - 22:30 #4
erik: Takker, det var lige det :)

Svar ?
Avatar billede erikjacobsen Ekspert
06. februar 2004 - 22:30 #5
Nej tak, jeg samler ikke på point.
Avatar billede googolplex Novice
06. februar 2004 - 22:33 #6
For lige at være helt sikker, er dette korrekt:

$value = ${"_$this->mFormAttributes['method']"}[$this->someVar];
Avatar billede erikjacobsen Ekspert
06. februar 2004 - 22:37 #7
Du har vel prøvet, og det virker ikke, vel? Du skal enten:

  $value = ${"_{$this->mFormAttributes['method']}"}[$this->someVar];

eller

  $value = ${"_".$this->mFormAttributes['method']}[$this->someVar];
Avatar billede erikjacobsen Ekspert
06. februar 2004 - 22:37 #8
Og huske at get og post skal være med store bogstaver: GET og POST
Avatar billede googolplex Novice
06. februar 2004 - 22:58 #9
if (isset(${'_' . $this->mFormAttributes['method']}[$this->mFields['name']]))
        {
            $value = ${'_' . $this->mFormAttributes['method']}[$this->mFields['name']];
        }
        else
        {
            $value = $this->mFields['value'];
        }

Men uanset hvad, så bliver $value sat til $this->mFields['value'];. Jeg har også prøvet den anden.
Avatar billede googolplex Novice
06. februar 2004 - 23:11 #10
Erik: Please help, jeg kan ikke få det til at virke :(

Kan du se en fejl i ovenstående ?
Avatar billede erikjacobsen Ekspert
07. februar 2004 - 09:01 #11
Nej - men vis mig et lille eksempel, der ikke virker.
Avatar billede googolplex Novice
07. februar 2004 - 18:42 #12
Følgende er hele metoden og den virker ikke:

    function FetchValue($counter, $type)
    {
        if (isset(${'_' . $this->mFormAttributes['method']}[$this->mFields[$counter][$type]['name']]))
        {
            $value = ${'_' . $this->mFormAttributes['method']}[$this->mFields[$counter][$type]['name']];
        }
        else
        {
            $value = $this->mFields[$counter][$type]['value'];
        }

        return $value;
    }

Jeg har også prøvet ovestående med et simpelt array (fjernet $counter & $type), det har ingen inflydelse.

Jeg fandt følgende hos Zend:

http://www.zend.com/zend/comments/all_comments.php?article=art-sweat4&id=1499&pid=0

Så vidt jeg kan se, kunne det tyde på at der ikke findes en løsning...men jeg er ikke sikker.
Avatar billede erikjacobsen Ekspert
07. februar 2004 - 19:31 #13
Når jeg beder om et lille eksempel, så er det egentlig fordi jeg regner med at
du vil lave et lille, komplet eksempel, som viser problemet. Det du viser her
kan indeholde andre faktorer andetsteds i koden, og jeg gider ikke spilde min
til med "fejlfinding" uden at kende hele koden, og jeg gider heller ikke lave
et eksempel. Ikke altid i hvert fald.

Men, ok, isset er nok et problem. Der er heldigvis en langt mere elegant og
markant hurtigere løsning. Ideen kan du se i dette eksempel:



  $_POST['var']=77;
  $_GET['var']=88;

  $method='GET';
  print ${"_$method"}['var']."\n";

  $method='POST';
  print ${"_$method"}['var']."\n";

  class goog {

    var $m;
    var $_MIN;

    function goog($m) {
      if ($m=="POST") {
        $this->_MIN=&$_POST;
      } else {
        $this->_MIN=&$_GET;
      }
    }

    function FetchValue() {
      if (isset($this->_MIN['var'])) {
        $value = $this->_MIN['var'];
      } else {
        $value = "Forget it";
      }
      return $value;
    }


  }

  $g = new goog('POST');
  print $g->FetchValue()."\n";

  $g = new goog('GET');
  print $g->FetchValue()."\n";

?>
Avatar billede googolplex Novice
08. februar 2004 - 00:07 #14
Takker Erik, den sidder lige i øjet!

Jeg har dog ikke testet 'helt' færdigt, da min klasse er temmelig omfattende.

Jeg var ikke helt sikker på, hvad du ønskede at se mht. kode, men jeg er glad for at du bar over med mig :)

Jeg er ikke helt sikker på konsekvenserne af (?):

$this->_MIN=&$_POST;

i stedet for:

$this->_MIN=$_POST;

...Har ikke leget så meget med referencer.

Jeg lukker spørgsmålet, hvis du ombestemmer dig mth. point, så så sig til.
Avatar billede googolplex Novice
08. februar 2004 - 00:07 #15
lukker
Avatar billede erikjacobsen Ekspert
08. februar 2004 - 07:38 #16
Der er bare ingen grund til at tage en kopi at hele arrayet, derfor &

Desuden kan man lave ændringer i $_MIN som så afspejles i $_POST/$_GET, fuldstændig
som om der stod $_POST/$_GET direkte i koden.
Avatar billede googolplex Novice
08. februar 2004 - 08:25 #17
Ok, takker endnu engang for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester