8725 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Est-ce que ça te retourne une erreur Mysql ?

Ensuite, si tu fais un echo $sql; (ce qui va te permettre d'avoir ta requête tel que mysql est sensé la recevoir) et que tu copies-colle sur phpmyadmin, est-ce que ça marche ?
euh chose bizarre dont j'ai pas fait gaffe avant, c'est que j'ai même pas le message ok et de même vu que j'ai copier echo $sql; avant le echo $msg_ok;

C'est comme si le code ne s’exécutait pas en entier. Du coup je peux même pas te dire si la requete est bonne.
Je viens de changer la ligne foreach suite aux conseils d'un ami:
foreach($_POST as $index => $valeur){
        [#red]$valeur[/#] = mysql_real_escape_string(trim($valeur));
}


au lieu de:
foreach($_POST as $index => $valeur){
       [#red] $index[/#]= mysql_real_escape_string(trim($valeur));
}



Le code deviens donc:
else{
	foreach($_POST as $index => $valeur){
        $valeur = mysql_real_escape_string(trim($valeur));
}
	//Déclaration date_appel + Regex qui permet d'inverser l'année avec le jour pour un enregistrement correct dans mysql
	if(isset($_POST['date_appel'])) $date_appel = $_POST['date_appel'];
	$Newdate_appel = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_appel);

	//Déclaration des variables pour les fieldsets de base pour la table "appels"
	$_POST['num_appelant'];
	$_POST['heure_appel'];
	etc.......
	//Déclaration des variables pour les fieldsets devis pour la table "devis"
	//idem

	$_POST['objet'];
	// Insérer les données dans la table "appels" avec une requête sql de type "INSERT" et la fonction mysql_query().
	// Vérification que la requête s'est bien effectuée avec la valeur de retour $res
	// Si c'est le cas, on affiche $msg_ok, sinon on affiche l'erreur qui a eu lieu dans MySQL
	// Le premier "" dans values correspont dans la table à l'ID qui est automatiquement incrémenté
	$sql="INSERT INTO appels(id, num_appelant, date_appel, heure_appel, media, nom_demandeur, batiment, systemes, service, local, type_inter, tps_inter_souhaite, objet_appel, commentaires) 
	VALUES ('','".$_POST['num_appelant']."','$Newdate_appel','".$_POST['heure_appel']."','".$_POST['media']."','".$_POST['nom_demandeur']."','".$_POST['batiment']."','".$_POST['systemes']."','".$_POST['service']."','".$_POST['local']."','".$_POST['type_inter']."','".$_POST['tps_inter_souhaite']."', '".$_POST['objet_appel']."', '".$_POST['objet']."')";
	
	//On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset audio
	if($_POST["type_inter"] == '1'){
		echo "entre dans la condition 1";
		$sql="INSERT INTO assistance_audio(id_audio, id_appel, type_inter, date_debut_inter, heure_debut_inter, date_fin_inter, heure_fin_inter, intervenant1, intervenant2, intervenant_autre, entreprise, prestation_effectuer, commentaires) 
		VALUES ('','".$_POST['id_appel']."', '".$_POST['type_inter']."', '".$_POST['date_debut_inter']."', '".$_POST['heure_debut_inter']."', '".$_POST['date_fin_inter']."', '".$_POST['heure_fin_inter']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."', '".$_POST['intervenant_autre']."', '".$_POST['entreprise']."', '".$_POST['prestation_effectuee']."', '".$_POST['objet']."')";
	}
	//On enregistre les champs des fieldsets correspondant au choix 2 : Fieldset correctif
	else if($_POST["type_inter"] == '2'){
		echo "entre dans la condition 2";
		$sql="INSERT INTO correctif(id_correctif, id_appel, num_fim, date_appel, heure_appel, nom_demandeur, service, batiment, local, type_inter, systemes, ensemble, element, sous_element, surete, date_debut_inter, duree_inter, tps_acces_signature, date_fin_appel, heure_fin_appel, heure_cloture_panne, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, dysfonctionnement, parametre_bf, consignes_inter, commentaires) 
		VALUES ('','".$_POST['id_correctif']."', '".$_POST['id_appel']."', '".$_POST['num_fim']."', '$Newdate_appel', '".$_POST['heure_appel']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['type_inter']."', '".$_POST['systemes']."', '".$_POST['ensemble']."', '".$_POST['element']."', '".$_POST['sous_element']."', '".$_POST['surete']."', '".$_POST['date_debut_inter']."', '".$_POST['duree_inter']."', '".$_POST['tps_acces_signature']."', '".$_POST['date_fin_appel']."', '".$_POST['heure_fin_appel']."', '".$_POST['heure_cloture_panne']."', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."', '".$_POST['intervenant_autre']."', '".$_POST['dysfonctionnement']."', '".$_POST['parametre_bf']."', '".$_POST['consignes_inter']."', '".$_POST['objet']."')";
	}
	
	//On enregistre les champs des fieldsets correspondant au choix 3 : Fieldset devis
	// Pour le moment la table n'est pas crée
	//else if($_POST["type_inter"] == '3'){
		//echo "entre dans la condition 3";
		//$sql="INSERT INTO devis(id_devis, id_appel, type_inter, commentaires) 
		//VALUES ('','".$_POST['id_appel']."', '".$_POST['type_inter']."', '".$_POST['objet']."')";
	//}
	//On enregistre les champs des fieldsets correspondant au choix 4 : Fieldset exploitation
	else if($_POST["type_inter"] == '4'){
		$sql="INSERT INTO exploitation(id_exploitation, id_appel, type_exploitation, nom_demandeur, service, batiment, local, date_debut_inter, duree_inter, tps_acces_signature, date_fin_inter, heure_fin_inter, heure_cloture_panne, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, type_operation, objet, prestation_effectuee)
		VALUES ('','".$_POST['id_appel']."', '".$_POST['type_exploitation']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['date_debut_inter']."', '".$_POST['duree_inter']."', '".$_POST['tps_acces_signature']."', '".$_POST['date_fin_inter']."', '".$_POST['heure_fin_inter']."', '".$_POST['heure_cloture_panne']."', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."','".$_POST['intervenant_autre']."', '".$_POST['type_operation']."', '".$_POST['objet']."', '".$_POST['prestation_effectuee']."')";
	}
	$res=mysql_query($sql);
	if ($res) {
		echo $msg_ok;
		// Redirection vers la page appels_tableau
		header('Location: ../formulaires_tableau/gest_appels_tableau.php');
	} else {
		echo mysql_error();
	}
}
?>


Mais cela ne change pas pour autant, j'arrive toujours pas à enregistrer dans les autres tables
Sors le echo $sql du "if($res)".

L'objectif c'est de voir pourquoi ton mysql_query() plante, donc le mieux ça serait de voir la tronche de la requête générée par ton PHP ^^
Je viens de tester l'echo un peu partout mais j'ai rien du tout comme message.

Après la ligne d'enregistrement dans la table appels:
$sql="INSERT INTO appels(id, num_appelant, date_appel, heure_appel, media, nom_demandeur, batiment, systemes, service, local, type_inter, tps_inter_souhaite, objet_appel, commentaires) 
	VALUES ('','".$_POST['num_appelant']."','$Newdate_appel','".$_POST['heure_appel']."','".$_POST['media']."','".$_POST['nom_demandeur']."','".$_POST['batiment']."','".$_POST['systemes']."','".$_POST['service']."','".$_POST['local']."','".$_POST['type_inter']."','".$_POST['tps_inter_souhaite']."', '".$_POST['objet_appel']."', '".$_POST['objet']."')";
	[#red]echo $sql;[/#]


Dans la boucle else if d'un des choix du select, ici "correctif"
//On enregistre les champs des fieldsets correspondant au choix 2 : Fieldset correctif
	else if($_POST["type_inter"] == '2'){
		$sql="INSERT INTO correctif(id_correctif, id_appel, num_fim, date_appel, heure_appel, nom_demandeur, service, batiment, local, type_inter, systemes, ensemble, element, sous_element, surete, date_debut_inter, duree_inter, tps_acces_signature, date_fin_appel, heure_fin_appel, heure_cloture_panne, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, dysfonctionnement, parametre_bf, consignes_inter, commentaires) 
		VALUES ('','".$_POST['id_correctif']."', '".$_POST['id_appel']."', '".$_POST['num_fim']."', '$Newdate_appel', '".$_POST['heure_appel']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['type_inter']."', '".$_POST['systemes']."', '".$_POST['ensemble']."', '".$_POST['element']."', '".$_POST['sous_element']."', '".$_POST['surete']."', '".$_POST['date_debut_inter']."', '".$_POST['duree_inter']."', '".$_POST['tps_acces_signature']."', '".$_POST['date_fin_appel']."', '".$_POST['heure_fin_appel']."', '".$_POST['heure_cloture_panne']."', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."', '".$_POST['intervenant_autre']."', '".$_POST['dysfonctionnement']."', '".$_POST['parametre_bf']."', '".$_POST['consignes_inter']."', '".$_POST['objet']."')";
		[#red]echo $sql;[/#]
	}


Mais j'ai aucun message
Modifié par maxredphenix (12 May 2012 - 14:41)
Essaye un

echo $_POST["type_inter"];

Au début de ton script... là je suppose que ce sont tes test qui plantent ^^

(y aurait pas une erreur sur ton formulaire html ?)
Je viens de relire tout mon formulaire et je me suis rendu compte qu'il y avait un autre champ qui se trouve dans un des fieldsets correctif (qui apparaissent lors de la selection "correctif" dans le select). J'ai donc renommé cet input et son champ correspondant dans la bdd.

Maintenant lorsque je selectionne "correctif" Chrome me dit qu'il y a des erreurs sur la ligne 108 et 118, ce qui correspondant au 2 else if "assistance audio et exploitation" (il y a pas le else if du devis puisque j'ai mis les lignes en commentaires vu que la table n'est pas créer dans la bdd)

Voila un exemple d'une des phrase: ( ! ) Notice: Undefined index: tps_inter_souhaite in C:\wamp\www\Monsite\php\formulaires_traitement\traitement_appels.php on line 118

et la dernière phrase est Column count doesn't match value count at row 1

Sinon au cas ou, voila une copie du site avec seulement les pages en cause si tu penses que se sera plus facile pour toi:
http://dl.dropbox.com/u/31901874/Copie%20site%20pour%20forum/Monsite.rar

Merci
Modifié par maxredphenix (13 May 2012 - 13:10)
Merci pour ta reponse, je vais regarder cela.

Sinon si je place l'echo dans ceci et que je choisi correctif:
else{
	foreach($_POST as $index => $valeur){
        $valeur = mysql_real_escape_string(trim($valeur));
		echo $_POST["type_inter"];
}


j'ai ceci qui apparaît à l'écran 22222222222222222222222 (j'ai fait une copie exacte du nbre de 2). C'est assez bizarre comme valeur du select!!
Je comprends par pour l'erreur, je fais bien comme il faut vu ce que je viens de lire dans ton liens, ils disent qu'il faut preciser les champs à enregistrer dans le INSERT INTO et VALUES, le reste prendra la valeur par défaut.

Moi j'ai ceci:
if($_POST["type_inter"] == '1'){
		$sql="INSERT INTO assistance_audio(id_audio, id_appel, type_inter_assistaudio, etc....) 
		VALUES ('','".$_POST['id_appel']."', '".$_POST['type_inter_assistaudio']."'  etc....)";
	}


Donc logiquement ça devrait être bon non?
maxredphenix a écrit :
Merci pour ta reponse, je vais regarder cela.

Sinon si je place l'echo dans ceci et que je choisi correctif:
else{
	foreach($_POST as $index => $valeur){
        $valeur = mysql_real_escape_string(trim($valeur));
		echo $_POST["type_inter"];
}


j'ai ceci qui apparaît à l'écran 22222222222222222222222 (j'ai fait une copie exacte du nbre de 2). C'est assez bizarre comme valeur du select!!

Comme c'est dans le foreach, c'est tout à fait logique ^^ il te fait un "2" à chaque fois qu'il fait une boucle ^^



Pour ton erreur, sans doute que tu as des champs dans ta table qui ne peuvent pas être nul et qui n'ont pas de valeurs par défaut que tu n'as pas inclus...

genre le id_audio, tel que tu l'insers là, tu obliges un champ vide et je parie que ce champs ne peut pas être nul ?
Donc même si il est dans la boucle et qu'il se répété déjà ça me rassure parce que 2 c'est la valeur de correctif dans le select.

Sinon j'ai regarder toutes les tables de ma bdd, et tous les champs sont en null: non

Apercu config table audio:
upload/43992-tableaudio.jpg

Apercu config table correctif
upload/43992-tablecorre.jpg
Hello,

je pense que tu as une petite erreur :

if($_POST["type_inter"] == '1'){
		$sql="INSERT INTO [b][#red]assistance_audio[/#][/b](id_audio, id_appel, type_inter_assistaudio, etc....) 
		VALUES ('','".$_POST['id_appel']."', '".$_POST['type_inter_assistaudio']."'  etc....)";
	}


et le nom de la table donné par le screenshot de myadmin est : assitance_audio, il semble qu'il manque un "s".
Modifié par beyriem (15 May 2012 - 17:50)
Merci, je viens de corriger cette faute, mais t'a l'oeil parce que j'avais vraiment pas fait gaffe à ça. J'ai aussi corrigé une erreur dans le fichier de traitement, il y avait 2 fois $_POST['tps_inter_souhaite'].

J'ai toujours des erreurs qui apparaissent lors de l'enregistrement, j'ai toujours cette ligne:( ! ) Notice: Undefined index: media in C:\wamp\www\Monsite\php\formulaires_traitement\traitement_appels.php on line 53 mais pour chaque variable défini par $_POST['xxxx'] mais j'ai aussi ceci: Unknown column 'type_inter' in 'field list'. J'ai envoie le echo pour tester la valeur du select et j'ai bien "2" donc mon fichier de traitement me détecte bien la value de mon select

upload/43992-traitement.jpg

Tu me conseille de mettre quoi dans le post à la place ds xxxx? est ce que l'affichage des erreurs ne viendrait pas de la?
// Verif de l'existance de $_POST['xxxx']
	if (isset($_POST['[color=#9e141c]xxxx[/color]'])){
		//Déclaration des variables pour les fieldsets de base pour la table "appels"
		$_POST['num_appelant'];
		$_POST['heure_appel'];
		$_POST['num_appelant']; etc.....


Sinon juste comme ça:
Dans les fieldset qui dépendent du select "type_inter" de mon formulaire il y a plusieurs input qui se répète (comme intervenant1, intervenant2 etc...) du faite que la gestion des correctifs et des exploitations doivent avoir ces champs pour avoir un logiciel qui permet de remplir toutes les infos nécessaire. Est ce que le faite de nommée les inputs avec un name identique ne dérange pas pour l'enregistrement dans les différentes table de la bdd??

Encore merci
Moi je te conseille de revoir en détail TOUTES tes requêtes par rapport à tes tables...

$sql="INSERT INTO correctif(id_correctif, id_appel, num_fim, date_appel, heure_appel, nom_demandeur, service, batiment, local, type_inter, systemes, ensemble, element, sous_element, surete, date_debut_inter, duree_inter, tps_acces_signature, date_fin_appel, heure_fin_appel, heure_cloture_panne, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, dysfonctionnement, parametre_bf, consignes_inter, commentaires) 
		VALUES ('','".$_POST['id_correctif']."', '".$_POST['id_appel']."', '".$_POST['num_fim']."', '$Newdate_appel', '".$_POST['heure_appel']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['type_inter']."', '".$_POST['systemes']."', '".$_POST['ensemble']."', '".$_POST['element']."', '".$_POST['sous_element']."', '".$_POST['surete']."', '".$_POST['date_debut_inter']."', '".$_POST['duree_inter']."', '".$_POST['tps_acces_signature']."', '".$_POST['date_fin_appel']."', '".$_POST['heure_fin_appel']."', '".$_POST['heure_cloture_panne']."', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."', '".$_POST['intervenant_autre']."', '".$_POST['dysfonctionnement']."', '".$_POST['parametre_bf']."', '".$_POST['consignes_inter']."', '".$_POST['objet']."')";


Les champs de ta table "correctif" devrait coller à ceux de ta table de données :

http://forum.alsacreations.com/upload/43992-tablecorre.jpg


A savoir :
(id, id_appel, num_fim, date_appel, heure_appel, nom_demandeur, service, batiment, local, type_inter_correctif, systemes, ensemble, element, sous_element, surete, date_debut_inter, duree_inter, tps_acces_signature, date_fin_appel, heure_fin_appel, heure_cloture_panne, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, dysfonctionnement, parametre_bf, consignes_inter, commentaires)

et non :

(id_correctif, id_appel, num_fim, date_appel, heure_appel, nom_demandeur, service, batiment, local, type_inter, systemes, ensemble, element, sous_element, surete, date_debut_inter, duree_inter, tps_acces_signature, date_fin_appel, heure_fin_appel, heure_cloture_panne, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, dysfonctionnement, parametre_bf, consignes_inter, commentaires)



Quand à ta dernière question... heu Smiley eek

C'est quoi ça :
isset($_POST['[color=#9e141c]xxxx[/color]'])

Les clés du tableau $_POST sont sensé être les id des éléments du formulaire de la page qui envoie.


Sinon pour ton

Unknown column 'type_inter' in 'field list'.

C'est une erreur mysql et non php... Et il te sort que tu n'as pas de colonne "type_inter" dans la table où tu tentes d'insérer ce que tu insères.


Pour ta ligne notice, c'est rien de dramatique. (niveau d'erreur le plus faible de php..., ça se résoud en utilisant le isset comme tu le faisais, mais dans un premier temps, il vaut mieux une erreur mineure et y voir clair, que pas d'erreur mineur et le bordel)
Modifié par Lothindil (15 May 2012 - 20:19)
Excuse j'ai modifié ma ligne sql pour l'enregistrement dans la bdd dimanche et j'ai oublié de remettre la modif en ligne sauf le type_inter_correctif par contre j'avais pas vu que j'avais date_fin_appel au lieu de date_fin_inter.

Donc maintenant j'ai plus d'erreurs qui s'affichent, une fois que je clique sur enregistrement, le logiciel revient bien à la page gest_appel_tableau par contre rien n'est enregistré dans la table appel mais maintenant les enregistrement sont ok dans la table correctif ou autre table qui correspondent au select......
<?php 
// Connexion à la base de donnée pour WAMP
$host = "localhost"; 
$user = "root"; 
$passwd = ""; 
$database = "gestspie"; 
$link = @mysql_connect($host, $user,$passwd);

// Code de debbugage --> affichage des erreurs
error_reporting(E_ALL);

// Affichage de l'erreur en cas d'erreur de connexion à la bdd
if(!$link){die('Erreur de connexion au serveur');}
$select_db = @mysql_select_db($database);
if(!$select_db){die('Erreur de connexion à la base');}

// Déclaration des variables
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Enregistrement reussi";
$message = $msg_erreur;

// Enregistrement des champs non remplis
// Utilisation la fonction PHP empty() qui retourne:
//  -> "vrai" si la variable passée en paramètre est vide
//  -> "faux" dans le cas contraire.
if (empty($_POST['num_appelant']))$message .= "Le numéro de l'appelant";

// Si le contenu de la variable $message et plus grand que celui de la variable $msg_erreur, 
// c'est que nous venons d'ajouter des champs non remplis donc on affiche un message d'erreur
if (strlen($message) > strlen($msg_erreur)) {echo $message;}

// Si les champs sont bien remplis, on peut insérer leurs valeurs dans la base de données MySQL.
// Utilisation de mysql_real_escape_string() qui protège les données avant insertion et notamment 
// les apostrophes, guillemets, etc... pour protéger des attaques par injection SQL.
// La boucle foreach() va passer toutes la variables $_POST envoyées par le formulaire en revue. 
// Pour chacune d'elle nous allons créer une variable spécifique avec $$index, nettoyer sa valeur avec trim() 
// (en enlevant notamment les espaces de fin) et sécuriser sa valeur avec mysql_real_escape_string().
else{
	foreach($_POST as $index => $valeur){
        $valeur = mysql_real_escape_string(trim($valeur));
}
	echo $_POST["type_inter"];
	//Déclaration date_appel + Regex qui permet d'inverser l'année avec le jour pour un enregistrement correct dans mysql
	if(isset($_POST['date_appel'])) $date_appel = $_POST['date_appel'];
	$Newdate_appel = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_appel);
	// Verif de l'existance de $_POST['xxx']
	if (isset($_POST[''])){
		//Déclaration des variables pour les fieldsets de base pour la table "appels"
		$_POST['num_appelant'];
		$_POST['heure_appel'];
		$_POST['num_appelant'];
		$_POST['heure_appel'];
		$_POST['media'];
		$_POST['nom_demandeur'];
		$_POST['batiment'];
		$_POST['systemes'];
		$_POST['service'];
		$_POST['local'];
		$_POST['type_inter'];
		$_POST['tps_inter_souhaite'];
		$_POST['objet_appel'];
		$_POST['objet'];
			
		//Déclaration des variables pour les fieldsets assistance_audio pour la table "assistance_audio"
		//On ne reprend pas les variables appels car déjà créer au-dessus
		//$_POST['type_inter_assistaudio'];
		$_POST['date_debut_inter'];
		$_POST['heure_debut_inter'];
		$_POST['date_fin_inter'];
		$_POST['heure_fin_inter'];
		$_POST['intervenant1'];
		$_POST['intervenant2'];
		$_POST['intervenant_autre'];
		$_POST['entreprise'];
		$_POST['prestation_effectuee'];
			
		//Déclaration des variables pour les fieldsets correctif pour la table "correctif"
		//Idem: on reprend que les valeurs non crée au-dessus
		$_POST['num_fim'];
		$_POST['type_inter_correctif'];
		$_POST['ensemble'];
		$_POST['element'];
		$_POST['sous_element'];
		$_POST['surete'];
		$_POST['duree_inter'];
		$_POST['tps_acces_signature'];
		$_POST['heure_cloture_panne'];
		$_POST['dysfonctionnement'];
		$_POST['parametre_bf'];
		$_POST['consignes_inter'];
			
		//Déclaration des variables pour les fieldsets devis pour la table "devis"
		//idem
		//Pour le moment la table n'est pas défini, en attente des type de champs à mettre dans le formulaire
		//$_POST[''];

		//Déclaration des variables pour les fieldsets exploitation pour la table "exploitation"
		//idem
		$_POST['type_operation'];
	}
	// Insérer les données dans la table "appels" avec une requête sql de type "INSERT" et la fonction mysql_query().
	// Vérification que la requête s'est bien effectuée avec la valeur de retour $res
	// Si c'est le cas, on affiche $msg_ok, sinon on affiche l'erreur qui a eu lieu dans MySQL
	// Le premier "" dans values correspont dans la table à l'ID qui est automatiquement incrémenté
	$sql="INSERT INTO appels(id, num_appelant, date_appel, heure_appel, media, nom_demandeur, batiment, systemes, service, local, type_inter, tps_inter_souhaite, objet_appel, commentaires) 
	VALUES ('','".$_POST['num_appelant']."','$Newdate_appel','".$_POST['heure_appel']."','".$_POST['media']."','".$_POST['nom_demandeur']."','".$_POST['batiment']."','".$_POST['systemes']."','".$_POST['service']."','".$_POST['local']."','".$_POST['type_inter']."','".$_POST['tps_inter_souhaite']."', '".$_POST['objet_appel']."', '".$_POST['objet']."')";
	
	//On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset audio
	if($_POST["type_inter"] == '1'){
		$sql="INSERT INTO assistance_audio(id, id_appel, type_inter_assistaudio, date_debut_inter, heure_debut_inter, date_fin_inter, heure_fin_inter, intervenant1, intervenant2, intervenant_autre, entreprise, prestation_effectuer, commentaires) 
		VALUES ('','".$_POST['id_appel']."', '".$_POST['type_inter_assistaudio']."', '".$_POST['date_debut_inter']."', '".$_POST['heure_debut_inter']."', '".$_POST['date_fin_inter']."', '".$_POST['heure_fin_inter']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."', '".$_POST['intervenant_autre']."', '".$_POST['entreprise']."', '".$_POST['prestation_effectuee']."', '".$_POST['objet']."')";
	}
	//On enregistre les champs des fieldsets correspondant au choix 2 : Fieldset correctif
	else if($_POST["type_inter"] == '2'){
		$sql="INSERT INTO correctif(id, id_appel, num_fim, type_inter_correctif, date_appel, heure_appel, nom_demandeur, service, batiment, local, systemes, ensemble, element, sous_element, surete, date_debut_inter, duree_inter, tps_acces_signature, date_fin_inter, heure_fin_inter, heure_cloture_panne, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, dysfonctionnement, parametre_bf, consignes_inter, commentaires) 
		VALUES ('','".$_POST['id_appel']."', '".$_POST['num_fim']."', '".$_POST['type_inter_correctif']."', '$Newdate_appel', '".$_POST['heure_appel']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['systemes']."', '".$_POST['ensemble']."', '".$_POST['element']."', '".$_POST['sous_element']."', '".$_POST['surete']."', '".$_POST['date_debut_inter']."', '".$_POST['duree_inter']."', '".$_POST['tps_acces_signature']."', '".$_POST['date_fin_appel']."', '".$_POST['heure_fin_inter']."', '".$_POST['heure_cloture_panne']."', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."', '".$_POST['intervenant_autre']."', '".$_POST['dysfonctionnement']."', '".$_POST['parametre_bf']."', '".$_POST['consignes_inter']."', '".$_POST['objet']."')";
	}
	
	//On enregistre les champs des fieldsets correspondant au choix 3 : Fieldset devis
	//else if($_POST["type_inter"] == '3'){
		//echo "entre dans la condition 3";
		//$sql="INSERT INTO devis(id, id_appel, commentaires) 
		//VALUES ('','".$_POST['id_appel']."', '".$_POST['objet']."')";
	//}
	//On enregistre les champs des fieldsets correspondant au choix 4 : Fieldset exploitation
	else if($_POST["type_inter"] == '4'){
		$sql="INSERT INTO exploitation(id, id_appel, type_exploitation, nom_demandeur, service, batiment, local, date_debut_inter, duree_inter, tps_acces_signature, date_fin_inter, heure_fin_inter, heure_cloture_panne, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, type_operation, objet, prestation_effectuee)
		VALUES ('','".$_POST['id_appel']."', '".$_POST['type_exploitation']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['date_debut_inter']."', '".$_POST['duree_inter']."', '".$_POST['tps_acces_signature']."', '".$_POST['date_fin_inter']."', '".$_POST['heure_fin_inter']."', '".$_POST['heure_cloture_panne']."', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."','".$_POST['intervenant_autre']."', '".$_POST['type_operation']."', '".$_POST['objet']."', '".$_POST['prestation_effectuee']."')";
	}
	$res=mysql_query($sql);
	if ($res) {
		echo $msg_ok;
		// Redirection vers la page appels_tableau
		header('Location: ../formulaires_tableau/gest_appels_tableau.php');
	} else {
		echo mysql_error();
	}
}
?>
Ca ça s'explique très simplement :

tu as une variable qui se nomme $sql.

Tu lui attribues une valeur, ce qui commence par : ""INSERT INTO appels(id, num_appelant, date_appel,"

Plus loin dans ton code tu lui attribues une autre valeur, qui commence par : "INSERT INTO assistance_audio(id, id_" ou "INSERT INTO correctif(id, id_appel, num", ou "INSERT INTO exploitation(id, id_appel, typ"

Enfin, tu lui dis à ton programme d'exécuter une fonction (mysql_query()) avec comme argument cette variable $sql.


Ton programme fait simplement ce que tu lui demandes : il demande au mysql d'executer la requête que t'as rentrer dans $sql.

Pourquoi le premier marche pas de "insert" ? Tout simplement parce qu'il a été écrasé lors du 2ème $sql=
Ça parait logique Smiley smile

J'ai tenter 2, 3 trucs mais cela ne fonctionne pas. J'ai tenter de changer le nom des variables $sql pour la table appel et $sql1 pour les autre tables vu qu'il y en a qu'une qui s'enregistre en plus de la table appels. J'ai donc mis cela $res=mysql_query($sql,$sql1);

mais cela devait être trop beau vu que ça fonctionne pas.

J'ai regarder dans le site php mais j'ai pas trouvé, est-ce qu'on peut faire quelque chose comme ceci?

Merci
$res1=mysql_query($sql1);
$res=mysql_query($sql);
// puis ta vérif
if($res && $res1)



Ta virgule n'était pas juste parce qu'une virgule sert à séparer des arguments d'une fonction. Prenons un exemple classique : strpos ( string $haystack , mixed $needle). Tu vois qu'il doit y avoir 2 arguments différents, séparés par une virgule. (il peut en réalité avoir un troisième d'option).

En faisant :
$res=mysql_query($sql,$sql1);

Tu essayais de passer deux arguments différents, ce que php ne peut pas comprendre dans ce cas-là. (enfin si, il pourrait comprendre 2 arguments à mysql_query(), mais le second est très particulier).
Modifié par Lothindil (16 May 2012 - 11:05)
Merci pour le cours c'est toujours bon à prendre (surtout pour un débutant comme moi Smiley cligne )

J'ai rajouter ton code mais cela ne fonctionne pas, je suis revenu à une erreur au premier else if: ( ! ) Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\Monsite\php\formulaires_traitement\traitement_appels.php on line 94


Entre temps il y a eu quelques changement (j'ai fait une demo à mes collègues et le type d'inter assistance audio à été supprimer) mais le test a été fait sur l'ancien fichier php.

Voila le code actuel avec la modif sur le mysql_query (et il n'y a pas d'erreur sur la déclaration dans les $sql, j'ai tout relu ligne par ligne Smiley smile , donc pas de fautes d'orthographe, de lettres oubliées etc...)

<?php 
// Connexion à la base de donnée pour WAMP
$host = "localhost"; 
$user = "root"; 
$passwd = ""; 
$database = "gestspie"; 
$link = @mysql_connect($host, $user,$passwd);

// Code de debbugage --> affichage des erreurs
error_reporting(E_ALL);

// Affichage de l'erreur en cas d'erreur de connexion à la bdd
if(!$link){die('Erreur de connexion au serveur');}
$select_db = @mysql_select_db($database);
if(!$select_db){die('Erreur de connexion à la base');}

// Déclaration des variables
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Enregistrement reussi";
$message = $msg_erreur;

// Enregistrement des champs non remplis
// Utilisation la fonction PHP empty() qui retourne:
//  -> "vrai" si la variable passée en paramètre est vide
//  -> "faux" dans le cas contraire.
if (empty($_POST['num_appelant']))$message .= "Le numéro de l'appelant";

// Si le contenu de la variable $message et plus grand que celui de la variable $msg_erreur, 
// c'est que nous venons d'ajouter des champs non remplis donc on affiche un message d'erreur
if (strlen($message) > strlen($msg_erreur)) {echo $message;}

// Si les champs sont bien remplis, on peut insérer leurs valeurs dans la base de données MySQL.
// Utilisation de mysql_real_escape_string() qui protège les données avant insertion et notamment 
// les apostrophes, guillemets, etc... pour protéger des attaques par injection SQL.
// La boucle foreach() va passer toutes la variables $_POST envoyées par le formulaire en revue. 
// Pour chacune d'elle nous allons créer une variable spécifique avec $$index, nettoyer sa valeur avec trim() 
// (en enlevant notamment les espaces de fin) et sécuriser sa valeur avec mysql_real_escape_string().
else{
	foreach($_POST as $index => $valeur){
        $valeur = mysql_real_escape_string(trim($valeur));
}
	//Déclaration date_appel + Regex qui permet d'inverser l'année avec le jour pour un enregistrement correct dans mysql
	if(isset($_POST['date_appel'])) $date_appel = $_POST['date_appel'];
	$Newdate_appel = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_appel);
	// Verif de l'existance de $_POST['xxx']
	if (isset($_POST[''])){
		//Déclaration des variables pour les fieldsets de base pour la table "appels"
		$_POST['num_appelant'];
		$_POST['heure_appel'];
		$_POST['num_appelant'];
		$_POST['heure_appel'];
		$_POST['media'];
		$_POST['nom_demandeur'];
		$_POST['batiment'];
		$_POST['systeme'];
		$_POST['service'];
		$_POST['local'];
		$_POST['type_inter'];
		$_POST['tps_inter_souhaite'];
		$_POST['objet_appel'];
		$_POST['objet'];
		
		//Déclaration des variables pour les autres fieldsets
		//On ne reprend pas les variables appels car déjà créer au-dessus
		$_POST['ensemble'];
		$_POST['element'];
		$_POST['sous_element'];
		$_POST['surete'];
		$_POST['debut_inter'];
		$_POST['fin_inter'];
		$_POST['debut_impo_acces'];
		$_POST['fin_impo_acces'];
		$_POST['tps_acces_signature'];
		$_POST['intervenant1'];
		$_POST['intervenant2'];
		$_POST['intervenant_autre'];
		$_POST['entreprise'];
		$_POST['prestation_effectuee'];
		$_POST['num_fim'];
		$_POST['type_inter_correctif'];
		$_POST['dysfonctionnement'];
		$_POST['parametre_bf'];
		$_POST['consignes_inter'];
		$_POST['type_operation'];
	}
	// Insérer les données dans la table "appels" avec une requête sql de type "INSERT" et la fonction mysql_query().
	// Vérification que la requête s'est bien effectuée avec la valeur de retour $res
	// Si c'est le cas, on affiche $msg_ok, sinon on affiche l'erreur qui a eu lieu dans MySQL
	// Le premier "" dans values correspont dans la table à l'ID qui est automatiquement incrémenté
	$sql="INSERT INTO appels(id, num_appelant, date_appel, heure_appel, media, nom_demandeur, batiment, systeme, service, local, type_inter, tps_inter_souhaite, objet_appel, commentaires) 
	VALUES ('','".$_POST['num_appelant']."','$Newdate_appel','".$_POST['heure_appel']."','".$_POST['media']."','".$_POST['nom_demandeur']."','".$_POST['batiment']."','".$_POST['systeme']."','".$_POST['service']."','".$_POST['local']."','".$_POST['type_inter']."','".$_POST['tps_inter_souhaite']."', '".$_POST['objet_appel']."', '".$_POST['objet']."')";
	
	//On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset correctif
	else if($_POST["type_inter"] == '1'){
		$sql1="INSERT INTO correctif(id, id_appel, num_fim, date_appel, heure_appel, nom_demandeur, service, batiment, local, type_inter_correctif, systeme, ensemble, element, sous_element, surete, debut_inter, tps_acces_signature, debut_impo_acces, fin_impo_acces, fin_inter, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, dysfonctionnement, parametre_bf, consignes_inter, commentaires) 
		VALUES ('','".$_POST['id_appel']."', '".$_POST['num_fim']."', '$Newdate_appel', '".$_POST['heure_appel']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['type_inter_correctif']."', '".$_POST['systeme']."', '".$_POST['ensemble']."', '".$_POST['element']."', '".$_POST['sous_element']."', '".$_POST['surete']."', '".$_POST['debut_inter']."', '".$_POST['tps_acces_signature']."', '".$_POST['debut_impo_acces']."', '".$_POST['fin_impo_acces']."', '".$_POST['fin_inter']."', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."', '".$_POST['intervenant_autre']."', '".$_POST['dysfonctionnement']."', '".$_POST['parametre_bf']."', '".$_POST['consignes_inter']."', '".$_POST['objet']."')";
	}
	//On enregistre les champs des fieldsets correspondant au choix 2 : Fieldset exploitation
	else if($_POST["type_inter"] == '2'){
		$sql1="INSERT INTO exploitation(id, id_appel, type_exploitation, nom_demandeur, service, batiment, local, debut_inter, tps_acces_signature, debut_impo_acces, fin_impo_acces, fin_inter, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, type_operation, objet, prestation_effectuee)
		VALUES ('','".$_POST['id_appel']."', '".$_POST['type_exploitation']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['debut_inter']."', '".$_POST['tps_acces_signature']."', '".$_POST['debut_impo_acces']."', '".$_POST['fin_impo_acces']."', '".$_POST['fin_inter']."', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."','".$_POST['intervenant_autre']."', '".$_POST['type_operation']."', '".$_POST['objet']."', '".$_POST['prestation_effectuee']."')";
	}
	//On enregistre les champs des fieldsets correspondant au choix 3 : Fieldset devis
	//else if($_POST["type_inter"] == '3'){
		//$sql1="INSERT INTO devis(id, id_appel, commentaires) 
		//VALUES ('','".$_POST['id_appel']."', '".$_POST['objet']."')";
	//}
	
	$res=mysql_query($sql);
	$res1=mysql_query($sql1);
	if($res && $res1) {
		echo $msg_ok;
		// Redirection vers la page appels_tableau
		header('Location: ../formulaires_tableau/gest_appels_tableau.php');
	} else {
		echo mysql_error();
	}
}
?>


upload/43992-lestables.jpg

Encore merci de ton aide
Modifié par maxredphenix (16 May 2012 - 20:59)
On reprend ton erreur :

Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\Monsite\php\formulaires_traitement\traitement_appels.php on line 94

Ce qu'il te dit c'est que tu lui as mis un "else" à la ligne 94 là où il l'attendait pas.

Erreur la plus courante à chercher :

- un else (ou elseif) sans "if" avant
- un oubli de ; sur la ligne avant
- un oubli de fermeture de guillemet (" ou ') sur la ligne avant
Pages :