8722 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

Je voudrais vous posez une petite question à propos de l'envoie de mes informations dans ma base de donnée mysql.

J'ai un formulaire qui affiche des sous-fieldset (contenu dans la même page php) en fonction d'un choix dans un select:
http://dl.dropbox.com/u/31901874/sous-fieldset.jpg

Voir http://forum.alsacreations.com/topic-5-61478-1.html
D'ailleurs encore merci à Unami et Artemus24 pour leurs aides.

Ces sous-fieldset servent à enregistrer des données dans d'autres table de ma bdd, il y a une table par sous fieldset.

Comment est-ce que je peux faire pour enregistrer mes données dans ma bdd vue le nombre de champs disponible. Est ce qu'il y a une solution pour faire un traitement en fonction du choix du select "type_inter" ?

Voila le code que j'ai crée à l'heure actuelle pour juste enregistrer les champs concernant l'appel:
<?php
// Connexion à la base de donnée pour WAMP
$host = "localhost"; 
$user = "root"; 
$passwd = ""; 
$database = "gestspie"; 
$link = @mysql_connect($host, $user,$passwd);

if(!$link){
	die('Erreur de connexion au serveur');
}

$select_db = @mysql_select_db($database);
if(!$select_db){
	die('Erreur de connexion à la base');
}
// Connexion à la base de donnée
// $base = mysql_connect ('serveur', 'login', 'pass');  
//mysql_select_db ('ma_base', $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<br/>";

// 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){
		$index = mysql_real_escape_string(trim($valeur));
	}
// 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 ('','$num_appelant','$date_appel','$heure_appel','$media','$nom_demandeur','$batiment','$systemes','$service','$local','$type_inter','$tps_inter_souhaite','$objet_appel','$commentaires')";
	$res=mysql_query($sql);
	if ($res) {
		echo $msg_ok;
	} else {
		echo mysql_error();
	}
}
?>


Merci d'avance

maxredphenix
Modifié par maxredphenix (02 May 2012 - 22:15)
Bonjour a tous,

J'en suis arriver à ceci mais ça ne fonctionne pas:
<?php
// Connexion à la base de donnée pour WAMP
$host = "localhost"; 
$user = "root"; 
$passwd = ""; 
$database = "gestspie"; 
$link = @mysql_connect($host, $user,$passwd);

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<br/>";

// 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){
		$index = mysql_real_escape_string(trim($valeur));
	}
// 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 ('','$num_appelant','$date_appel','$heure_appel','$media','$nom_demandeur','$batiment','$systemes','$service','$local','$type_inter','$tps_inter_souhaite','$objet_appel','$commentaires')";
	$res=mysql_query($sql);
	if ($res) {
		echo $msg_ok;
	} else {
		echo mysql_error();
	}
	//On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset audio
	if(&type_inter=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 ('','&id_appel', '&type_inter', '&date_debut_inter', '&heure_debut_inter', '&date_fin_inter', '&heure_fin_inter', '&intervenant1', '&intervenant2', '&intervenant_autre', '&entreprise', '&prestation_effectuer', '&commentaires')";
	$res=mysql_query($sql);
	if ($res) {
		echo $msg_ok;
	} else {
		echo mysql_error();
	}
	//On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset correctif
	else if(&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 ('','&id_appel', '&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')";
	$res=mysql_query($sql);
	if ($res) {
		echo $msg_ok;
	} else {
		echo mysql_error();
	}
	//On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset devis
	else if(&type_inter=3)
	$sql="INSERT INTO devis(id_devis, id_appel, type_inter, commentaire) 
	VALUES ('','&id_appel', '&type_inter', '&commentaire')";
	$res=mysql_query($sql);
	if ($res) {
		echo $msg_ok;
	} else {
		echo mysql_error();
	}
	//On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset exploitation
	else if(&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, intervenant, intervenant_autre, type_operation, objet, prestation_effectuee)
	VALUES ('','&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', '&intervenant', '&intervenant_autre', '&type_operation', '&objet', '&prestation_effectuee')";
	$res=mysql_query($sql);
	if ($res) {
		echo $msg_ok;
	} else {
		echo mysql_error();
	}
}
?>


Je me base sur l'id du select (qui me sert à afficher les différents fieldset contenant les champs correspondant au choix voulu) pour créer faire une boucle et tester le "value" de chaque choix mais ça plante dès le premier if.

Chrome me donne ceci ( ! ) Parse error: syntax error, unexpected T_ELSE in C:wampwwwMonsitephptraitement_appels.php on line 68

Est ce que quelqu'un peut m'aider?

Merci

maxredphenix
Je viens de me rendre compte que j'avais oublier la déclaration des variables et j'ai pas mis les parenthèses entre les "if" et les "else if", j'en suis donc à ça:
<?php
// Connexion à la base de donnée pour WAMP
$host = "localhost"; 
$user = "root"; 
$passwd = ""; 
$database = "gestspie"; 
$link = @mysql_connect($host, $user,$passwd);

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<br/>";

// 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;
}
//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"
	if(isset($_POST['num_appelant'])) $num_appelant = $_POST['num_appelant'];
	if(isset($_POST['heure_appel'])) $heure_appel = $_POST['heure_appel'];
	if(isset($_POST['media'])) $media = $_POST['media'];
	if(isset($_POST['nom_demandeur'])) $nom_demandeur = $_POST['nom_demandeur'];
	if(isset($_POST['batiment'])) $batiment = $_POST['batiment'];
	if(isset($_POST['systemes'])) $systemes = $_POST['systemes'];
	if(isset($_POST['service'])) $service = $_POST['service'];
	if(isset($_POST['local'])) $local = $_POST['local'];
	if(isset($_POST['type_inter'])) $type_inter = $_POST['type_inter'];
	if(isset($_POST['tps_inter_souhaite'])) $tps_inter_souhaite = $_POST['tps_inter_souhaite'];
	if(isset($_POST['objet_appel'])) $objet_appel = $_POST['objet_appel'];
	if(isset($_POST['commentaires'])) $commentaires = $_POST['commentaires'];
	
	//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
	if(isset($_POST['type_inter'])) $type_inter = $_POST['type_inter'];
	if(isset($_POST['date_debut_inter'])) $date_debut_inter = $_POST['date_debut_inter'];
	if(isset($_POST['heure_debut_inter'])) $heure_debut_inter = $_POST['heure_debut_inter'];
	if(isset($_POST['date_fin_inter'])) $date_fin_inter = $_POST['date_fin_inter'];
	if(isset($_POST['heure_fin_inter'])) $heure_fin_inter = $_POST['heure_fin_inter'];
	if(isset($_POST['intervenant1'])) $intervenant1 = $_POST['intervenant1'];
	if(isset($_POST['intervenant2'])) $intervenant2 = $_POST['intervenant2'];
	if(isset($_POST['intervenant_autre'])) $intervenant_autre = $_POST['intervenant_autre'];
	if(isset($_POST['entreprise'])) $entreprise = $_POST['entreprise'];
	if(isset($_POST['prestation_effectuer'])) $prestation_effectuer = $_POST['prestation_effectuer'];
	if(isset($_POST['commentaires'])) $commentaires = $_POST['commentaires'];
	
	//Déclaration des variables pour les fieldsets correctif pour la table "correctif"
	//Idem: on reprend que les valeurs non crée au-dessus
	if(isset($_POST['num_fim'])) $num_fim = $_POST['num_fim'];
	if(isset($_POST['ensemble'])) $ensemble = $_POST['ensemble'];
	if(isset($_POST['element'])) $element = $_POST['element'];
	if(isset($_POST['sous_element'])) $sous_element = $_POST['sous_element'];
	if(isset($_POST['surete'])) $surete = $_POST['surete'];
	if(isset($_POST['duree_inter'])) $duree_inter = $_POST['duree_inter'];
	if(isset($_POST['tps_acces_signature'])) $tps_acces_signature = $_POST['tps_acces_signature'];
	if(isset($_POST['heure_cloture_panne'])) $heure_cloture_panne = $_POST['heure_cloture_panne'];
	if(isset($_POST['tps_inter_souhaite'])) $tps_inter_souhaite = $_POST['tps_inter_souhaite'];
	if(isset($_POST['dysfonctionnement'])) $dysfonctionnement = $_POST['dysfonctionnement'];
	if(isset($_POST['parametre_bf'])) $parametre_bf = $_POST['parametre_bf'];
	if(isset($_POST['consignes_inter'])) $consignes_inter = $_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
	//if(isset($_POST[''])) $ = $_POST[''];

	
	//Déclaration des variables pour les fieldsets exploitation pour la table "exploitation"
	//idem
	if(isset($_POST['type_operation'])) $type_operation = $_POST['type_operation'];
	if(isset($_POST['objet'])) $objet = $_POST['objet'];
	if(isset($_POST['prestation_effectuee'])) $prestation_effectuee = $_POST['prestation_effectuee'];
	
	// 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){
		$index = mysql_real_escape_string(trim($valeur));
	}
	
	// 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 ('','$num_appelant','$date_appel','$heure_appel','$media','$nom_demandeur','$batiment','$systemes','$service','$local','$type_inter','$tps_inter_souhaite','$objet_appel','$commentaires')";
	
	//On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset audio
	if($_POST["type_inter"] == "Assistance Audio"){
		$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 ('','&id_appel', '&type_inter', '&date_debut_inter', '&heure_debut_inter', '&date_fin_inter', '&heure_fin_inter', '&intervenant1', '&intervenant2', '&intervenant_autre', '&entreprise', '&prestation_effectuer', '&commentaires')";

		//On enregistre les champs des fieldsets correspondant au choix 2 : Fieldset correctif
		else if($_POST["type_inter"] == "Correctif"){
			$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 ('','&id_appel', '&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')";		
		}
		
		//On enregistre les champs des fieldsets correspondant au choix 3 : Fieldset devis
		else if($_POST["type_inter"] == "Demande de Devis"){
			$sql="INSERT INTO devis(id_devis, id_appel, type_inter, commentaire) 
			VALUES ('','&id_appel', '&type_inter', '&commentaire')";
		}
		
		//On enregistre les champs des fieldsets correspondant au choix 4 : Fieldset exploitation
		else if($_POST["type_inter"] == "Demande d'Intervention"){
			$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 ('','&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')";
		}
		$res=mysql_query($sql);
		if ($res) {
			echo $msg_ok;
			// Redirection du visiteur vers la page de créat
			header('Location: gest_appels_tableau.php');
		} else {
			echo mysql_error();
		}
	}
	// Enregistrement de la création de l'appel dans un json pour le calendrier Jquery-Week-calendar
	$sql = mysql_query("SELECT * FROM appels");
	$results = array();
	while($row = mysql_fetch_array($sql))
	{
		$calendrier[] = array(
			$date_appel = $row['start'];
			$date_appel = $row['end'];
			$type_inter = $row['title'];
		);
	}
	$json = json_encode($calendrier);
}
?>


Mais j'ai toujours une erreur, j'ai tenter de mettre le "value" de mon select et ensuite la valeur le texte du select mais rien n'y change. Voila le code du select:

<label>Type Inter : </label>
	<select id="type_inter">
		<option value="0">-- Selectionner un type d'inter --</option> 
		<option value="1">Assistance Audio</option>
		<option value="2">Correctif</option>
		<option value="3">Demande de Devis</option>
		<option value="4">Demande d'Intervention</option>
	</select>
T'as une erreur où précisément ? Quelle erreur ?

sinon ça va te donner un truc du type :

if($_POST["type_inter"] == 1) //assistance audio
{
   // ton code
}
elseif($_POST['type_inter']==2) //correctif
{
   // ton code
}
elseif($_POST['type_inter']==3) //demande de devis
{
   // ton code
}
elseif($_POST['type_inter']==4) //demande d'intervention
{
    //ton code
}




Sinon, dans tes inserts de SQL, pourquoi as-tu des & au lieu des $ devant les noms de variables ?
Tu veux pas un peux apprendre à programmer avant de poster des horreurs pareilles ? Tu crois qu'on a que ça a faire que de lire du spaghetti code tout pourri ?

Et peut être commencer par la base : apprendre à déchiffrer une erreur de parsing de base.
Modifié par jb_gfx (06 May 2012 - 04:09)
Bonjour,

Merci pour vos réponses,

Je me suis rendu compte que j'avais mis des & au lieu des $ donc j'ai changer cela mais je sais pas pourquoi j'ai mis ça.

L'erreur que j'avais c'était juste sur le code concernant la sélection du type d'intervention avec le choix du select parce que même si j'avais mis des & le code fonctionnait quand même pour l'insertion dans la bdd.

Je viens de voir que j'ai fermé mon if seulement après mes else if en regardant ton code Lothindil. J'ai changer tout ça mais il y a juste un enregistrement dans la table "appels" mais pas dans la table correspondant au choix du select et de même dans la table "appels" le champs correspondant au select est tout le temps vide.

Encore merci pour votre aide

maxredphenix
Modifié par maxredphenix (06 May 2012 - 13:15)
On va commencer par nettoyer ce code, on y verra plus clair ^^ (et oui, moi j'ai du temps pour lire du code spaghetti, on a tous commencé comme ça ou presque, même si certains semblent l'avoir oublié).

Pour gérer les erreurs, plutôt que de se baser sur une longueur de string (assez lourd à gérer), on va gérer ce qu'on appelle un "flag". Un flag, c'est une variable qui a une valeur à la base (généralement TRUE ou 1) qui va changer en cas d'erreur (FALSE ou 0 généralement).

On l'utilise comme ça :

Dans mon exemple, on veut que $a valent 1 et que $b soit différent de $c.

$verif = 1;
$mess_erreur="<p>Y a un truc qui colle pas :</p><ul>";
if($a!=1)
{
     $mess_erreur.="<li>a est différent de 1</li>";
     $verif=0;
}
if($b==$c)
{
     $mess_erreur.="<li>b est le même que c</li>";
     $verif=0;
}
if($verif==1)
{
     //si le flag "verif" est resté à 1, c'est que y a pas d'erreur, on continue le code...
}
else
{
     //si le flag "verif" est passé à 0, c'est qu'il y a un problème, on le signale donc
     echo $mess_erreur."</ul></p>";
}



Ensuite pour les déclarations de variables...C'est pas nécessaire, tu peux très bien travailler uniquement avec les $_POST.

Pour y voir plus clair sur ton éditeur (et au passage pour accélérer un poil le php), il pourrait être utile de nettoyer aussi tes requêtes. Globalement :

$test = "blabla $foo blabla";


est moins performant que :
$test = "blabla ".$foo." blabla";


Ensuite :
echo $msg_ok;
	// Redirection du visiteur vers la page de créat
	header('Location: gest_appels_tableau.php');


Ton header ne fonctionnera jamais ainsi. Pour que le header fonctionne, il faut qu'il n'y ait rien qui ne s'affiche sur la page du navigateur avant. Echo est typiquement une fonction qui va faire s'afficher quelque chose.

La solution que j'utilise (il doit y avoir plus propre), c'est de faire :
header('Location: page_appel.php?i=1');


Et sur la page "page_appel.php", je rajoute un truc du genre :
if(i==1)
{
    echo "transmission faite";
}


Ensuite, pour le mysql, il est plus simple et plus lisible de faire :

$res=mysql_query($sql) or die (mysql_error()); 


Je suppose dans ton cas, que la dernière partie du code, n'a pas à être faite si il y a une erreur mysql ?

Enfin, j'ai du mal à comprendre ce que ta dernière partie de code vient faire là... quel intérêt de modifier un truc en JSON (et donc via de l'ajax) alors que tu fais un header qui va recharger la page ?
Encore merci pour ta réponse et le temps que tu me consacres,

Ton premier code c'est bien pour remplacer mes premières lignes de code?:

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


Pour les variables tu me conseilles plus ceci ?:
$num_appelant = $_POST['num_appelant'];


au lieu de:
if(isset($_POST['num_appelant'])) $num_appelant = $_POST['num_appelant'];


Pour le header, la page revient bien à gest_appels_tableau (une page avec le plugin datatable pour afficher tous les appels enregistrés dans un tableau) à la fin du traitement mais je savais pas comment faire pour qu'un message apparaisse sur la page gest_appels_tableau pour dire que l'envoi à été effectué donc je vais regarder avec ton code.

Sinon le dernier code je l'ai laisser mais c'est pour l'enregistrement de certain champs en json pour le plugin jquery-week-calendar, j'ai oublié. Il ne faut pas le prendre en compte, je suis en train de chercher comment enregistrer en même temps en JSON pour que chaque enregistrement d'appel soit ajouter dans un calendrier (soit date_appel avec l'heure d'enregistrement pour le start, date_appel + 15min pour le end, et le type d'appel pour le titre de l'événement).

Je suis désolé pour toute ces questions, je débute encore.

Encore merci

maxredphenix
Modifié par maxredphenix (07 May 2012 - 23:36)
maxredphenix a écrit :
Encore merci pour ta réponse et le temps que tu me consacres,

Ton premier code c'est bien pour remplacer mes premières lignes de code?:

// Déclaration des variables
$msg_erreur = &quot;Erreur. Les champs suivants doivent être obligatoirement remplis :&lt;br/&gt;&lt;br/&gt;&quot;;
$msg_ok = &quot;Enregistrement reussi&quot;;
$message = $msg_erreur;
if (strlen($message) &gt; strlen($msg_erreur)) {
	echo $message;
}
Mon premier code remplace en effet ce code-là et permet surtout que le reste de ton code ne travaille pas si y a une erreur. Ce qui pour l'instant est le cas dans ton code.

maxredphenix a écrit :
Pour les variables tu me conseilles plus ceci ?:
$num_appelant = $_POST['num_appelant'];


au lieu de:
if(isset($_POST['num_appelant'])) $num_appelant = $_POST['num_appelant'];
Je ne te conseille ni l'un ni l'autre... Mais tout simplement de travailler directement avec $_POST['num_appelant'].

Après, si tu souhaites éviter la lourdeur du $_POST, tu peux très bien utilisé la première version. Le test isset n'a que peu d'intérêt ici. Au pire, ta variable $_POST['num_appelant'] est vide et la variable que tu vas créer $num_appelant, sera vide aussi. Tu pourras tester, au besoin plus tard avec empty().

maxredphenix a écrit :
Pour le header, la page revient bien à gest_appels_tableau (une page avec le plugin datatable pour afficher tous les appels enregistrés dans un tableau) à la fin du traitement mais je savais pas comment faire pour qu'un message apparaisse sur la page gest_appels_tableau pour dire que l'envoi à été effectué donc je vais regarder avec ton code.
C'est ce que je fais chez moi ^^ c'est peut-être pas le plus propre, mais ça marche ^^

maxredphenix a écrit :
Sinon le dernier code je l'ai laisser mais c'est pour l'enregistrement de certain champs en json pour le plugin jquery-week-calendar, j'ai oublié. Il ne faut pas le prendre en compte, je suis en train de chercher comment enregistrer en même temps en JSON pour que chaque enregistrement d'appel soit ajouter dans un calendrier (soit date_appel avec l'heure d'enregistrement pour le start, date_appel + 15min pour le end, et le type d'appel pour le titre de l'événement).

Je suis désolé pour toute ces questions, je débute encore.

Encore merci

maxredphenix
Le JSON sert à transférer des données d'un langage à l'autre. Dans notre cas, j'utilise le JSON pour transmettre des informations de PHP vers un javascript. Mais le javascript a d'abord appelé le PHP (vive l'AJAX). Ceci pour éviter de recharger une page, tout en modifiant des informations par d'autres informations (généralement issues de tables).

Dans ton cas, comme tu renvois sur une autre page et que tu n'as, de toute façon, pas un script (JQuery ou javascript) pour "réceptionner" les informations du JSON... Il n'a pas trop d'intérêt.

En fait, à voir le code, pour moi, il devrait être dans un fichier différent, séparé du reste ^^
Bonsoir et merci.

Je viens de changer toutes mes lignes qui concernent la déclaration des variable comme tu me l'a conseillé: $_POST['num_appelant']; (ça fait vide maintenant Smiley decu ) mais c'est clair que c'est beaucoup plus lisible. Je suis en train de refaire les lignes qui concernent le message d'erreur et les tests.

Pour le header, l'envoie s'effectue et je reviens bien à ma page mais je par contre ta condition i==1 tu la place ou sur la page?
a écrit :

Et sur la page "page_appel.php", je rajoute un truc du genre :
if(i==1){
    echo "transmission faite";
}



Parce que je l'ai placé dans le <head>, ou bien avant/après le <!DOCTYPE html> dans un <?php ?> mais ça m'affiche un message d'erreur sur ma page me disant que que "i" n'existe pas.

Pour le JSON, je veux juste enregistrer l'événement dans un fichier: "events.json" qui sera utiliser par la page qui contient le plugin jquery-week-calendar qui lui se charge de lire ce fichier et de l'afficher dans un calendrier. Et comme l'événement est créer pour dire qu'a telle heure tels personne à passer 15min à réceptionner et enregistrer l'appel je voulais créer cette evénement à la suite des autres qui sont contenus dans ce fichier json.

Sinon pour la boucle je cherche toujours mais je vois pas du tout d'ou cela peut venir, j'ai vu avec un informaticien à mon boulot et idem il trouve pas, pour lui la boucle est bien respectée et c'est bien le VALUE de mon select "type_inter" qui est détecté mais non...j'ai tenter de mettre
// En simple guillemet
if($_POST["type_inter"] == '1'){
	//code
}
else if($_POST["type_inter"] == '2'){
	//code
}

// En double guillemet
if($_POST["type_inter"] == "1"){
	//code
}
else if($_POST["type_inter"] == "2"){
	//code
}

// Avec seulement else
if($_POST["type_inter"] == "1"){
	//code
}
else($_POST["type_inter"] == "2"){
	//code
}


mais rien....

En tout cas je te remercie pour ton aide

maxredphenix
Quand je place cette ligne au début de mon code:
error_reporting(E_ALL);

Chrome me donne une erreur à la ligne 99, ce qui correspond à la première ligne de ce code:
else{
	foreach($_POST as $index => $valeur){
		$index = mysql_real_escape_string(trim($valeur));
	}
	
	// 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 ('','$num_appelant','$Newdate_appel','$heure_appel','$media','$nom_demandeur','$batiment','$systemes','$service','$local','$type_inter','$tps_inter_souhaite','$objet_appel','$commentaires')";
	
	//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 ('','$id_appel', '$type_inter', '$date_debut_inter', '$heure_debut_inter', '$date_fin_inter', '$heure_fin_inter', '$intervenant1', '$intervenant2', '$intervenant_autre', '$entreprise', '$prestation_effectuer', '$commentaires')";
	}
	//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 ('','$id_appel', '$id_appel', '$num_fim', '$Newdate_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')";		
	}
	//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_devis, id_appel, type_inter, commentaire) 
		VALUES ('','$id_appel', '$type_inter', '$commentaire')";
	}
	//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 ('','$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')";
	}
	$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();
	}
Modérateur
Bonjour


foreach($_POST as $index => $valeur){
  $index = mysql_real_escape_string(trim($valeur));
}


je pense que tu souhaitais plutôt faire:


foreach($_POST as $index => $valeur){
  [b]$[/b]$index = mysql_real_escape_string(trim($valeur));
}

Plutôt que de boucler sur le tableau et à chaque fois affecter une autre valeur à $index…
Après les noms de variables dynamiques sont le mal absolu usés de la sorte, comme tu ne vérifies pas tes champ ça peut poser des problèmes de sécurité…
Merci pour vos réponses à tous les 2,

Je viens de mettre ton code kustolovic. J'ai tenté mais j'ai la même erreur qu'avant et au même endroit. la phrase d'erreur donnée par chrome c'est:

( ! ) Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\Monsite\php\formulaires_traitement\traitement_appels.php on line 99

Sinon kustolovic, que me conseilles-tu pour mieux utiliser mes variables?

Merci
Ce que l'erreur te dit c'est que tu as un "else" en ligne 99 et qu'il aurait voulu autre chose...

Au choix :

- il manque une accolade pour finir un if/elseif avant
- il manque un point virgule sur la ligne de code précédente (au-dessus des commentaires quoi)
- il manque un if avant
Modifié par Lothindil (10 May 2012 - 18:07)
J'ai tenter pas mal de chose et je me suis rendu compte que mes variables étaient mal placer dans mon code et du coup la boucle suivant ne fonctionnait pas correctement:

// 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){
		$index = 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'];
//etc......


Du coup je suis revenu au point de départ, je n'ai plus d'erreurs mais toujours aucun d'enregistrement dans les tables correspondantes au select et idem pour le champ qui lui correspond dans la table appel.

moi qui pensais que ça allait enfin fonctionner
Les déclarations de variable post, t'es pas obligé ^^

Et si tu n'adaptes pas tes requêtes SQL, elles risquent pas de marcher ^^

Tu sais, un truc du genre :

$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']."',.......)";


Smiley murf
Modifié par Lothindil (10 May 2012 - 22:02)
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 ?
Pages :