|
| Min form skal ikke tømmes efter post Fra : Søren Follmann |
Dato : 02-11-05 10:39 |
|
Jeg har lavet en tabel der trækker værdier ud af min database,
pris, navn mm. så kan man vælge et antal, derefter trykke beregn
pris, så kører den ind på $_SERVER[PHP_SELF]?, men så forsvinder
alt det man har indtastet før, kan man gøre noget så den beholder
de data der blev tastet?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Bertel Lund Hansen (02-11-2005)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 02-11-05 11:44 |
|
Søren Follmann skrev:
> Jeg har lavet en tabel der trækker værdier ud af min database,
> pris, navn mm. så kan man vælge et antal, derefter trykke beregn
> pris, så kører den ind på $_SERVER[PHP_SELF]?, men så forsvinder
> alt det man har indtastet før, kan man gøre noget så den beholder
> de data der blev tastet?
Ja, men det skal programmeres. I hvert element i formen skal du
sørge for at det på forhånd tildes den værdi som dens egen
variabel har.
Eksempel på et navneinput:
<th>Navn</th>
<td><input type='text' size='40' maxlength='40' name='name' value='<?=$name?>'></td>
Jeg har valgt: name='name', og derfor har PHP-variablen $name den
værdi der inputtes. Den variabel husker systemet så når en ny
side (der tilfældigvis er den samme) hentes. Og derfor bliver
formen forudfyldt næste gang.
Det gør det i øvrigt relativt let at tildele standardværdier på
forhånd. Det skal blot ske i en blok der kun udføres én gang.
--
/Bertel
Rikke Mølgaard - en stemme der fortjener at blive hørt:
http://www.rikkemoelgaard.dk/
| |
Johan Holst Nielsen (02-11-2005)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 02-11-05 12:33 |
|
Bertel Lund Hansen wrote:
> Søren Follmann skrev:
>
>
>>Jeg har lavet en tabel der trækker værdier ud af min database,
>>pris, navn mm. så kan man vælge et antal, derefter trykke beregn
>>pris, så kører den ind på $_SERVER[PHP_SELF]?, men så forsvinder
>>alt det man har indtastet før, kan man gøre noget så den beholder
>>de data der blev tastet?
>
>
> Ja, men det skal programmeres. I hvert element i formen skal du
> sørge for at det på forhånd tildes den værdi som dens egen
> variabel har.
>
> Eksempel på et navneinput:
>
> <th>Navn</th>
> <td><input type='text' size='40' maxlength='40' name='name' value='<?=$name?>'></td>
Bare for god ordens skyld...
Det er bedre at bruge <?=$_POST['name']?> hvis method er POST og
<?=$_GET['name']?> hvis method ikke er sat/er GET. Alternativt
<?=$_REQUEST['name']?> som både vil virke med POST og GET.
mvh
Johan
| |
Bertel Lund Hansen (02-11-2005)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 02-11-05 12:53 |
|
Johan Holst Nielsen skrev:
> Bare for god ordens skyld...
> Det er bedre at bruge <?=$_POST['name']?> hvis method er POST og
> <?=$_GET['name']?> hvis method ikke er sat/er GET. Alternativt
> <?=$_REQUEST['name']?> som både vil virke med POST og GET.
Tak for det. Da jeg lavede obese.dk, havde jeg glemt alt om det,
og det virker alligevel. Ved du hvorfor det nogle steder virker
uden GET/POST, og ved du hvilke problemer det kan give hvis man
ikke bruger det?
--
/Bertel
Rikke Mølgaard - en stemme der fortjener at blive hørt:
http://www.rikkemoelgaard.dk/
| |
Kasper Johansen (02-11-2005)
| Kommentar Fra : Kasper Johansen |
Dato : 02-11-05 13:04 |
|
"Bertel Lund Hansen" <nospamfilius@lundhansen.dk> skrev i en meddelelse
news:owkoiagozlxx.193rosnzsajtd$.dlg@40tude.net...
> Tak for det. Da jeg lavede obese.dk, havde jeg glemt alt om det,
> og det virker alligevel. Ved du hvorfor det nogle steder virker
> uden GET/POST, og ved du hvilke problemer det kan give hvis man
> ikke bruger det?
Det kaldes globale variabler, og kan sættes i "php.ini" under
"register_globals", som kan sættes til enten "on" eller "off" (hvorvidt du
vil have mulighed for at tilgå dine cookies, sessions, gets, posts eller
whatever via. normaler variabler.
Det tager selvfølgelig lidt ekstra milisekunder at definere variablerne (du
kan faktisk gøre det selv, hvilket jeg har gjort på flere sider hvor jeg
skal bruge dem).
Fordelen ved dem, er at du i nogle tilfælde kan være ligeglad om du vil læse
GET- eller POST-type variabler (det vil altså virke som det samme, hvad
enten man poster igen eller tilgår siden via. "index.php?name=Kasper").
Desuden er der nogen der syntes det er lettere at arbejde med (mig selv
inkl.).
Der er også de sikkerhedsmæssige aspekter. En bruger kan f.eks. gøre sådan
noget her (hvis vi forudsætter at man har en session, kaldet login_uid med
value "1", altså brugerid). Hvis du så vil se hvilken bruger man er logget
ind som, vil du typisk bruge $login_uid og læse brugerid'et (hvor 1 jo
typisk er den administrative konto).
Derfor vil en bruger (i tilfældet hvor at han ikke er logget ind, og
session'en dermed ikke sat) kunne sætte den normale variabel via. url'en
(eller en manipuleret post) således:
"index.php?login_uid=1".
Man kan selvfølgelig undgå dette, fordi du stadig kan tilgå din session via
$_SESSION[login_uid] (som du under alle omstændigheder ville have brugt uden
globale variabler).
Det hele handler om at man ved hvordan man bruger globale variable på en
smart måde (altså at læse fra $_POST, $_GET, $_SESSION eller $_COOKIE når
der kan indgå en sikkerhedsmæssig risiko).
Mange vil påstå at det er ligesom at køre i bil med sele og hjelm :)
Jeg syntes personligt det er dejligt at arbejde med globale variabler, men
igen, smag og behag.
Som nybegynder vil jeg mene det er lettest (men ikke mest sikkert) at bruge
globale variabler, og derefter lære hvordan/hvorfor/hvornår du ikke skal
bruge dem efter.
Sikkerhedsmæssigt vil det være bedst ikke at bruge globale variabler til at
starte med.
Det er selvfølgelig bare min mening :)
--
Med venlig hilsen
Kasper Johansen
| |
Jacob Atzen (02-11-2005)
| Kommentar Fra : Jacob Atzen |
Dato : 02-11-05 16:22 |
|
On 2005-11-02, Kasper Johansen <kasper@johansen.tdcadsl.dk> wrote:
> Det kaldes globale variabler, og kan sættes i "php.ini" under
> "register_globals", som kan sættes til enten "on" eller "off"
> (hvorvidt du vil have mulighed for at tilgå dine cookies, sessions,
> gets, posts eller whatever via. normaler variabler.
Globale variabler og register_globals er to forskellige ting. En global
variabel er en variabel, der kan tilgås overalt i programmet i
modsætning til en lokal variabel, der kun kan tilgås i den
funktion/metode/klasse, den er defineret i. Register globals opretter
globale variable med indholdet af $_POST/GET/COOKIE.
> Det tager selvfølgelig lidt ekstra milisekunder at definere variablerne (du
> kan faktisk gøre det selv, hvilket jeg har gjort på flere sider hvor jeg
> skal bruge dem).
>
>
> Fordelen ved dem, er at du i nogle tilfælde kan være ligeglad om du vil læse
> GET- eller POST-type variabler (det vil altså virke som det samme, hvad
> enten man poster igen eller tilgår siden via. "index.php?name=Kasper").
Det kan du også med $_REQUEST, så det er ikke en grund til at bruge
register_globals.
Jeg har aldrig hørt et godt argument for at bruge register_globals - det
er nok den ene feature i PHP som har givet folk flest ærgrelser og været
ophavsmand til flest sikkerhedshuller igennem tiden.
Globale variable er ligeledes noget man bør undgå i videst muligt
omfang. Følgende er argumenter mod brugen af globale variable, find selv
på flere:
- Det bliver sværere at fejlsøge programmet
- Det bliver sværere at ændre programmet
- Det bliver sværere at genbruge dele af programmet andre steder
--
Med venlig hilsen
- Jacob Atzen
| |
Thomas Finnerup (02-11-2005)
| Kommentar Fra : Thomas Finnerup |
Dato : 02-11-05 17:57 |
|
On Wed, 02 Nov 2005 12:32:37 +0100, Johan Holst Nielsen
<spam@phpgeek.dk> wrote:
> > Eksempel på et navneinput:
> >
> > <th>Navn</th>
> > <td><input type='text' size='40' maxlength='40' name='name' value='<?=$name?>'></td>
>
> Bare for god ordens skyld...
> Det er bedre at bruge <?=$_POST['name']?> hvis method er POST og
> <?=$_GET['name']?> hvis method ikke er sat/er GET. Alternativt
> <?=$_REQUEST['name']?> som både vil virke med POST og GET.
Derudover bør man smide dem gennem htmlspecialchars(), når man (som
her) genererer HTML.
Venligst
Thomas
| |
|
|