Obligation de coché au moins un checkbox avant envoie en BDD

Fermé
crixuss Messages postés 25 Date d'inscription jeudi 29 août 2013 Statut Membre Dernière intervention 14 novembre 2016 - Modifié par crixuss le 30/08/2013 à 14:01
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 31 août 2013 à 18:13
Bonjour,

Je fais un formulaire dans lequel un utilisateur doit faire donner des informations le concernant, puis faire un choix entre plusieurs événement qui lui sont arriver au cours de l'année. J'aimerais que tant qu'il n'a pas fait au moins un choix qu'il ne puisse pas valider le formulaire. J'arrive a faire le contrôle PHP sur tout les autres champs "text" mais je bloque sur les checkbox et je ne vois pas comment faire. Quelqu'un aurait la solution?

Merci d'avance.

Voici mon code HTML concernant les événements:

<form method="post" action="fiche_signal.php" name="form" id="form"> 
                      <fieldset>
  
           <input type ="checkbox" name="evenement[0]" value = "Affectation au cours de la periode" id="evenement0"<?php if(isset($_POST['evenement'][0])) echo 'checked="checked"'; ?></input><label for="evenement">Affectation au cours de la période </label><br>
           
           <input type ="checkbox" name="evenement[1]" value = "Changement de manager"  id="evenement1"<?php if(isset($_POST['evenement'][1])) echo 'checked="checked"'; ?></input><label for="evenement">Changement de manager </label><br>
           
           <input type ="checkbox" name="evenement[2]" value = "Evolution de methode de travail"  id="evenement2"<?php echo ($_POST['evenement'][2] == "Evolution de methode de travail")?"checked='checked'":""; ?> </input> <label for="evenement">Evolution des méthodes de travail </label><br>(systeme de gestion, nouvelle methode et/ou procedure) <br>
           
           <input type ="checkbox" name="evenement[3]" value = "Longue abscence"  id="evenement3"<?php echo ($_POST['evenement'][3] == "Longue abscence")?"checked='checked'":""; ?></input> <label for="evenement">Longue absence </label><br>
           
           <input type ="checkbox" name="evenement[4]" value = "Autres Evenement"  id="evenement4"<?php echo ($_POST['evenement'][4] == "Autres Evenement")?"checked='checked'":""; ?></input>  <label for="evenement">Autres evenement </label><br>
            
           <input type ="checkbox" name="evenement[5]" value = "Aucun Evenement"   id="evenement5"<?php echo ($_POST['evenement'][5] == "Aucun Evenement")?"checked='checked'":""; ?></input><label for="evenement">Aucun evenement </label> <br>
   
          </fieldset>
</form>
  


Voici mon code PHP:

<?php
define('DB_SERVER', 'localhost'); //serveur mysql
define('DB_SERVER_USERNAME', 'root'); //nom d'utilisateur
define('DB_SERVER_PASSWORD', 'root');//mot de passe 
define('DB_DATABASE', 'evaluation');//nom de la base de donnée


if(isset($_POST["valider"]))
{
 //connexion au serveur mysql
 $link = mysql_connect('localhost', 'root', 'root');
 mysql_select_db('evaluation', $link) or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données de connections');


  //on verifie si les champs sont vides
 foreach ($_POST as $idx=>$value)
  switch($idx)
  {
  
  case 'nomC':
   if (!empty($value))
    $champs= mysql_real_escape_string(htmlspecialchars(stripcslashes($value)));
   else
    $alert[]="Vous n'avez pas saisie le nom du collaborateur";
   break;
  
  case 'prenomC': 
   if (!empty($value))
    $champs0=  mysql_real_escape_string(htmlspecialchars(stripcslashes($value)));
   else
    $alert[] ="Vous n'avez pas saisie le prénom du collaborateur";
   break;
    
  case 'matriculeC': 
   if (!empty($value))
    $champs1=  mysql_real_escape_string(htmlspecialchars(stripcslashes($value)));
   else
    $alert[] ="Vous n'avez pas saisie le matricule du collaborateur";
   break;
  
  case 'directionC':
   if(!empty($value))
    $champs2= mysql_real_escape_string(htmlspecialchars(stripcslashes($value)));
   else
    $alert[]="Vous n'avez pas saisie la direction du collaborateur";
   break;
   
  case 'entiteC':
   if(!empty($value))
    $champs3= mysql_real_escape_string(htmlspecialchars(stripcslashes($value)));
   else
    $alert[]="Vous n'avez pas saisie l'entité du collaborateur";
   break;
   
  case 'prise_de_fonctionC':
   if(!empty($value))
    $champs4= mysql_real_escape_string(htmlspecialchars(stripcslashes($value)));
   else
    $alert[]="Vous n'avez pas saisie la date de prise de fonction du collaborateur";
   break;
  
  case 'intitule_emploiC':
   if(!empty($value))
    $champs5= mysql_real_escape_string(htmlspecialchars(stripcslashes($value)));
   else
    $alert[]="Vous n'avez pas saisie l'intitulé de l'emploi du collaborateur";
   break; 
    
  case 'poste_precedentC':
   if(!empty($value))
    $champs6= mysql_real_escape_string(htmlspecialchars(stripcslashes($value)));
   else
    $alert[]="Vous n'avez pas saisie le poste précedent du collaborateur";
   break;  
  
  case 'evenement':
   foreach ($value as $event)
    if(!empty($event))
     $champs7[]= mysql_real_escape_string(htmlspecialchars(stripcslashes($event)));
   break;
default : null;
  }

//si on a un message d'erreur
 if(!empty($alert))
 {
  
  echo'<div id="messErreur">';
  echo'nombre d\'erreur('.sizeof($alert).')  </br>';
  echo'<ul>';
  
   foreach ($alert as $err)
   echo'<li>'.$err.'</li>';
   echo '</ul>';
   echo'<div>';
        }
        else {//on insère dans la base de donnée}
}
?>

1 réponse

heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 140
30 août 2013 à 14:02
Bonjour,

Je sais que tu vas penser que je ne réponds pas à ta question. Mais je pense que tu devrais lire quand même. :o)

Tu trouveras ta réponse dans le javascript. En principe on ne fait que peu de vérification de ce type dans du PHP. Javascript a été créé pour ça.

Tu fais un formulaire. Tu le soumets. Si erreur, PHP renvoie un message. Tu resoumets. S'il y a une autre erreur, PHP va renvoyer encore une fois. Il va y avoir un tas d'allées et venues entre client et serveur qui peuvent générer un trafic et un encombrement réseau inutile en ralentissant les actions, ce qui ne serait pas le cas en s'y prenant autrement.

Le javascript s'exécute côté client. Ton javascript se trouvant dans la même page que ton formulaire, vérifie la bonne saisie en local (chez le programme client) ; ça ne part que si c'est bon. Si c'est correct et conforme, c'est expédié au script PHP (côté serveur) qui récupère toutes les données attendues et conformes, que tu ne devrais plus avoir à vérifier. Sans compter que la vérification se faisant sur place c'est plus rapide que d'attendre en retour l'éventuel message d'erreur du serveur, ça simplifie le script et ça soulage le serveur. En fait, tu ne vérifies dans le script PHP que les choses que tu n'as absolument pas pu vérifier sur place en javascript. Exemple: tu fournis un nom de login. L'information est là, elle ne contient que des caractères autorisés, la longueur est dans la fourchette autorisée, mais à ce niveau (chez le client) on ne peut pas encore savoir si le login saisi se trouve réellement dans la base de données. Mais ça, ça peut encore se régler avec Ajax.

<script language="javascript" type="text/javascript">
...
function verif() {
	if( une_erreur ) return false;
	if ( une_autre_erreur ) return false;
	// ... fin des tests...
	return true;
}
</script>

<form name="xxx" method="post" action="script.php" onsubmit="return verif()">
...
</form>
0
crixuss Messages postés 25 Date d'inscription jeudi 29 août 2013 Statut Membre Dernière intervention 14 novembre 2016
30 août 2013 à 18:08
Si j'ai ben compris, je dois faire la vérifications de tout les champs en javascript avant d'envoyer les informations via PHP. Mais faire les test uniquement en javascript n'est-il pas dangereux?
0
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 140
31 août 2013 à 18:13
C'est le rôle premier du javascript.
Dangereux en quoi ?
De toutes les manières tu peux, si ça te chante, contrôler derrière plus finement dans PHP pour des choses plus spécifiques mais déjà ça limiterait pas mal les allées et venues inutiles entre client et serveur, soulagerait et le réseau et le serveur.
Par ailleurs, javascript n'est pas un sous-langage de m... ne méritant pas l'utilisation. Il a ses avantages pour certains types d'utilisation tels les vérifications de formulaires. Si ce n'était pas le cas, il aurait été abandonné depuis longtemps et j'ai vu des scripts codés en javascript qui étaient parfois beaucoup plus efficaces que certains codes PHP...
Enfin ! Moi, je te dis ça mais tu fais comme tu veux...
0