[PHP] Superglobal troubles.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Toen ik gisteren morgen een script begon te schrijven, stuitte ik plotseling op het probleem dat mijn $_POST variabelen niet meer werkten na het submitten van een form, dit werkte echter alleen niet bij case 'edit', bij de rest van het script wel.
Hij maakt precies van elke $_POST een $_GET. Wanneer ik global $HTTP_POST_VARS doe, en dan print_r dan krijg ik wel netjes een array met alle waarden erin. -zucht-

$_REQUEST doet het niet, $_POST ook niet, $_GET wel.
De source kan hier gevonden worden. Om het script te testen moet je deze url gebruiken.

Oh ja, misschien is het belangrijk te weten dat ik met phpversion 4.3.3 werk, op men webserver is het 4.3.4 en daar heb ik hetzelfde probleem. Ligt het misschien aan de php.ini settings? Register_globals staat natuurlijk off.

de form method="post" en de $_SERVER['REQUEST_METHOD'] is wel degelijk POST
wat doe ik fout? De manier waarop ik script mag dan in dat case 'edit': gedeelte wel raar zijn, maar ik denk dat het niet fout is en moet werken.

Alvast bedankt, ik hoop dat het allemaal een beetje duidelijk is.

[ Voor 6% gewijzigd door Verwijderd op 11-01-2004 09:58 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Eerlijk gezegt zou ik niet zo weten wat er nou fout gaat. Wat je eventueel zou kunnen proberen is om de crew_id en de mode als hidden input waardes mee te sturen. Mischien dat het dan wel goed werkt? (ik zou ook eigenlijk niet weten waarom dan wel, maar het is een poging waard als echt niets lukt). Als je er echt niet uitkomt zo, dan zou ik het script gewoon stukje voor stukje gaan herschrijven. Vaak lukt het dan wel goed.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm mja maar PHP is zo lame :p
Verder als ik <form name="url.php?mode=edit&crew_id=12"> is die crew_id wordt die crew_id dan via $_GET verzonen ipv $_POST?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 11 januari 2004 @ 14:16:
Verder als ik <form name="url.php?mode=edit&crew_id=12"> is die crew_id wordt die crew_id dan via $_GET verzonen ipv $_POST?
Ja

[ Voor 12% gewijzigd door gorgi_19 op 11-01-2004 14:18 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
<form method="post" action="' . $_SERVER['PHP_SELF'] . '?mode=edit">
Da's natuurlijk vragen om Superglobal-troubles!

Je post een formulier met als method POST en wil tegelijkertijd via een GET-achtig iets (je stopt mode immers in de url) ook nog waardes gaan doorgeven 8)7
Gewoon netjes in een hidden input tag zetten! :)

Acties:
  • 0 Henk 'm!

Verwijderd

marty schreef op 11 januari 2004 @ 15:10:
[...]

Da's natuurlijk vragen om Superglobal-troubles!

Je post een formulier met als method POST en wil tegelijkertijd via een GET-achtig iets (je stopt mode immers in de url) ook nog waardes gaan doorgeven 8)7
Gewoon netjes in een hidden input tag zetten! :)
Ik heb die methode ook wel is toegepast, en tot dusver heb ik er nog geen problemen mee gehad :?

En hoe verklaar je dat het bij modus=add, wel goed gaat.. ;)

Als ik lokaal het volgende probeer, werkt het ook gewoon:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
     
     
    switch ($_GET['mode']) 
    { 
        case 'edit': 
            echo '<pre>'; 
            echo "<b>POST:</b> \n"; 
            print_r($_POST); 
            echo "\n\n\n"; 
            echo "<b>GET:</b> \n"; 
            print_r($_GET); 
            echo "\n\n\n"; 
            echo "<b>REQUEST_METHOD:</b> "; 
            echo $_SERVER['REQUEST_METHOD']; 
            echo '</pre>'; 
        break; 

        default: 
            echo 'modus onbekend..'; 
        break; 
    } 
     

} 
else 
{ 
?> 
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?mode=edit"> 
     #1 <br/> 
     <input type="text" name="veld1" size="20"> <br/> 
     #2 <br/> 
     <input type="text" name="veld2" size="20"> <br/> 
     #3 <br/> 
     <input type="text" name="veld3" size="20"> <br/> 
     <input type="submit" name="Submit" value="Toevoegen?"> 
    </form> 

<?php 
} 
?>



Hier ga je de fout in TS:

PHP:
1
2
3
4
5
6
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['crew_id'])) 
    { 
         
    print_r('Post: ' . $_POST); 
?>


In die laatste voorwaarde, moet dat geen GET zijn? ;)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Er zijn maar een paar browsers die dat kennelijk niet goed slikken. En ik ben ze ook niet tegengekomen.

(Het was iets op de mac, en dat valt meestal buiten mijn doelgroep ;))

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

marty schreef op 11 januari 2004 @ 15:10:
[...]

Da's natuurlijk vragen om Superglobal-troubles!

Je post een formulier met als method POST en wil tegelijkertijd via een GET-achtig iets (je stopt mode immers in de url) ook nog waardes gaan doorgeven 8)7
Gewoon netjes in een hidden input tag zetten! :)
Neehoor, dat moet geen enkel probleem opleveren. Deze methode wordt veelvuldig toegepast, je moet alleen opletten welke var je op welke manier verstuurd.

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 11 januari 2004 @ 20:28:
[...]

Neehoor, dat moet geen enkel probleem opleveren. Deze methode wordt veelvuldig toegepast
ob_start(), or die(), etc. worden ook veelvuldig toegepast. Maar dat wil nog niet zeggen dat het altijd goed :)

Ik vind het echt een vieze methode en het zou mij niet verbazen als dat problemen oplevert.
Bovendien wordt je code er ook superwazig was. Je gaat je formulier verwerken en zit met allerlei $_POST variabelen te werken en dan staat er ineens een $_GET tussen. :/ Helder programmeren is anders...

Acties:
  • 0 Henk 'm!

Verwijderd

marty schreef op 11 januari 2004 @ 20:52:
[...]


ob_start(), or die(), etc. worden ook veelvuldig toegepast. Maar dat wil nog niet zeggen dat het altijd goed :)
Met die opmerking bedoelde ik ook niet het goed is, maar dat het kan :)
Ik vind het echt een vieze methode en het zou mij niet verbazen als dat problemen oplevert.
Ik zie niet wat er vies aan is? Je krijgt gewoon variabelen binnen via GET en POST, dat levert geen problemen op.
Bovendien wordt je code er ook superwazig was. Je gaat je formulier verwerken en zit met allerlei $_POST variabelen te werken en dan staat er ineens een $_GET tussen. :/ Helder programmeren is anders...
Dit is een kwestie van persoonlijke smaak. Persoonlijk vind ik dat je code er niet wazig van wordt. Je ziet precies waar een variabele vandaan komt. Als je voor jezelf maar consequent bent maakt het niets uit. Ik vind het zelf handiger omdat ik zo direct zie welke variabelen ik in principe zelf heb meegestuurd ($_GET, moeten desondanks toch gecheckt worden) en de variabelen welke een gebruiker heeft ingevuld ($_POST).

[ Voor 11% gewijzigd door Verwijderd op 11-01-2004 21:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de uitleg al, ik werk namelijk niet graag met <input hidden fields> omdat je dan makkelijk waardes in kan vullen die helemaal niet gevraagd worden!
Het is naar mijn mening ook geen nette methode...

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 12 januari 2004 @ 16:45:
Bedankt voor de uitleg al, ik werk namelijk niet graag met <input hidden fields> omdat je dan makkelijk waardes in kan vullen die helemaal niet gevraagd worden!
Dat moet je me toch eens uit leggen....
Het is naar mijn mening ook geen nette methode...
Waarom is het niet net?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik dacht toch echt dat variabelen in de url gemakkelijker aan te passen zijn dan variabelen in een hidden field die gepost worden. Het is een veel nettere manier om hidden fields te gebruiken allereerst omdat het na het submitten nog steeds verborgen is en niet in de url staat en omdat hidden field hiervoor zijn uitgevonden. En ik vraag me af wat je bedoelt met het aanpassen hiervan want dat is toch echt niet zo maar te doen. Een hidden field is namelijk, zoals de naam al doet vermoeden, verborgen voor de bezoeker. Iemand die HTML kan lezen weet het wel te vinden, maar die kan er niets mee. En als die de hidden velden kan aanpassen, kan die ook alles invullen als actie voor het formulier dus zo veel zou dat niet uitmaken.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Je kan met een stukje javascript in je adresbalk net zo makkelijk de action van een form (inclusief GET variabelen) wijzigen als de inhoud van een hidden field.
Lokaal de source opslaan, en ze zijn beiden ook net zo makkelijk te wijzigen.

Verder ben ik het met iedereen eens die zegt dat het gewoon ranzig is om GET en POST door elkaar heen te gebruiken, daarbij heb ik ooit wel eens een gevalletje browser (ik meen een oude IE versie op de MAC) gehad waarbij de GET variabelen van de action NIET meegestuurd werden.

Gewoon netjes hidden fields gebruiken dus :)

Intentionally left blank

Pagina: 1