Page 1 sur 1

Vérication total d'un formulaire

Posté : 16 août 2006, 14:22
par laplumaencre
Salut et oui me revoila, mais j'ai refléchi avant de poster mon message voici mon probleme et m'a solution (qui deconne) que j'ai trouvé

J'ai un formulaire, avec plus de 50 champs, et autant de controle dessus, je veux que lorsque je n'ai plus un seul message d'erreur j'envois ma requete d'insertion des données ds la fiche, sinon que j'affiche les erreurs en bas de mon formulaire et ne passe pas a l'envois de requete et redirection...
donc un exemple de controle et recup de champ :
if ($_POST["budget"]!="") {
		if (is_numeric($_POST["budget"])) {
			$budget=$_POST["budget"];
			$message24="ok";
		} else {
			$message24="Veuillez saisir un budget qui contient que des chiffres (entiers ou réels) !<br>";
		}
	}
et ensuite le traitement si message d'erreur echo pour dire les message d'erreur sinon tous est "ok" alors faire requete d'insert .
<?php
if ($message1 != "ok" && $message2 != "ok" && $message3 != "ok" && $message4 != "ok" && $message5 != "ok" && $message6 != "ok" &&
	$message7 != "ok" && $message8 != "ok" && $message9 != "ok" && $message10 != "ok" && $message11 != "ok" && $message12 != "ok" &&
	$message13 != "ok" && $message14 != "ok" && $message15 != "ok" && $message16 != "ok" && $message17 != "ok" && $message18 != "ok" &&
	$message19 != "ok" && $message20 != "ok" && $message21 != "ok" && $message22 != "ok" && $message23 != "ok" && $message24 != "ok")
	{// Si  message d'erreur alors les affichés sinon faire la requete d'insertion dans la base de donnée
	echo $message1, $message2, $message3, $message4, $message5, $message6, $message7, $message8, $message9, $message10, 
		 $message11, $message12, $message13, $message14, $message15, $message16, $message17, $message18, $message19, $message20,
		 $message21, $message22, $message23, $message24;
	} else {	
//-------------------------------------------------------------------------------------------------------------------
//--------------------------REQUETE MySQL :INSERTION DES DONNEES DANS LA TABLE FICHE---------------------------------
//-------------------------------------------------------------------------------------------------------------------
	$connexion=mysql_connect("$hostname_dbprotect","$username_dbprotect","$password_dbprotect") or die("<p>Echec de connexion!");
	mysql_select_db("$database_dbprotect", $connexion) or die ("<p>Echec de connexion à la base de donnée!");

	if ($connexion) {
		if ($_SESSION['privilege'] == "com") {
			//insertion fiche partie commercial
			$sql = mysql_query("INSERT INTO `fiche` (`num_fiche`, `date_fiche`, `nom_projet`, `nbre_imp_clt`, `nbre_imp_com`, `marque`, `visuel`,
 `origine`, `commercial`, `assis_com`, `client`, `tel_client`, `mail_client`, `adresse_client`, `contact`, `design_motif`, `type_motif`, `type_realisation`,
 `zone_realisation`, `dim_largeur`, `dim_longueur`, `dim_prof`, `type_cordon`, `zone_type_cordon`, `color_cordon`, `zone_color_cordon`, `type_ampoule`,
 `zone_type_ampoule`, `color_ampoule`, `zone_color_ampoule`, `type_luciole`, `gam_prod_luciole`, `zone_gam_prod_luciole`, `color_luciole`,
 `zone_color_luciole`, `guir_sapin`, `zone_guir_sapin`, `tapis_sapin`, `texte_decor`, `typo`, `type_ecrit`, `logo`, `type_fixa`, `zone_type_fixa`, `qte`,
 `budget`, `remarque`) 
				   VALUES (NULL, '$date', '$nom_projet', '$nbre_imp_clt', '$nbre_imp_com', '$marque', '$visuel', '$origine', '$commercial',
 '$assis_com', '$client', '$tel_client', '$mail_client', '$adresse_client', '$contact', '$design_motif', '$type_motif', '$type_realisation',
 '$zone_realisation', '$dim_largeur', '$dim_longueur', '$dim_prof', '$type_cordon', '$zone_type_cordon', '$color_cordon', '$zone_color_cordon',
 '$type_ampoule', '$zone_type_ampoule', '$color_ampoule', '$zone_color_ampoule', '$type_luciole', '$gam_prod_luciole', '$zone_gam_prod_luciole',
 '$color_luciole', '$zone_color_luciole', '$guir_sapin', '$zone_guir_sapin', '.$tapis_sapin', '$texte_decor', '$typo', '$type_ecrit', '$logo', '$type_fixa',
 '$zone_type_fixa', '$qte', '$budget', '$remarque')") or die (mysql_error());
			//Récupération du n° de fiche qui vient d'être crée'
			$num_fiche=mysql_insert_id();
			$_SESSION['num_fiche']=$num_fiche;
		} else if ($_SESSION['privilege'] == "prod") { 
			//insertion sur partie production (presque tout :-))
			$sql = mysql_query("INSERT INTO `fiche` (`num_fiche`, `date_fiche`, `nom_projet`, `nbre_imp_clt`, `nbre_imp_com`, `marque`, `visuel`,
 `origine`, `commercial`, `assis_com`, `client`, `tel_client`, `mail_client`, `adresse_client`, `contact`, `design_motif`, `type_motif`, `type_realisation`,
 `zone_realisation`, `dim_largeur`, `dim_longueur`, `dim_prof`, `type_cordon`, `zone_type_cordon`, `color_cordon`, `zone_color_cordon`, `type_ampoule`,
 `zone_type_ampoule`, `color_ampoule`, `zone_color_ampoule`, `type_luciole`, `gam_prod_luciole`, `zone_gam_prod_luciole`, `color_luciole`,
 `zone_color_luciole`, `guir_sapin`, `zone_guir_sapin`, `tapis_sapin`, `texte_decor`, `typo`, `type_ecrit`, `logo`, `type_fixa`, `zone_type_fixa`, `qte`,
 `budget`, `remarque`, `faisabilite`, `prix_revient`, `poids`, `puissance`) 			
				   VALUES ('NULL', '$date', '$nom_projet', '$nbre_imp_clt', '$nbre_imp_com', '$marque', '$visuel', '$origine', '$commercial',
 '$assis_com', '$client', '$tel_client', '$mail_client', '$adresse_client', '$contact', '$design_motif', '$type_motif', '$type_realisation',
 '$zone_realisation', '$dim_largeur', '$dim_longueur', '$dim_prof', '$type_cordon', '$zone_type_cordon', '$color_cordon', '$zone_color_cordon',
 '$type_ampoule', '$zone_type_ampoule', '$color_ampoule', '$zone_color_ampoule', '$type_luciole', '$gam_prod_luciole', '$zone_gam_prod_luciole',
 '$color_luciole', '$zone_color_luciole', '$guir_sapin', '$zone_guir_sapin', '$tapis_sapin', '$texte_decor', '$typo', '$type_ecrit', '$logo', '$type_fixa',
 '$zone_type_fixa', '$qte', '$budget', '$remarque', '$faisabilite', '$prix_revient', '$poids', '$puissance')") or die (mysql_error());
			//Récupération du n° de fiche qui vient d'être crée'
			$num_fiche=mysql_insert_id();
			$_SESSION['num_fiche']=$num_fiche;  ?>
<SCRIPT language="javascript">
window.location="fiche_save.php";
</SCRIPT>
<?php
		}
	}	
	}
}	
?>
Oui je sais un peu bourrin ma technique mais bon, j'fais comme je peux , merci

Posté : 16 août 2006, 17:11
par Truc
Attention à la mise en page du Forum... ça ne coût rien des sauts de ligne dans un code.
Pense y à l'avenir
:wink:

Posté : 16 août 2006, 17:14
par Truc
Et donc c'est quoi la question ?

Re: Vérication total d'un formulaire

Posté : 16 août 2006, 17:30
par Shrell
if ($message1 != "ok" && $message2 != "ok" && ... $message24 != "ok")
	{
ce test ne sera vrai que si tous les champs ont une erreur. Si tu veux qu'il soit vrai quand au moins un champ a une erreur, remplace tes ET (&&) par des OU (||).
sinon, pour t'éviter ce long test, au lieu de stocker tous tes messages d'erreur comme tu le fais, crée plutot un tableau d'erreurs.
Exemple :
if(test_du_champ1) {
   $erreurs['champ1']="message d'erreur";
}
if(test_du_champ2) {
   $erreurs['champ2']="message d'erreur";
}
puis
if(is_array($erreurs)) { //si il y a au moins un element dans le tableau erreurs (au moins une erreur)
   //traitement des erreurs
} else { //sinon c'est tout bon
  //enregistrement
}

Posté : 17 août 2006, 08:40
par laplumaencre
Merci Shrell, cette solution est vraiment bien. Je me demande une chose,
exemple: l'utisateur envois le form, mais il y a une erreur sur le champ2, ok il corrige ça et renvois mais erreur['champ2'], n'est pas vider entre temps donc il gardera l'erreur?Vu que sur un champ j'ai beaucoup de test il faut que je jongle entre erreur["champ2"]="erreur" et erreur["champ2"]="null" ?

Posté : 17 août 2006, 09:32
par laplumaencre
Bon j'ai fais donc suivant ton exemple Shrell, mais mes message d'erreur ne s'affiche pas?!!
Biensur j'ai modifié ds le controle des champs en mettant $erreur["champ1"], 2 ,3 ... 50 :-)
if (is_array($erreur)) { //si il y a au moins au moins une erreur dans le tableau erreurs[]
  for ($i=0;$i<count($erreur);$i++) { //echo des erreurs
  	echo "dans la boucle for";
	echo $erreur[$i];
   }
} else {
//requete insert 
}
J'ai meme ajouter echo "dans la boucle for"; pour le debug, et j'ai bien un echo du nbre de fois d'erreur ($i du tableau) mais il passe pas au echo $erreur[$i]; je comprend pas pourquoi. Merci à ceux qui' m'aide.

Posté : 17 août 2006, 10:48
par laplumaencre
J'ai réussi a faire une boucle foreach qui me renvois tous mes message d'erreur ;-) mais probleme et oui ! quand je n'ai pas de message d'erreru je dis $erreur["champ"]=null mais ds ma boucle =>
if (is_array($erreur)) { //si il y a au moins au moins une erreur dans le tableau erreurs[]
	echo "ds la boucle array";
	foreach ($erreur as $champ => $message) {
	echo "$message";
	}
} else { //sinon c'est tout bon enregistrement

=> j'ai l'impression que le "null" vaut quand meme quelque chose puisque qu'il passe pas au traitement de la requete (else requet insert) ?? SOS

Posté : 17 août 2006, 11:19
par laplumaencre
J'ai résolus mon probleme (oui modérateur) mais c'est surtout grace a Shrell qui m'a mit sur la bonne voie sinon j'y serait encore avec mes test de 4 lignes :-) Merci Shrell voici la soluce pour vérifier ts les champ d'un formulaire et si plus de message d'erreur traiter le formulaire (requete)
Grace a la fonction unset au lieu de erreur["champ"]=null !!
if ($_POST["qte"]=="") {
		$erreur["champ19"]="Veuillez saisir une quantité !<br>";
	} elseif ($_POST["qte"]!="" && is_numeric($_POST["qte"])) {	
		$qte=htmlentities($_POST["qte"]);
		unset($erreur["champ19"]);
	} else {
		$erreur["champ19"]="Veuillez saisir une quantité qui contient que des chiffres !<br>";
	}
et la boucle de controle des message d'erreurs si ok traitement .
if (is_array($erreur)) { //si il y a au moins au moins une erreur dans le tableau erreurs[]
	echo "ds la boucle array";
	foreach ($erreur as $champ => $message) {
	echo $message;
	}
} else { //sinon c'est tout bon enregistrement
//requete insert
}
Encore un grand merci a Shrell a+