Gemme formular intastning ved validering

Tags:    php validering mysql formular

Halløjsa

Jeg fumler med validering af en formular til opdatering af allerede indtastede oplysninger. Jeg har følgede formular med validering, og som gemmer de indtastede oplysninger i en MySQL database. Dette virker helt fint og valideringen giver de forventede oplysninger om fejl, så som manglende indtastning:

Fold kodeboks ind/udPHP kode 
[/code]

... men altså, i nedenstående eksempel har jeg problemer med for det første at eet felt husker de indtastede oplysninger, når der er fejl i et andet felt, og for det andet at valideringen ikke giver de forventede oplysninger om fejl, så som manglende indtastning:

Fold kodeboks ind/udPHP kode 


Jeg har tidligere brugt en lignende metode i ASP med to variabler, een for databaseoplysninger og een for formularoplysninger, for at det enkelte felt kunne "maintain state" og det virkede helt fint.

Er der nogen, der kan give en hjælpende hånd? :)



7 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Alle de fejlmeddelelser du nævner, kommer når der mangler én eller flere af værdierne i arrayet $_POST. Hvis du laver et GET request vil alle værdier mangle, og hvis du ikke udfylder alle værdier ved et POST request får du også fejl. Hvis du ikke regner med at ha' mere end én form på hver side, kan du helt droppe "ValidateForm" feltet og istedet tjekke om det pågældende request er POST
Fold kodeboks ind/udPHP kode 

Derudover skal du sikre dig at begge 'My_Column_#' er udfyldt. Det kan du f.eks. gøre ved
Fold kodeboks ind/udPHP kode 

Hvis du bliver træt af at gentage ovenstående logik kan du lave en lille hjælperfunktion
Fold kodeboks ind/udPHP kode 

og så kan du skrive
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 19.02.2012 08:50 af Bruger #13559
Måske er jeg bare træt, men jeg er ikke sikker på at jeg forstår hvad fejlen er... :-)

Hvis du ikke allerede har gjort det, så prøv at kommentere din error_reporting(0); linje ud (tilføj // i starten af linjen) så viser den de fejl der evt kunne være. Det ville være en stor hjælp.



Hej Gustav

Jeg kan da sagtens vise dig fejlmeddelelserne. I det script, som jeg har problemer med (som opdaterer), er der følgende:

Notice: Undefined index: My_Column_1 in record_form_edit.php on line 36
Notice: Undefined index: My_Column_2 in record_form_edit.php on line 39
Notice: Undefined index: ValidateForm in record_form_edit.php on line 42
Notice: Undefined variable: Error_My_Column_1 in record_form_edit.php on line 63
Notice: Undefined variable: Error_My_Column_2 in record_form_edit.php on line 68


I det script, der opretter (det øverste, og som rent faktisk virker efter min hensigt), er der også fejlmeddelelser som følger:

Notice: Undefined index: ValidateForm in record_form_create.php on line 30
Notice: Undefined variable: Error_My_Column_1 in record_form_create.php on line 51
Notice: Undefined variable: Error_My_Column_2 in record_form_create.php on line 54


Så skal det jo heller være nogen hemmelighed at detterhersens PHP er nyt for mig endnu, så jeg takker for hvad hjælp du kan give :-)



Undefined index og undefined variable betyder at du bruger hhv en værdi i et array eller en variabel som ikke er sat på forhånd. Ikke en kritisk fejl.

Får du ikke en anden fejl når du submitter din form i edit filen? Det kan jeg se at du ikke har gjort på denne fejl: Notice: Undefined index: ValidateForm in record_form_edit.php on line 42



Næhh, der er egentligt ikke andre fejl end det...

Der sker det, at valideringen fungerer fint, så længe der er skrevet noget i felterne (under opdateringen), men så snart et felt er tomt, så bliver det tomme felt alligevel accepteret, uden at valideringen virker.

Når jeg så vil gå tilbage og lave endnu en opdatering og udfylde et felt, der er tomt, så får jeg godtnok den ønskede fejlmeddelelse, men jeg kan ikke "submitte" og kommer ikke videre. Er det ikke bare sært?

Jeg kan muligvis midlertidigt gøre scriptet tilgængeligt "live", hvis det er nogen hjælp.



Hej,

php er ikke min stærkeste side, men mener dog at mysql_real_escape_string kræver en connection til database for at virke.

I dit eksempel ser det ud som om du kalder mysql_real_escape_string først, og derefter opretter en connection til mysql.



@AH, korrekt - men den tomme streng "" trigger en false værdi når den bliver brugt i boolske statements og notices er ikke fejl - men advarsler. Det betyder ikke noget for om det kan køre eller ej. Normalt kører man alligevel ikke med E_NOTICE i error_reporting... Hvis overhovedet, så i hvert fald kun i logs.

@Jørgen Lehmann, korrekt - mysql_real_escape_string bruger funktionalitet fra MySQL til at escape. Den virker ikke hvis der ikke er connection. Men den burde give en E_Warning - og det ser ikke sådan ud fra de fejl vi har fået.



Indlæg senest redigeret d. 19.02.2012 10:34 af Bruger #17015
t