Avatar billede nemlig Professor
22. juli 2008 - 20:51 Der er 29 kommentarer og
1 løsning

Disabled input-felt med i $_POST

Hej.
Jeg har en form, hvor jeg har nogle input-felter.
Disse felter opdates via en Submit-knap og hvor input-værdierne lægges i nogle $_POST variabler.

Jeg har opdaget, at hvis jeg har disabled et felt, fordi det skal være låst, så kommer værdien ikke med i $_POST variablen.

Er der en simpel løsning på det?
Avatar billede showsource Seniormester
22. juli 2008 - 20:55 #1
Lad det være readonly i stedet for disabled
Avatar billede nemlig Professor
22. juli 2008 - 21:08 #2
Det løser ovennævnte problemstilling. Fordelen ved "disabled er, at feltet er nedtonet og tabulartor ikke virker på feltet.
Kan det også løses med readonly? Jeg kan selvfølgelig lave en anden class og dermed løse nedtoningen. Men andre forslag?
Avatar billede erikjacobsen Ekspert
22. juli 2008 - 21:16 #3
Bruge disabled og yderligere et hidden-felt med samme værdi, og et andet navn. Det felt vil komme med over i $_POST
Avatar billede janpolsen Nybegynder
22. juli 2008 - 21:24 #4
Du kan altid ændre stylen, hvis du f.eks. laver feltet readonly. Den style kan afspejle den style som en "normal" disabled input-felt har.
Avatar billede nemlig Professor
22. juli 2008 - 21:28 #5
Mener du noget i retning af:

<input type='text' disabled name='andet_navn' value='$row[depositum]'>
<input type='text' hidden name='depositum' value='$row[depositum]'>

Så overføres $row[depositum] til $_POST[depositum] og feltet er nedtonet og tab-virker ikke på feltet?
Avatar billede coderdk Praktikant
22. juli 2008 - 21:40 #6
næsten

<input type='text' disabled='disabled' name='andet_navn' value='$row[depositum]'>
<input type='hidden' name='depositum' value='$row[depositum]'>
Avatar billede janpolsen Nybegynder
22. juli 2008 - 21:49 #7
Du skal lige være klar over, at uanset hvordan du laver ovenstående (med disabled, readonly og/eller hidden felter), så forhindrer det ikke en person i at ændre på talene.

Så hvis det er noget vigtig (hvilket det ofte er når der omhandler penge), så bør evt. lave det på en anden måde.
Avatar billede coderdk Praktikant
22. juli 2008 - 21:51 #8
janpolsen har helt ret, du bør faktisk tage tallet fra databasen (eller hvor det er fra) og bruge det - ikke fra formen ;)
Avatar billede nemlig Professor
22. juli 2008 - 21:52 #9
Det har jeg hørt om, men der er tale om et internt administrativt system med login Sessions osv. og kun 1 bruger. Så problemet er nok ikke til stede i dette tilfælde.
Avatar billede nemlig Professor
22. juli 2008 - 22:22 #10
Tak for jeres input. Alle har bidraget, så send venligst et svar. Jeg har forhøjet, så der er lidt mere at give af.
Avatar billede erikjacobsen Ekspert
22. juli 2008 - 22:39 #11
Ingen point til mig, tak.
Avatar billede coderdk Praktikant
22. juli 2008 - 22:43 #12
jeg springer også over :)
Avatar billede janpolsen Nybegynder
22. juli 2008 - 22:53 #13
Jeg tror ikke jeg har bidraget med noget til løsningen, blot at du evetuelt skal være opmærksom på brugen af disabled/readonly/hidden :).
Avatar billede nemlig Professor
22. juli 2008 - 22:59 #14
Showsource og janpolsen - send bare et svar. Jeres input har også givet lidt til rygsækken.
Avatar billede janpolsen Nybegynder
22. juli 2008 - 23:15 #15
Haha, ok tak :)
Avatar billede showsource Seniormester
23. juli 2008 - 06:20 #16
Ingen point,  ellers tak
Avatar billede nemlig Professor
23. juli 2008 - 08:44 #17
Janpolsen. Kan du give en kort forklaring på, hvordan jeg kan opdatere nogle MySQL-data via input felter og uden brug af $_POST - altså så personer ikke kan ændre i talene. Eller måske bare et link til noget, som beskriver problemstillingen og løsningen.
Avatar billede erikjacobsen Ekspert
23. juli 2008 - 09:48 #18
Du kan gemme oplysninger i en session-variabel, i stedet for i din <form>.
Avatar billede nemlig Professor
23. juli 2008 - 09:55 #19
øhh - sådan her:
Echo "<input type='text' name='depositum' value='$row[depositum]'>";
$_SESSION['depositum'] = $_POST['depositum'];

Og så arbejde videre med $_SESSION['depositum']??
Avatar billede erikjacobsen Ekspert
23. juli 2008 - 10:03 #20
Hvis du både vil have det i et felt, og i en session-variabel skal du:

Echo "<input type='text' name='depositum' value='$row[depositum]'>";
$_SESSION['depositum'] = $row['depositum'];

Men de er to slags data: dem brugeren skal kunne ændre - du kan nøjes med et felt i din <form>. Og dem brugeren ikke må ændre - du kan nøjes med en session-variabel.
Avatar billede erikjacobsen Ekspert
23. juli 2008 - 10:04 #21
Og så skal man nok som det første på siden i PHP-koden skrive: session_start();
Så er man sikker på sessions virker på alle servere.
Avatar billede nemlig Professor
23. juli 2008 - 10:33 #22
Bare lige for at være helt sikker.
Jeg kommer altså ikke udenom, at jeg skal bruge $_POST...., når brugeren skal kunne ændre dataene. Og dermed er det ikke nødvendigt at anvende $_SESSION til den type.

S_SESSION er kun, når brugeren ikke skal kunne rette i dataene.
Er det korrekt forstået?
Avatar billede w13 Novice
23. juli 2008 - 10:36 #23
En sessionvariable huskes bare, selvom man går til en ny side, i modsætning til post-variabler, som kun huskes lige efter submit.
Avatar billede janpolsen Nybegynder
23. juli 2008 - 11:53 #24
G'morgen :)

Som det allerede er nævnt, så er sessionvariabler en måde at gøre det på, men hvis du i første omgang slår tallet op fra databasen ($row['depositum']), hvorfor er du så interesseret I at føre det med over og så skrive det til databasen igen?

Under alle omstændigheder så bør du, hvis du begynder at bruge sessions, lave en session_regenerate_id() efter hver session_start(). Det er en måde at undgå session fixation/hijacking.
Avatar billede nemlig Professor
23. juli 2008 - 12:15 #25
Jan Polsen: Godmorgen... Det er fordi jeg har delt min kode op i 2 dele:
1. Input felterne
2. Valideringer på indtastninger, mysql_real_escape_string, og updatere databasen.

Da der er mange input-felter, og nogle af dem i nogle situationer er aktive og andre disabled, så er ovennævnte en nemmere løsning, da jeg slet ikke behøver at røre ved del 2.
Avatar billede olebole Juniormester
23. juli 2008 - 23:46 #26
<ole>

<form .... onsubmit="for(var a=this.elements,i=0,j=a.length;i<j;i++)a[i].disabled=false">

- så kommer også disablede felter med  =)

/mvh
</bole>
Avatar billede nemlig Professor
24. juli 2008 - 11:35 #27
OK - tak for denne info. Er det javascript??, og hvis ja, så kræver det vel, at brugerene ikke slået Javascript fra i sin Browser?
Avatar billede w13 Novice
24. juli 2008 - 11:39 #28
nemlig>> Ja, det er JavaScript. Og i dag er der ikke mange hjemmesider, som slet ikke bruger JavaScript, og ligeledes enormt få mennesker, som har slået JavaScript fra.

Tror du, Microsoft.com, Facebook.com, Flickr.dk, osv. kunne køre uden? De bruger alle enormt meget JavaScript, og de er nogle af de meste besøgte hjemmesider.
Avatar billede nemlig Professor
24. juli 2008 - 11:53 #29
OK - tak for infoen. Her er det heller ikke noget problem, da systemet ikke er offentligt.
Avatar billede w13 Novice
24. juli 2008 - 12:08 #30
I dag kan man heller ikke lave særlig mange ting, hvis man går ud fra, at ens brugere har slået JS fra. =)
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