/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Form og validering
Fra : Bertel Lund Hansen


Dato : 04-12-03 07:52

Hej alle

Nu vil jeg hitte ud af det med en form og PHP. Det meste lader
til at være ret nemt, men jeg har et par spørgsmål:

Kan man validere input fra samme side som formen står på - altså
så brugeren ikke ser siden skifte?

Jeg har en valideringstest, og hvis den fejler, skal man vende
tilbage (hvis man altså har skiftet side), helst uden at
indtastningerne er slettet. Hvordan gør man det?
   if ($okay==false) {
   ???
   };

Jeg prøvede med en headerkommando, men den virker kun én gang.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

 
 
Tonni Aagesen (04-12-2003)
Kommentar
Fra : Tonni Aagesen


Dato : 04-12-03 08:23

Bertel Lund Hansen wrote:

> Kan man validere input fra samme side som formen står på - altså
> så brugeren ikke ser siden skifte?

Noget alá (utestet!):

<?php

if (isset($_POST['bar'])) {
   if ($_POST['foo'] == "hest") {
      header("location: /tak.php");
   } else {
      $error = "Du skal skrive \"hest\"";
   }
}

?>

<html>
....

<?php
if (!empty($error)) {
   echo $error;
}
?>

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">

<input type="text" name="foo" value="<?php echo $_POST['foo']; ?>" />
<input type="submit" name="bar" value="Send!" />

</form>
....
</html>


Mvh
Tonni


Kristian Thy (04-12-2003)
Kommentar
Fra : Kristian Thy


Dato : 04-12-03 10:47

Bertel Lund Hansen uttered:
> Kan man validere input fra samme side som formen står på - altså
> så brugeren ikke ser siden skifte?

Det jeg har gjort tidligere er at lave noget javascript der tjekker
felternes værdier når der bliver trykket på Submit-knappen. Hvis den
er utilfreds med nogle af værdierne bliver brugeren ikke sendt videre
til næste side.

\\kristian
--
PROGRAMMER [n]: a device for converting coffee into software.

Bertel Lund Hansen (04-12-2003)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-12-03 11:22

Kristian Thy skrev:

>Det jeg har gjort tidligere er at lave noget javascript der tjekker
>felternes værdier når der bliver trykket på Submit-knappen.

Ja, det er nok den eneste mulighed. Tonnis løsning (let
revideret) giver bare adgang til at genhente siden - med tomme
felter.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Johan Holst Nielsen (04-12-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 04-12-03 11:31

Bertel Lund Hansen wrote:
> Kristian Thy skrev:
>
>>Det jeg har gjort tidligere er at lave noget javascript der tjekker
>>felternes værdier når der bliver trykket på Submit-knappen.
>
> Ja, det er nok den eneste mulighed. Tonnis løsning (let
> revideret) giver bare adgang til at genhente siden - med tomme
> felter.

En anden mulighed var at poste siden til en iframe, der så skriver
eventuelle beskeder til brugeren via et Javascript på et layer eller
ligende.

Således reloades siden ikke, det er blot iframen, som der reloades.

Vil dog ikke mene der er nogen grund til at gøre _så_ meget ud af det ;)

mvh
Johan


Bertel Lund Hansen (04-12-2003)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-12-03 12:32

Johan Holst Nielsen skrev:

>Vil dog ikke mene der er nogen grund til at gøre _så_ meget ud af det ;)

Nej, jeg stiller mig tilfreds med en minimal side: en linje der
melder om fejl/succes, og en anden der siger at man skal trykke
"Tilbage".

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Johan Holst Nielsen (04-12-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 04-12-03 14:07

Bertel Lund Hansen wrote:
> Johan Holst Nielsen skrev:
>
>>Vil dog ikke mene der er nogen grund til at gøre _så_ meget ud af det ;)
>
> Nej, jeg stiller mig tilfreds med en minimal side: en linje der
> melder om fejl/succes, og en anden der siger at man skal trykke
> "Tilbage".

;) Pointen var nok dårlig i mit indlæg :D Problemet ved at bruge en
iframe, som jeg foreslog er dels at nogle ældre browsere ikke
supporterer dette (dermed vil mailen ikke sendes), samt at man helt
hindrer folk med javascript slået fra at benytte siden.

Selvfølgelig kunne man så tjekke på disse 2 ting - og så henholdvis lave
en med alm. validering via Javascript... og en kun med serverside
validering... men så er vi vidst inde og snakke cost/benefit... det var
det jeg var ude efter ;)

mvh
Johan


Tonni Aagesen (04-12-2003)
Kommentar
Fra : Tonni Aagesen


Dato : 04-12-03 15:55

Bertel Lund Hansen wrote:

>>Det jeg har gjort tidligere er at lave noget javascript der tjekker
>>felternes værdier når der bliver trykket på Submit-knappen.
>
>
> Ja, det er nok den eneste mulighed. Tonnis løsning (let
> revideret) giver bare adgang til at genhente siden - med tomme
> felter.

Enten har jeg misforstået dit spørgsmål, eller også har du ikke forstået
mit svar. I tilfælde af det sidste, så følger der her en forklaring:

Når brugeren har udfyldt feltet og trykket på submit valideres input på
samme side. Hvis input er tilfredsstillende, sendes brugeren videre til
en anden side, ellers vises formen igen MED brugerens tidligere og
"forkerte" input.

Var det ikke præcis det, du ville opnå?


Mvh
Tonni- der forbeholder sig ret til at misforstå et spørgsmål


Bertel Lund Hansen (04-12-2003)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-12-03 18:39

Tonni Aagesen skrev:

>Enten har jeg misforstået dit spørgsmål, eller også har du ikke forstået
>mit svar. I tilfælde af det sidste, så følger der her en forklaring:

Jeg fordtod godt hvad du ville, men header starter altså fra bar
bund.

>Når brugeren har udfyldt feltet og trykket på submit valideres input på
>samme side. Hvis input er tilfredsstillende, sendes brugeren videre til
>en anden side, ellers vises formen igen MED brugerens tidligere og
>"forkerte" input.

Niks. Siden vises helt forfra med tomme bokse.

I øvrigt returnerer $_SERVER['PHP_SELF'] den index-php-fil der
genererer alle siderne, så faktisk var det forsiden der kom frem.
Det kunne jeg dog selv rette.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Peter Brodersen (04-12-2003)
Kommentar
Fra : Peter Brodersen


Dato : 04-12-03 19:54

On Thu, 04 Dec 2003 18:39:05 +0100, Bertel Lund Hansen
<nospamius@lundhansen.dk> wrote:

>Niks. Siden vises helt forfra med tomme bokse.

Nu fristes man så til at spørge: Hvordan ser din kode ud?

Tonni angiver som eksempel:
<input type="text" name="foo" value="<?php echo $_POST['foo']; ?>" />

... hvilket meget gerne sætte give POST-værdien for "foo" ind som
default-værdi i input-feltet.

(jeg ville dog så bruge $_REQUEST, såfremt man havde lyst til at
skifte posting-type, og samtidig smide variablen ind i
htmlspecialchars() )

--
- Peter Brodersen

Ugens sprogtip: trafik (og ikke traffik)

Bertel Lund Hansen (04-12-2003)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-12-03 23:33

Peter Brodersen skrev:

>Nu fristes man så til at spørge: Hvordan ser din kode ud?

Nu er Fiduso lige midt i en flytning, så jeg vender tilbage når
det hele er på plads igen.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Ulrik Nielsen (04-12-2003)
Kommentar
Fra : Ulrik Nielsen


Dato : 04-12-03 11:30

Kristian Thy wrote:
> Bertel Lund Hansen uttered:
>
>>Kan man validere input fra samme side som formen står på - altså
>>så brugeren ikke ser siden skifte?
>
>
> Det jeg har gjort tidligere er at lave noget javascript der tjekker
> felternes værdier når der bliver trykket på Submit-knappen. Hvis den
> er utilfreds med nogle af værdierne bliver brugeren ikke sendt videre
> til næste side.
>

Det er bare ikke godt nok.... For javascript validering hindre ikke mod
at jeg laver en "save as (html)" og fjerner js valideringen og så
submitter ugyldige data til dit script...

Det bedste er at lave check i både js og php, men du skal altid gøre det
i php...

--
>> ulrik nielsen
excuse of the day : YOU HAVE AN I/O ERROR -> Incompetent Operator
: error
from bofh : http://www.cs.wisc.edu/~ballard/bofh/


Kristian Thy (04-12-2003)
Kommentar
Fra : Kristian Thy


Dato : 04-12-03 12:09

Ulrik Nielsen uttered:
> Det er bare ikke godt nok.... For javascript validering hindre ikke mod
> at jeg laver en "save as (html)" og fjerner js valideringen og så
> submitter ugyldige data til dit script...
>
> Det bedste er at lave check i både js og php, men du skal altid gøre det
> i php...

Fuldstændig enig. Mit js tjekkede bare om forskellige obligatoriske
felter var udfyldt - det er så træls at trykke "submit" efter at have
udfylt 15 felter, få at vide at password skal være >6 karakterer, og
så er indtastningerne væk når man trykker "back"

Selvfølgelig skal data tjekkes i php ud fra devisen "alt input er som
udgangspunkt fjendtligt" før det bruges til noget - man kan sige, at
jeg har brugt js som brugervenlig validering, mens jeg har brugt php
til servervenlig validering

\\kristian
--
I am in shape. ROUND is a shape.

Kim Emax (08-12-2003)
Kommentar
Fra : Kim Emax


Dato : 08-12-03 00:04

Kristian Thy wrote:

> Fuldstændig enig. Mit js tjekkede bare om forskellige obligatoriske
> felter var udfyldt - det er så træls at trykke "submit" efter at have
> udfylt 15 felter, få at vide at password skal være >6 karakterer, og
> så er indtastningerne væk når man trykker "back"

Så må du jo tænke dit design bedre igennem Jeg laver altid mine forms i
en function form(), løber alle inputs igennem og printer form(), hvis der er
sat $error=1;, samt printer fejlmeddelsen over hver enkelt felt og sørger
naturligvis for at brugerens data også står i input felterne.

> Selvfølgelig skal data tjekkes i php ud fra devisen "alt input er som
> udgangspunkt fjendtligt" før det bruges til noget - man kan sige, at
> jeg har brugt js som brugervenlig validering, mens jeg har brugt php
> til servervenlig validering

Jeg finder så JS Alert bokse, designmæssigt grimme og dødirriternede. I en
form med 10 felter er det i mine øjne mere brugervenligt at smide alle
fejlmeddelser ud på en gang til brugeren = 2 submits i alt, med mindre man
tester for at finde fejl. (hej PB

--
Take Care
Kim Emax - master|minds: http://www.masterminds.dk
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Kristian Thy (08-12-2003)
Kommentar
Fra : Kristian Thy


Dato : 08-12-03 00:06

Kim Emax uttered:
> Så må du jo tænke dit design bedre igennem Jeg laver altid mine forms i
> en function form(), løber alle inputs igennem og printer form(), hvis der er
> sat $error=1;, samt printer fejlmeddelsen over hver enkelt felt og sørger
> naturligvis for at brugerens data også står i input felterne.

Den kan jeg lide, den er købt.

> Jeg finder så JS Alert bokse, designmæssigt grimme og dødirriternede.

Helt enig. Det var SVJH et krav til opgaven at bruge js til validering...

\\kristian
--
A doctor can bury his mistakes but an architect can only advise his
client to plant vines.
--Frank Lloyd Wright

Jesper Brunholm (04-12-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 04-12-03 11:44

Bertel Lund Hansen skrev:
> Nu vil jeg hitte ud af det med en form og PHP. Det meste lader
> til at være ret nemt, men jeg har et par spørgsmål:
>
> Kan man validere input fra samme side som formen står på - altså
> så brugeren ikke ser siden skifte?

> Jeg har en valideringstest, og hvis den fejler, skal man vende
> tilbage (hvis man altså har skiftet side), helst uden at
> indtastningerne er slettet. Hvordan gør man det?
>    if ($okay==false) {
>    ???
>    };

der er efter min mening to relativt identiske muligheder:

du kan lade action på formen gå til samme side.

Når siden kaldes checker du REQUEST arrayet og sætter tomme values ind i
alle variabler der ikke er oprettet. Herefter validerer du (øverst på
siden, inden noget som helst er printet ud)

Hvis input validerer så samler du det i et array eller lignende og
sender med til den side hvor du skal bruge det - header('Location:....
med querystring på kan bruges)

Hvis input ikke validerer så skipper du videresendingen og skriver siden
ud idet du undervejs brokker dig over det manglende.

I formen sætter du altid variablerne ind som value, når siden tilgås
første gang er de initieret indholdsløse i head, derefter får man det
man skrev sidst...

Løsning to går ud på at sende over på en anden side, hvor man validerer
og enten arbejder videre eller sender retur til formularsiden idet man
medsender data. Den er måske smartere fordi man så kan undgå at vise en
URL med valide data frem, det kan diskuteres.

Begge metoder burde kunne gøres et uendligt antal gange, ind til siden
validerer.

Det er i øvrigt metode 1 jeg har brugt på
<http://www.kongskilde.com/soil/e-pages/index_larebog.html> (hvor jeg
kun har lavet den side med beregningen, ikke noget af resten )

mvh

Jesper Brunholm


Jesper Brunholm (04-12-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 04-12-03 11:46

Jesper Brunholm skrev:

> Det er i øvrigt metode 1 jeg har brugt på
> <http://www.kongskilde.com/soil/e-pages/index_larebog.html>

- og klik på Beregning... i nederste højre hjørne (ja - jeg hader også
frames)

mvh

Jesper Brunholm


Arne Feldborg (04-12-2003)
Kommentar
Fra : Arne Feldborg


Dato : 04-12-03 17:19

Bertel Lund Hansen <nospamius@lundhansen.dk> skrev Thu, 04 Dec 2003
07:51:41 +0100

>Kan man validere input fra samme side som formen står på - altså
>så brugeren ikke ser siden skifte?
>
Du kan bare lade formen sende til den side den selv er på, checke output
og reagere ud fra dette. Hvis indtastningen er mangelfuld opdaterer du
bare siden med en besked til brugeren og med de allerede indtastede data
indsat i formen.

>Jeg har en valideringstest, og hvis den fejler, skal man vende
>tilbage (hvis man altså har skiftet side), helst uden at
>indtastningerne er slettet. Hvordan gør man det?
>
Hvis du er skiftet til en anden side tager du bare outputet med tilbage
til den side formen er på og indsætter det i formen før den vises igen.

Send evt. et par 'input type=hidden' med så du hele tiden har styr på
hvor du er og hvor du kommer fra.


--
mvh, A:\Feldborg

Folketælllinger Hammerum og Bølling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408934
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste