2011-08-17 7 views
0

Je suis en train de concevoir un formulaire d'inscription en php. Je veux ajouter une validation dans mon formulaire. Les validations sont liées à la nécessité de valider le champ. c'est mon code.Comment ajouter une validation en php au bon endroit?

<?php 
    include('connect.php'); 
    if(isset($_REQUEST['Register'])) 
    { 

     $error='';//initialize $error to blank 
    if(trim($_POST[userid])==''){ 
     $error.="Please enter a username!<br />"; //concatenate the $error Message with a line break 
    } 
    if(trim($_POST[password])==''){ 
     $error.="Please Enter password! <br />";//concatenate more to $error 
    } 
    if(trim($_POST[email])=='') 
    { 
    $error.="Please Enter email address !<br />"; 
    } 
    else 
    { 
     if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST[email])) { 
     $error="The e-mail you entered was not in the proper format!"; 

     } 
    } 
    if(trim($_POST[regAs])=='NULL') 
    { 
    $error.="Please select Register As !<br />"; 
    } 

    if($error!='') 
    { 
    echo "<span style=color:red>$error</span>"; 
    //Hmmmm no text is in $error so do something else, the page has verified and the email was valid 
    // so uncomment the line below to send the user to your own success page or wherever (swap 
    //yourpage.php with your files location). 
    //echo "script type=\"text/javascript\">window.location=\yourpage.php\"<script>"; 
    } 
    else 
    { 
      $userid=$_REQUEST['userid']; 
     $name=$_REQUEST['name']; 
     $password=$_REQUEST['password']; 
     $repassword=$_REQUEST['repassword']; 
     $email=$_REQUEST['email']; 
     $regAs=$_REQUEST['regAs']; 
     if($password!=$repassword) 
     { 
      echo "<script>alert('both are diferent password')</script>"; 
     } 
     else 
     { 

     mysql_query("insert into login(userid,name,password,email,regAs) values('$userid','$name','$password','$email','$regAs')"); 
     } 
    }     










    } 
?> 
<html> 
<head></head> 
<body> 
<form action="" method="post" name="f"> 
<table align="center"> 
<tr> 
<td>User ID :</td><td> 
<input type="text" name="userid" value=""></td> 
</tr> 
<tr> 
<td>Name :</td><td> 
<input type="text" name="name" value=""></td> 
</tr> 
<tr> 
<td>Password : </td> 
<td><input type="password" name="password" value=""></td> 
</tr> 
<tr> 
<td>Re-Enter Password : </td> 
<td><input type="password" name="repassword" value=""></td> 
</tr> 
<tr> 
<td>Email id :</td><td> 
<input type="text" name="email" value=""></td> 
</tr> 
<tr> 
<td>Register As :</td><td> 
<select id="regAs" name="regAs"> 
<option value="NULL">SELECT</option> 
<option value="Artist">Artist</option> 
<option value="Buyer">Buyer</option> 
</select></td> 
</tr> 
<tr> 
<td></td> 
<td><input type="submit" name="Register" value="Register"</td></tr> 
</table> 
</form> 

</body> 
</html> 

et ceci est l'écran de sortie pour vérifier la validation. ces messages d'erreur arrivent en première ligne. Mais je veux que cette erreur doit venir en face de chaque ligne. Par exemple, si l'utilisateur n'entre pas de courrier électronique, l'erreur doit apparaître devant la zone de texte de l'e-mail. S'il vous plaît me suggérer que dois-je faire ..?

+0

Vous pouvez créer une variable de message d'erreur pour chaque champ de formulaire et renvoyer la valeur de la variable en regard du champ de saisie. –

+1

Votre code a différents problèmes: Ne pas citer certaines clés de tableau, en utilisant des méthodes obsolètes ('eregi' au lieu de' preg_match'), ** INJECTION SQL ** car vous n'échappez pas aux données SQL passwd aux requêtes. Veuillez activer 'error_reporting (E_ALL);' et lisez quelque chose à propos de la programmation PHP sécurisée! – ThiefMaster

Répondre

1

Eh bien, si vous voulez que les erreurs soient devant le bon champ de formulaire, vous devrez en quelque sorte obtenir les erreurs au bon endroit dans votre code HTML. La solution la plus simple serait de créer une variable ou un nœud de tableau pour chaque champ de formulaire possible et d'insérer un message d'erreur si nécessaire. Je vais vous donner un court exemple:

<?php 
include('connect.php'); 
if(isset($_REQUEST['Register'])) { 
    $errors = array(
     'email' => '', 
     'username' => '', 
     //etc... 
    ); 

    if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST[email])) { 
     $error['email'] = "The e-mail you entered was not in the proper format!"; 
    } 
} 
?> 

puis dans votre code HTML:

<tr> 
    <td>Email id :</td> 
    <td> 
    <input type="text" name="email" value=""> 
    <?php echo $error['email']; ?> 
    </td> 
</tr> 

En outre ne pas utilisateur eregi, il est deprecatad. Utilisez preg_match à la place.

+0

Merci hoppa monsieur ... merci beaucoup ... –

+0

monsieur s'il vous plaît aidez-moi dans mon problème http://stackoverflow.com/questions/7077599/send-email-from-php je pense que vous pouvez résoudre ce problème. –

0

Vous pouvez créer un tableau avec vos erreurs que vous validez chaque champ ...

// Might as well define them all so we don't have to use isset() later 
// This isn't necessary, it just makes the echo logic easier 
foreach ($_POST as $k => $v) { 
    $errors[$k] = array(); // No error yet 
} 

if (! valid_email($_POST['email'])) { 
    // Add an error to the array 
    $errors['email'][] = 'The email address is not valid.'; 
} 

... alors l'écho des erreurs dans votre code HTML:

<tr> 
    <td>Email id :</td> 
    <td> 
    <input type="text" name="email" value=""> 
    <?php echo implode(', ', $errors['email']); ?> 
    </td> 
</tr> 

J'utilisé pour diviser implode() les messages par une virgule, faites ce qui fonctionne pour vous. J'ai supposé que vous voudrez collecter plusieurs erreurs pour chaque champ. Si vous n'avez besoin que d'une erreur par champ, pensez à utiliser une chaîne plutôt qu'un tableau pour chaque champ.

Questions connexes