Avatar billede nemlig Professor
18. oktober 2011 - 22:57 Der er 16 kommentarer og
1 løsning

Underlig $_POST værdi ved submit

Hmmm - jeg tror det rabler for mig.... :(
Se lige denne simple kode:

echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
.......kode kode kode.......
<button name='mySubmit' value='1' class='knap' type='submit'>Ret</button>
</form>

Ved submit har værdien på $_POST[‘mySubmit'] hidtil været = 1
Nu er værdien pludselig = "Ret" (altså teksten på knappen).

Jeg har godt nok rettet lidt forskelligt, men kan ikke finde ud, hvad årsagen er?
Avatar billede olebole Juniormester
18. oktober 2011 - 23:11 #1
<ole>

Brug altid et hidden field til den slags:


echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
echo '<input type="hidden" name="mySubmit" value="1">';
.......kode kode kode.......
<button class='knap' type='submit'>Ret</button>
</form>


/mvh
</bole>
Avatar billede nemlig Professor
18. oktober 2011 - 23:18 #2
Jo, men hvorfor har det ændret sig.
Jeg har 3 submit-knapper, som gør noget forskelligt, hvorfor jeg har sat

value=1 på knap1
value=2 på knap2
value=3 på knap3

Og så tjekker med med
if($_POST['mySubmit'] == 1) { ...
osv.

Det har virket i 2 år nu, men nu skal jeg tjekke med
if($_POST['mySubmit'] == 'Ret') { ...
Avatar billede olebole Juniormester
18. oktober 2011 - 23:22 #3
Hvilken browser og hvilken DTD?
Avatar billede nemlig Professor
18. oktober 2011 - 23:28 #4
IE9, men nu hvor du spørger, så prøvede jeg lige i kompatibilitetstilstand samt i IE8 mode.

Så virker det.

Jeg tester i øvrigt lokalt med WAMPSERVER, PHP ver. 5.3.

Hmm - hvad gør jeg så, når jeg har 3 knapper? Jeg kan selvfølgelig lave en

if($_POST['mySubmit'] == 1 OR $_POST['mySubmit'] == "Ret") { ...
Avatar billede olebole Juniormester
18. oktober 2011 - 23:31 #5
Hos mig skriver denne kode:


<?php
if (!empty($_POST)) {
    var_dump($_POST);
}
?>

<form action='' method='post'>
    <button name='mySubmit' value='1' class='knap' type='submit'>Ret</button>
</form>


- dette i IE9, Firefox, Opera og Safari (Windows 7):


array
  'mySubmit' => string '1' (length=1)


Det ændrer dog ikke ved, at god kodeskik er at bruge et hidden field til at diskriminere med på serveren  =)
Avatar billede nemlig Professor
18. oktober 2011 - 23:35 #6
Ja - jeg tog fejl. Min IE9 stod med:
Browsermode = IE9
Documentmode = IE7

Det er IE7-mode, der driller.

Men hvordan kan jeg anvende hidden field, når jeg har 3 knapper?
Avatar billede olebole Juniormester
18. oktober 2011 - 23:35 #7
Jeg så først din kommentar (#4), efter jeg selv havde skrevet, men har nu testet og har samme oplevelse. Det understreger blot, at løsningen er et hidden field.

Du sætter bare værdien på feltet med JavaScript i stil med:


echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
echo '<input type="hidden" name="mySubmit" value="">';
.......kode kode kode.......
<button class='knap' type='submit' onclick="this.form.mySubmit.value='1'">Ret</button>
</form>

Avatar billede olebole Juniormester
18. oktober 2011 - 23:37 #8
Knappens onclick event fyres af lige før dens default handling (som er at submitte formen). Derfor sættes værdien, lige inden formen submittes  *o)
Avatar billede nemlig Professor
18. oktober 2011 - 23:41 #9
Sejt - Jeg er virkelig glad for din detaljerede hjælp. Det er super med dine forklaringer.

Er du begyndt at samle point, så smidt venligst et svar.
Avatar billede olebole Juniormester
19. oktober 2011 - 00:03 #10
Det glæder mig, du hører til de nysgerrige, der har mod på at 'arkivere' en lille teknisk uddybning. Det er bedre end points - så du lægger selv et svar  *o)
Avatar billede nemlig Professor
19. oktober 2011 - 08:40 #11
Jeg suger til mig med største fornøjelse.
Det virker perfekt.
Tusind tak endnu engang.
Avatar billede jakobdo Ekspert
19. oktober 2011 - 15:14 #12
Hvad er årsagen til du bruger <button> og ikke bare <input type="submit"> ?
Avatar billede nemlig Professor
19. oktober 2011 - 15:18 #13
Jeg mener, at en rigtig rar gut her på Eksperten hjalp mig engang med noget kode, og jeg tror at han i koden foreslog <button>. Men det kunne du måske aldrig finde på, at foreslå? ;)
Avatar billede jakobdo Ekspert
19. oktober 2011 - 15:44 #14
Aner ikke hvad du snakker om. :o) Men kunne du ikke opnå samme resultat, med <input type="submit" knapper ?
Mener nemlig IE har et problem med netop at sende disse values med.
Avatar billede nemlig Professor
19. oktober 2011 - 15:49 #15
Jo det må jeg kunne.
Jeg har anvendt OleBole's forslag, og det har jeg testet i forskellige IE versioner og Firefox.
Det fungerer også.
Avatar billede jakobdo Ekspert
19. oktober 2011 - 15:52 #16
Synes måske bare at tilføje js til hver knap, er ekstra, hvis altså en <input type="submit"> kan gøre det samme.
Et problem kan selvfølgelig være, at value="1" også vil være teksten på knappen. (måske derfor button blev valgt i sin tid) :o)
Avatar billede olebole Juniormester
19. oktober 2011 - 18:09 #17
Der er også <input type="image" src="foo.png"> , men den sender koordinaterne til klikket med. Det kan være smart ved visse ting, men har forvirret mange i årenes løb  =)

I 'gamle dage' renderede BUTTON elementet pænere end INPUT - og desuden kan man bruge ikoner og tekst som indhold - hvilket gjorde, at mange (f.eks. undertegnede) foretrak BUTTONs og stadig bruger dem
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