[php] $_GET + $_POST in 1 script

Pagina: 1
Acties:

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 21:43

BierPul

2 koffie graag

Topicstarter
Ik heb een scipt draaien ongeveer zo
code:
1
2
Overzicht lijst met text links bla.php?aktie=form
Die submit dan naar zichzelf met een hidden field genaamd aktie.

Nu ben ik alle code netjes (Super Globals) aan het maken en nu dus mijn probleem.

Hoe kan ik aangeven of ie $_GET of $_POST moet gebruiken.

Ik dacht zelf aan 2 oplossingen.

*Alle forms op GET zetten (lijkt me niet handig ivm het kunnen refreshen bij inserts)

*Alle vars van te voren declaren als volgt
PHP:
1
<?if($REQUEST_METHOD == "POST"){     $action = $_POST['action'];}elseif(     $REQUEST_METHOD == "GET"){     $action = $_GET['action'];}?>

Wat me ook wat overdreven lijkt als je met een heleboel vars moet afvangen.

Iemand een idee :?

Ja man


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

$_REQUEST

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

is $_REQUEST een variabele?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 04 juni 2002 11:52 schreef RSD het volgende:
is $_REQUEST een variabele?
Probeer het es.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 06-09 19:42
Zelfs als je geen $_REQUEST zou hebben (maar er wel vanuit gaat dat je invoer ofwel via POST ofwel via GET variabelen binnenkomt, om de zaken nog eenvoudiger te houden), dan is deze natuurlijk eenvoudig zelf te construeren.

Uiteraard moet dat niet zoals jij dat probeerde te doen, wat een typische methode is van iemand die eigenlijk niet kan programmeren. (Dit klinkt vrij hard, mijn excuses daarvoor, maar ik kan geen andere conclusie trekken.)

Lees de eerste paar hoofdstukken uit de manual (over PHP in het algemeen en over arrays in het bijzonder) eens goed door.

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Je kan toch gewoon alleen kijken of een action is gezet als $_post en anders gewoon een foutmelding laten genereren.

Snap eerlijk gezegt niet heel goed wat je probeert te bereiken.

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 21:43

BierPul

2 koffie graag

Topicstarter
Nope daar gaat het niet om ik heb meerdere schermen in 1 script

voorbeeld

*lijst (wordt opgevraagd als ?aktie=lijst, of geen aktie aangegeven.

*edit (?aktie=edit komt via GET )

*edit_me komt via POST aangezien het form gesubmit wordt

*new (?aktie=nieuw via GET

Dat wilde ik simpel afvangen en dat is met $_REQUEST goed opgelost

Ja man


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Op dinsdag 04 juni 2002 11:53 schreef ACM het volgende:

[..]

Probeer het es.
Neuh , geen tijd voor, had er alleen nog nooit van gehoord of over gelezen, dacht dat het een 'joke' was :)

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 05-09 13:01
Op php.net bij predefined variables staat ook heel veel :)

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Je kan dan toch gewoon doen:
PHP:
1
<?if ($_GET[aktie] == "lijst") {    //Toon lijst}if ($_GET[aktie] == "edit") {    //Toon edit scherm}if ($_POST[edit_me]) {    //Doe edit_me ding}if ($_GET[aktie] == "new") {    //Toon new scherm}?>

Of met een case als je ook nog een default aktie hebt.

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 21:43

BierPul

2 koffie graag

Topicstarter
Klopt het was ook al zo opgezet, maar toen kreeg ik de bekenede php 4.2 problemen, en ik had geen zin om voor alles op te zoeken wat voor request er ook alweer gedaan werdt.

Voor toekomstige scripts is dit ook geen probleem alleen het aanpassen van het oude wild eik zo weinig mogelijk tijd in steken :P

Ja man


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 07:26
Wat was nou eigenlijk het probleem van dit topic :?
Datgene wat ACM aangaf ?

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op dinsdag 04 juni 2002 12:39 schreef kaandorp het volgende:
Je kan dan toch gewoon doen:
Misschien is het handig als de voorbeelden die worden gegeven wel valid php zijn. 't is al zo'n makelijk taaltje en toch blijken veel mensen er zo veel fouten in kunnen te maken.
PHP:
1
<?$value = $array[key];?>

Hierboven staat dus foutieve php. Zet voor de gein php's error_level eens op E_ALL ;)

Voor diegene die geen zin hebben om de error te lezen, of hem niet begrijpen, moet het het volgende zijn:
PHP:
1
<?$value = $array['key'];?>

ps. was niet persoonlijk bedoelt, maar zo af en toe moet 't er gewoon weer even uit ;)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 06-09 19:42
Op woensdag 05 juni 2002 00:51 schreef freak007 het volgende:
Misschien is het handig als de voorbeelden die worden gegeven wel valid php zijn. 't is al zo'n makelijk taaltje en toch blijken veel mensen er zo veel fouten in kunnen te maken.
Hmm, het zou wel cool zijn als topics de code tussen php-tags zou valideren. Dan zijn die dingen toch nog ergens goed voor 8-) (behalve voor 't verneuken van de layout).

Wat me trouwens ook opvalt is dat veel mensen scalaire waarden alsnog tussen quotes zetten, wanneer ze ge-echo-d worden. Is hier een reden voor? Anders is het namelijk een nogale zinloze complicatie van de code.

Ik heb het dan over dit fenomeen:
code:
1
2
  $a = 'whatever';
  echo "$a";

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
ps. was niet persoonlijk bedoelt, maar zo af en toe moet 't er gewoon weer even uit ;)
Is niet erg hoor. Dit is juist commentaar waar je wat aan hebt.
Ik zit eerlijk gezegd altijd te klooien met de quotes. Waar (in de php manual) kan ik terug vinden of ik nu wel of geen quotes moet gebruiken?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

kaandorp:
Is niet erg hoor. Dit is juist commentaar waar je wat aan hebt.
Ik zit eerlijk gezegd altijd te klooien met de quotes. Waar (in de php manual) kan ik terug vinden of ik nu wel of geen quotes moet gebruiken?
Why is foo[bar] wrong?

Verder hoef je nooit quotes te gebruiken als het gaat om de variabele alleen:
code:
1
2
3
4
$a = 'whatever';
$b = "$a"; // is zinloos, want: parsed toch alleen naar 'whatever',
         // net als wanneer je 
$b = $a;   // zou doen

Dit geldt in elk verband, dus ook wanneer je indexen van arrays aangeeft:
code:
1
2
3
$array = array ( 'a' => 'whatever' );
$a = 'a';
$b = $array [ $a ];

etcetera. Je moet het feit dat variabelen binnen dubbele quotes geparsed worden zien als een extra, niet als een must ;)

Zie eventueel...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Als we het toch over quotes hebben, haak ik er even op in.

Wanneer je strings wil vullen met een aantal woorden, zonder dat je er andere variabelen in zet, kan je beter enkele quotes gebruiken dan dubbele quotes. Voorbeeld:
PHP:
1
<?$a = "Dit is een string"; // Langzame versie$b = 'Dit is een string'; // Snelle versie.?>

Dit gedrag komt door de interne werking van php. Bij single-quotes hoeft php nl. niet te zoeken naar variabelen en wordt de data binnen de quotes direct aan de variabele gekoppeld. Wanneer de dubbele quotes gebruikt, moet php bij elk losse woord bekijken of het toevallig een variabele naam kan zijn. Hierdoor wordt elk woord apart toegevoegd aan de variabele. Naarmate je meer aparte worden in een string stop, loopt het verschil tussen dubbele en enkele quotes erg snel op.

</optimalisatie>

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 05 juni 2002 10:25 schreef drm het volgende:
Sterker nog, als het eerst een getal was wordt het dan ineens geconverteerd naar een string.
Op woensdag 05 juni 2002 12:46 schreef freak007 het volgende:
Als we het toch over quotes hebben, haak ik er even op in.

Wanneer je strings wil vullen met een aantal woorden, zonder dat je er andere variabelen in zet, kan je beter enkele quotes gebruiken dan dubbele quotes. Voorbeeld:
Das onzin :)
Sinds php4.1.0 is de parsing van die strings met "" soms zelfs sneller dan die met '' ;)
Oftewel, sindsdien zijn ze (vrijwel het verschil is verwaarloosbaar als dat er is) evensnel.

Je moet je met optimaliseren natuurlijk niet op de meest pietluttige dingetjes concentreren alleen maar omdat het dan 0.00001 seconde sneller parsed.
Terwijl je daarna een query uitvoert die 1.23 seconde doet over de executie ;)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 06-09 19:42
Op woensdag 05 juni 2002 12:46 schreef freak007 het volgende:
Wanneer je strings wil vullen met een aantal woorden, zonder dat je er andere variabelen in zet, kan je beter enkele quotes gebruiken dan dubbele quotes. Voorbeeld:
PHP:
1
<?  $a = "Dit is een string"; // Langzame versie  $b = 'Dit is een string'; // Snelle versie.?>
Ik neem aan dat dit alleen een merkbaar verschil gaat opleveren als je duizenden van dit soort regels in je code hebt staan. Aangezien je de strings waarmee je initialiseert (meestal) zelf moet intypen, zal het aantal ervan dusdanig beperkt blijven, dat het verschil in snelheid niet merkbaar is.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

ACM:
Sterker nog, als het eerst een getal was wordt het dan ineens geconverteerd naar een string.
Hoe bedoel je :?

ik snap 't al :D
je bedoelt dit:
code:
1
2
3
4
$a = 1; // $a is int 1
$b = "$a";   // $b is string '1'
echo gettype ( $a ), '<br>';
echo gettype ( $b ), '<br>';

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Maar dit heeft dan weer weinig met het oorspronkelijke topic te maken...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 06-09 19:42
Op woensdag 05 juni 2002 13:39 schreef zellufs het volgende:
Maar dit heeft dan weer weinig met het oorspronkelijke topic te maken...
Agreed, maar over het oorspronkelijke onderwerp valt eigenlijk niets meer te zeggen. :)

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op woensdag 05 juni 2002 12:56 schreef ACM het volgende:
Das onzin :)
http://www.php-accelerator.co.uk/PHPA_Article.pdf op pagina 3 onder het kopje Code Optimisation staat duidelijk wat anders.

Hoewel er niet staat aangegeven voor welke versies van php dit van toepassing is, is het artikel van april 2002 en toen was 4.1.0 ook al lang uit.
Je moet je met optimaliseren natuurlijk niet op de meest pietluttige dingetjes concentreren alleen maar omdat het dan 0.00001 seconde sneller parsed.
Terwijl je daarna een query uitvoert die 1.23 seconde doet over de executie ;)
Natuurlijk, maaraangezien dit toch voornamelijk een vorm van gewenning is, is het natuurlijk wel handig om altijd toe te passen.

* Rense Klinkenberg moet idd. toegeven dat dit soort optimalisaties wel een beetje gemiereneuk is, maar toch.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 05 juni 2002 16:31 schreef freak007 het volgende:
Natuurlijk, maaraangezien dit toch voornamelijk een vorm van gewenning is, is het natuurlijk wel handig om altijd toe te passen.
Benchmark et es ofzo :P

Volgens mij vindt je weinig winst met php-4.1+

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
ok, toch ff een bench:
tijden met dubbele quotes:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0.764783978462
0.904240965843
0.862272024155
0.889137983322
0.874935030937
0.841927051544
0.853307008743
0.848200082779
0.864190936089
0.877027034760
0.842846989632
0.927970051765
0.889292955399
0.882402062416
0.837540030479
0.849690914154
0.837967991829
0.905299901962
0.912399053574
0.911391973495

en met enkele
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0.737496972084
0.847262024879
0.873322010040
0.833164095879
0.854691982269
0.839188098907
0.853422045708
0.872129917145
0.853698968887
0.881326079369
0.759057998657
0.825513005257
0.881929039955
0.839360952377
0.883774995804
0.849238038063
0.850886106491
0.887060046196
0.855819940567
0.864727020264

testcode was:
PHP:
1
<?$start = microtime( );for ( $i = 0; $i < 100000; $i++ ){    $testarray[] = 'Dit is een pracht van een string';}$einde = microtime( );?>

of natuurlijk met dubbele quotes..

conclusie: het ontloopt elkaar idd heel weinig..

php versie: PHP Version 4.2.1 CGI api
webserver: Apache 2.0.x

edit: misschien waren gemiddelden handiger geweest, maar je krijgt zo ook een leuk beeld ;)

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Ik had eens stats gezien waarbij de verschillen best redelijk te noemen waren. Kijkend naar Bram's resultaten, hebben ze php dus blijkbaar intern al geoptimaliseerd.

Dan is het gebruik van enkele of dubbele quotes blijkbaar alleen nog maar om estethische redenen ;)

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
hmmz.. Rense wees mij erop dat zend optimizer deze dingen optimaliseerd, deze heb ik wel draaien..

iemand anders die een test kan doen? ;)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

http://gerard.yoursite.nl/got/quotes/bench.php
als 't goed is duurt 't per request zo'n 7 seconden

php 4.06, apache 1.3.?

't maakt echt heel weinig uit. Nota bene 1 miljoen iteraties en 't zwabbert nog ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1