23. marts 2005 - 21:19Der er
15 kommentarer og 1 løsning
Validering af input fra user
Hej Med jer! Jeg har et (lille) problem! Jeg skal validere at det som brugeren indtaster i mine text fields er acceptabel data. Her følger hvad der skal valideres: Fornavn/efternavn - skal være bokstaver Fødselsdag - skal være på hendholdsvis 2 tal, 2 tal, 4 tal Email - skal være en "rigtig" mail adresse Accept - skal være udfyldt
Desuden skal der tjekkes for ulovlige tegn: < > \ [ ]
Dette skal laves i php da JS ikke er nok (har lavet validering af dette, men da JS kan slåes fra er det ikke sikkert nok!)
Er der én der kan give mig et eksempel på hvordan dette kan laves? Har prøvet utallige løsninger som jeg har fået herinde fra, men har efterhånden opgivet!!
Her er min kode:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
Det er fint nok at opdele valideringen, da jeg har flere textfields/textareas end dem jeg har postet her, og det er ikke alle hvor der f.eks. skal tjekkes om der kun er bokstaver eller tal. Hvis det ikke er for stor en opgave, kan du så vise mig hvordan du ville implementere det i min oprindelige kode? Det er nemlig det jeg har problemer med!
Du skal ikke lave valideringen i den kode du har pastet. Valideringen skal du foretage dér hvor dataene fra dine inputforms (textareas etc) bliver brugt. Altså f.eks. i forbindelse med at du indsætter dem i din database.
Det kan gøres på forskellige måder, men f.eks.:
if(ereg("[a-zA-z]", $_POST['navn'])) { if(ereg("^[\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[a-zA-Z]", $_POST['email'])) { mysql_query("INSERT INTO tabel blah, blah"); } else { //returner fejl til brugeren om mail-adressen } } else { //returner fejl til brugeren om navne-feltet }
OK! Det data som brugeren taster ind bliver sendt til en side (vis_data) hvor han/hun kan se det indtastede data og tjekke om de har fået det hele med. Her bruger jeg sessions for at overføre alt det data til denne side. Nederst på siden kan brugeren så vælge at gå tilbage til "indput siden" for at rette i data'en eller vælge at sende det til DB'en. Er det på denne side (vis_data) jeg skal implementere valideringen?
Det kunne jo være en god ide, så har brugeren en chance for at rette fejlene med det samme. Men som du har lavet det lige nu, bliver dataene sendt til naesteside.php ?
Ja, det er ikke det rigtige navn! Ændrede det bare lige i farten! At sende dataen videre til vis_data.php og videre til DB'en virker helt OK, problemet er bare at jeg ikke kan styre om brugeren laver rod i programmeringen hvis han laver noget html programmering i felterne! -eller om mail adressen er i orden.
<body leftmargin="0" topmargin="0"> <table width="760" border="0"> <tr> <td colspan="2"><?php //All sessions are being updated $efternavn=$_SESSION['efternavn']; $birthdate=$_SESSION['birthdate']; $birthmonth=$_SESSION['birthmonth']; $birthyear=$_SESSION['birthyear']; $email=$_SESSION['email']; $accept=$_SESSION['accept'];
//The data is displayed so the candidate can check if everything is enclosed. ?> <p> <b>--Personlige oplysninger--</b><br> <b><i>Navn:</i></b><br> <?php echo $fornavn;?> <?php echo $efternavn;?><br> <b><i>Fødselsdag:</i></b><br> <?php echo $birthdate;?> <?php echo $birthmonth?> <?php echo $birthyear;?><br> <b><i>E-mail:</i></b><br> <?php echo $email;?><br> <b><i>Jeg har accepteret at min data bliver gemt databasen:</i></b><br> <?php echo $accept;?></p> </td> <tr> <td width="68"><input type="button" class="knap" OnClick="history.go(-1);" value="Ret CV" style="cursor:pointer"></td> <td width="682" valign="top"><p>Tryk på denne knap for at rette i dit CV</p></td> </tr> <tr> <td> <form action="indsaat.php" method="POST"> <input type="submit" class="knap" name="sendcv" value="Gem CV" style="cursor:pointer"> </form></td> <td valign="top"><p>Tryk på denne knap for at gemme dit CV</p> <?php
//Checks if querystring is sent back from "indsaat.php" to check if the data is inserted correctly into the Database if(isset($_GET["test"])){ echo "<script>"; //Sends the user to the confirm page, if data has been sent to the database without errors. echo "location.href='confirm.php'"; echo "</script>"; }else{ echo ""; } ?> </td> </tr> </table>
if(ereg("[a-zA-z]", $_POST['navn'])) { if(ereg("^[\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[a-zA-Z]", $_POST['email'])) { $validering = "ok"; } else { header("Location: enside.php"); //en side hvor brugeren kan rette fejlene, feks som hvis han klikker at han vil ændre i din ovenstående kode } } else { header("Location: enside.php"); //en side hvor brugeren kan rette fejlene, feks som hvis han klikker at han vil ændre i din ovenstående kode }
Sæt det lige efter at du sætter sessions, og lav så en if($validering == "ok") { lige før al den kode du har. Forståeligt?
Hmmmm.... jaaaaa! Tror du at du kunne sætte det ind i min eksisterende kode?? Jeg er ny i php (som du nok allerede har opdaget!?!) Så ville det være lidt lettere for mig = grødhovede, at forstå tror jeg. Jeg påskønner virkelig din hjælp = fette fette!!
Hm, vil jeg egentlig helst ikke. Jeg vil hellere, at du prøver at kode nogen små eksempelstumper på baggrund af min hjælp,, og når du kan, så sætter du det hele sammen som du vil.
Hvis jeg skal lave det hele, bliver det ikke lige pt. Har lige gang i mit eget projekt :)
Lader den lige står så andre kan komme med deres "view", men du har da været til hjælp... tror jeg... orker ikke lige at se på det lige nu! Har stirret mig blind på det hele!!! hæ hæ... men takker alligevel!!!
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.