2011-04-19 7 views
1

OBJECTIF: Essayer de vérifier qu'aucun des champs n'est laissé vide, y compris le bouton radio et la liste déroulante. N'importe qui?Php Validation du formulaire

HTML

<form action="add_p_c.php" method="post"> 
    Professor<input type="radio" name="addType" />&nbsp;&nbsp;Course<input type="radio" name="addType" /> 
    <br><br>Name: <input type="text" name="name" /><br> 
    Department: <select name="deptName"><option>Department 1</option> <option>Department 2</option></select> 
    Email: <input type="text" name="email" /><br> 
    <input type="submit" name="submit" /> 
</form> 

** PHP (add_p_c.php) **

<?php 
if (isset($_POST['submit'])) { 
if (empty($selected_radio)){ echo "You need to select a prof or course";} else(return;) 
    $selected_radio = $_POST['addType']; 
if (empty($course_prof_name)){ echo "You need to enter a name";} else(return;) 
    $course_prof_name = $_POST['name']; 
if (empty($select_dep)){ echo "You select a dept";} else(return;) 
    $select_dep = $_POST['deptName']; 
$email = $_POST['email'] = "[email protected]"; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
    return; 
} 
else { 
    echo "<span color='red;'>Invalid email address.</span>"; 
} 
} 
?> 

Répondre

0

Pour des raisons de sécurité, vous devez ajouter certaines choses à améliorer la sécurité, parce que si vous faites des questions à un DB, vous pouvez obtenir une injection SQL. Essayez ceci:

<?php 
if(isset($_POST['submit']){ 

    $_POST['name']= trim(strip_tags(addslashes($string))); 
    $_POST['deptName']= trim(strip_tags(addslashes($string))); 
    $_POST['email']= trim(strip_tags(addslashes($string))); 

      /* I can't remember if it should be '' or NULL, but some simple testing will let you know which it is*/ 
    if($_POST['addType'] != ''){ 
     if($_POST['name'] != ''){ 
      if($_POST['deptName'] != ''){ 
       if($_POST['email']) != ''){ 
        $selected_radio = $_POST['addType']; 
        $course_prof_name = $_POST['name']; 
        $select_dep = $_POST['deptName']; 
        $email = $_POST['email'] = "[email protected]"; 
        if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
         return; 
        } 
        else { 
         echo "<span color='red;'>Invalid email address.</span>"; 
        } 
       } 
       else{ 
        // email wasn't set 
       } 
      } 
      else{ 
       //deptName wasn't set 
      } 
     } 
     else{ 
      //name wasn't set 
     } 
    } 
    else{ 
     // add type wasn't set 
    } 
} 
?> 
+1

4 instructions imbriquées si? – Galen

+0

Ce n'est pas obligatoire, mais si le questionneur veut répondre à un champ qui n'est pas défini, cela lui permettra facilement de le faire. S'il ne souhaite pas adresser individuellement un champ manquant, il peut simplement utiliser les opérateurs OR (||) dans la seconde instruction if. – reeeky2001

0

Vous pouvez utiliser if (empty($variable)) {, juste garder à l'esprit que tout ce qui est fausse, y compris le nombre 0 sera pris.

PHP doc: http://php.net/manual/en/function.empty.php

+0

Pouvez-vous voir mon code mis à jour. Est-ce une bonne mise en œuvre. Est-ce que empty() fonctionne avec des listes déroulantes et des boutons radio? – Jshee

0

Il suffit de vérifier littéralement:

if($_POST['foo'] === ""){

+0

Le code n'a pas l'air agréable de mettre comme 4 ou 5 si les déclarations. Puis-je mettre tout cela dans un appel si comme si ($ _ POST ['addType'] === "" || if ($ _ POST ['name'] === "") {) {... etc ' – Jshee

+0

Absolument, si vous voulez. Personnellement, je pense que plusieurs lignes semblent meilleures, surtout si elles sont enveloppées dans une fonction booléenne, mais pour chacune d'entre elles. Ce que vous venez d'écrire ne devrait pas poser de problème d'évaluation. –

+0

Génial, merci la mort. – Jshee

0

Si vous allez avoir une forme particulièrement grande, vous pouvez vouloir utiliser des tableaux et une boucle for. Quand j'ai construit 30 tableaux de champs, l'imbrication d'une série d'instructions if devient très inégale, très rapidement.

je recommande d'écrire une fonction rapide comme

function validatePost($checkValues) 
{ 
    foreach($checkValues as $value) 
    { 
     $checked = 0; 
     foreach($_POST as $key => $value) 
     { 
      if($key == $checkValues) 
      { 
       $checked = 1; 
       if(empty($value)) 
       { 
        return false; 
       } 
      } 
     } 

     if($checked == 0) 
     { 
      return false; 
     } 
    } 
} 

Gardez à l'esprit que ce ne comprend aucune vérification regex, mais vous pouvez ajouter que dans la boucle du milieu foreach. Puis, en ligne dans votre code que vous appelez cette fonction comme:

$checkValues = array('addType', 'deptName', 'email', 'name') 
$return = validatePost($checkValues); 
if($return == false) 
{ 
    echo "<span color='red;'>Please fill out entire form.</span>" 
} 
else 
{ 
    return; 
} 

Évidemment, vous pouvez ajouter des fonctionnalités pour le rendre plus bavard, mais c'est une validation très basique pour vous qui est évolutive.

Questions connexes