18. april 2009 - 17:10Der er
17 kommentarer og 1 løsning
Kombineret betingelse
Hej
Hvordan er det nu det er?
Jeg har en fil, der indeholder en formular og noget PHP, der hhv. sørger for at poste og vise indholdet på siden. Jeg vil gerne lave et tjek vha. PHP, der tjekker, om et felt er udfyldt korrekt, men tjekket skal kun udføres, hvis der bliver klikket på Send-knappen i formularen.
Jeg har nedenstående brudstykker, som jeg gætter på skal sættes sammen på en eller anden måde. Jeg ved bare ikke lige hvordan.
if (isset($_POST[submit])) // er der klikket på knappen? { ...... }
if($tjekfelt != '.....') // Hvis bruger ikke har skrevet rigtigt i tjekfeltet, skal php'en skrive nedenstående. { echo "Tjekfeltet er ikke udfyldt korrekt. <a href='form.php'>Tilbage</a>"; }
Jeg har forsøgt at sætte dem sammen i stil med: if (isset($_POST[submit])&&($tjekfelt != '.....') )
Men den går vist ikke rigtigt, eller også mangler jeg i hvert fald noget.
Det giver vel mindre arbejde for serveren hvis du placerer dit tjek af feltets korrekthed efter du har tjekket om formen overhovedet er postet? Men det kommer selvfølgelig an på hvordan du præcist har opbygget din form.
Nedenstående ser ud til at fungere. Der er måske nok en smartere og mere elegant måde at gøre det på.
if (isset($_POST['submit'])&&($tjekfelt != '....')) { echo "Tjekfeltet er ikke udfyldt korrekt."; }
elseif (isset($_POST['submit'])&&($tjekfelt = '....')) { $data = mysql_query("INSERT INTO nyblog VALUES('','$navn','$mail','$site','$textarea','$tjektfelt','$dato','$tid')") or die("Der er ingen forbindelse til databasen."); }
den her vil altid være sand, hvis blot der er trykket på submit (der skal være to lighedstegn, når du tjekker om noget er ens, ellers tildeler du blot værdien til variablen, og medmindre den fejler, vil udsagnet altid være sandt).
du bør nok gøre det på harens metode, og det ville jeg egentlig også gøre, før kommenterede jeg blot på din kode (på den måde behøver du heller ikke at tjekke submit mere end én gang).
der kommer et svar her, men jeg synes haren skal have halvdelen :)
Ok, vil I lige prøve at skrive præcist, hvordan jeg bør skirve koden?
if (isset($_POST['submit'])) // Er der klikket på knappen? { if ($tjekfelt != '...') // Er tjekfeltet udfyldt korrekt? { echo "Tjekfeltet er ikke udfyldt korrekt."; } }
Der skal vel så være noget der gør, at SQL'en kun bliver udført, hvis der er klikket på knappen. Men det er måske det med lighedstegnene - hvor skal de være?
if (isset($_POST['submit'])) // isset tjekker om variablen er sat, det er den kun hvis man trykker på knappen submit. { if ($tjekfelt != '...') // tjekker om variablen er forskellig fra '...', og hvis den er, får man at vide at feltet ikke er udfylt korrekt - det skulle måske være omvendt, og evt. bare tjekke om feltet == '' (altså tomt) { echo "Tjekfeltet er ikke udfyldt korrekt."; } }
du kan sætte en else på sidste if-sætning (den hvor du tjekker indholdet af $tjekfelt), hvori du smider data i db'en...
Der findes flere måder at lave det, men som i sidste ende, munder ud i det samme mere eller mindre. Det er forholdsvis simpelt det ovenover, men effektivt. Jeg har lige lavet et kort eksempel på den måde jeg altid laver validering på. Jeg har valgt at strukture mine koder således, som jeg gør, da det er super nemt at tilføje flere valideringer, hvis flere felter skulle være nødvendigt. Jeg har smidt lidt ekstra på, som altid kan smides fra uden problemer, hvis det ikke er nødvendigt.
<?
$showform = TRUE;
// Et regex tjekker om mailen som bliver indtastet er valid. Vi kalder på den længere nede... define("PATTERN_EMAIL", "/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/");
if (isset($_POST['submit'])) {
if (!$tjekfelt) {
$fejl = "<p>Du mangler at udfylde feltet</p><br>"; $showform = TRUE;
if (!preg_match(PATTERN_EMAIL, $_POST['email'])) {
$fejl = "$fejl<p>Din e-mail er ikke gyldig.</p><br>"; $showform = TRUE;
}
}
if (!$fejl) {
$data = mysql_query("INSERT INTO nyblog VALUES('','$navn','$mail','$site','$textarea','$tjektfelt','$dato','$tid')") or die("Der er ingen forbindelse til databasen.");
Nu har jeg prøvet at lave det som nedenstående, og det ser umiddelbart ud til at fungere. Men det er vel også en af de metoder I har været inde på?
if (isset($_POST['submit'])) // Er der klikket på Send-knappen? { if ($tjekfelt != '4') // Hvis der ikke står 4 i tjekfeltet.... { echo "Tjekfeltet er ikke udfyldt korrekt."; } else // Udfør SQL, da tjekfeltet er i orden. { $data = mysql_query("INSERT INTO nyblog VALUES('','$navn','$mail','$site','$textarea','$tjektfelt','$dato','$tid')") or die("Der er ingen forbindelse til databasen."); } }
Ja, jeg kunne vel så, som I også skriver, til føje andre tjek som f.eks. if ($tjekfelt == '') // Er feltet tomt? osv.
Det kommer an på hvor mange detaljer man ønsker at fifle med.
Jeg personligt kan bedst lige at have mange forskellige validerings-meddelelser, som passer helt præcist til fejlen. Så den kan beskrive fejlen, for bruger-venlighed. Så fx, feltet må ikke være tomt, det skal indeholde 4 eller hvad ved jeg..
Hvor, hvis man skriver feltet er ikke udfyldt korrekt, kan det være hvilken som helst fejl, uden man peger imod hvilken.
Det er et en smagssag. Nogen kan li' det enkelt. hehe :)
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.