Avatar billede subro Nybegynder
23. marts 2005 - 21:19 Der 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>

<body leftmargin="0" topmargin="0">
<form name="minform" action="naesteside.php" method="POST">
<table width="760" border="0">
  <tr>
    <td width="206"><p>Fornavn</p></td>
    <td width="300"><input name="fornavn" type="text" size="61" maxlength="20"></td>
  </tr>
  <tr>
    <td><p>Efternavn</td>
    <td><input name="efternavn" type="text" size="61" maxlength="40"></td>
  </tr> 
  <tr>
    <td height="26"><p>Fødselsdato</td>
    <td>
      <input name="birthdate" type="text" size="2" maxlength="2">
      <input name="birthmonth" type="text" size="2" maxlength="2">
      <input name="birthyear" type="text" size="4" maxlength="4">
  </tr> 
  <tr>
    <td><p>E-mail</td>
    <td><input name="email" type="text" size="61" maxlength="40"></td>
  </tr>   
  <tr>
    <td><input name="accept" type="checkbox" value="Ja"></td>
  </tr>
  <tr>
    <td><input type="submit" name="senddata" class="knap" value="Videre" style="cursor:pointer"></td>
  </tr>
</table>
</form>
</body>
</html>
Avatar billede jaw Nybegynder
23. marts 2005 - 21:23 #1
Navne kan du tjekke med: if(ereg("[a-zA-z]", $variabel))
Tal: if(ereg("[0-9]", $variabel) && strlen($variabel) == 2)

Mail-adressen skal jeg lige pudse lidt på før jeg tør paste den :)
Avatar billede jaw Nybegynder
23. marts 2005 - 21:30 #2
Email bør kunne kontrolleres sådan: if(ereg("^[\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[a-zA-Z]", $_POST['email'])) {

Men vil du have hele valideringen i én, eller hvad?
Avatar billede subro Nybegynder
23. marts 2005 - 21:37 #3
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!
Avatar billede jaw Nybegynder
23. marts 2005 - 21:39 #4
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
}
Avatar billede subro Nybegynder
23. marts 2005 - 21:45 #5
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?
Avatar billede jaw Nybegynder
23. marts 2005 - 21:48 #6
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 ?
Avatar billede subro Nybegynder
23. marts 2005 - 21:50 #7
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.
Avatar billede jaw Nybegynder
23. marts 2005 - 21:57 #8
Hvis du vil fjerne alle <b> <font> osv. fra felterne, så prøv $variabel = striptags($_POST['feltnavn']);
Avatar billede subro Nybegynder
23. marts 2005 - 22:01 #9
Jeg kan jo lige vise dig den side brugeren kommer til når de vil se deres data, det er dér hvor valideringen sikkert skal være!

Jeg kan sgu' bare ikke gennemskue hvordan jeg skal implementere den validering,eller hvordan jeg skriver det!

<?php
session_start();
?>
<?php
//All sessions are registered here.
if (isset($_POST["senddata"])){
session_register('fornavn');
$_SESSION['fornavn']= $_POST["fornavn"];
$fornavn=$_SESSION['fornavn'];

session_register('efternavn');
$_SESSION['efternavn']= $_POST["efternavn"];
$efternavn=$_SESSION['efternavn'];

session_register('birthdate');
$_SESSION['birthdate']= $_POST["birthdate"];
$birthdate=$_SESSION['birthdate'];

session_register('birthmonth');
$_SESSION['birthmonth']= $_POST["birthmonth"];
$birthmonth=$_SESSION['birthmonth'];

session_register('birthyear');
$_SESSION['birthyear']= $_POST["birthyear"];
$birthyear=$_SESSION['birthyear'];

session_register('email');
$_SESSION['email']= $_POST["email"];
$email=$_SESSION['email'];

session_register('accept');
$_SESSION['accept']= $_POST["accept"];
$accept=$_SESSION['accept'];
}
?>
<html>
<head>
<title>Talent Banken - Bekræft CV</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<LINK REL=StyleSheet HREF="stylesheet.css" TYPE="text/css" MEDIA=screen>
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
</head>

<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>
     
</body>
</html>
Avatar billede jaw Nybegynder
23. marts 2005 - 22:21 #10
F.eks.:

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?
Avatar billede subro Nybegynder
23. marts 2005 - 22:33 #11
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!!
Avatar billede jaw Nybegynder
23. marts 2005 - 22:40 #12
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 :)
Avatar billede subro Nybegynder
23. marts 2005 - 22:42 #13
Det er bare i orden jaw!!!
Jeg takker for hjælpen indtil videre....
Point herfra...
Avatar billede jaw Nybegynder
23. marts 2005 - 22:45 #14
Intet problem :) Så smider jeg lige et svar, så kan du overveje om det er godt nok eller lade det stå lidt...
Avatar billede subro Nybegynder
23. marts 2005 - 22:50 #15
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!!!
Avatar billede subro Nybegynder
19. maj 2005 - 14:14 #16
Hmm.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester