Vérication total d'un formulaire

Eléphant du PHP | 183 Messages

16 août 2006, 14:22

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 août 2006, 17:11

Attention à la mise en page du Forum... ça ne coût rien des sauts de ligne dans un code.
Pense y à l'avenir
:wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 août 2006, 17:14

Et donc c'est quoi la question ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 377 Messages

16 août 2006, 17:30

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
}
Petit scarabée deviendra grand

Eléphant du PHP | 183 Messages

17 août 2006, 08:40

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" ?

Eléphant du PHP | 183 Messages

17 août 2006, 09:32

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.

Eléphant du PHP | 183 Messages

17 août 2006, 10:48

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

Eléphant du PHP | 183 Messages

17 août 2006, 11:19

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+