vue Traitement d'un formulaire avec affichage de fieldsets en fonction d'un select
Kommunauty
Connexion
Inscription

Traitement d'un formulaire avec affichage de fieldsets en fonction d'un select


maxredphenix Messages : 60

Bonjour à tous,

Suite à ma discussion avec un membre de ce forum, je créer cette discussion.

J'ai un formulaire qui possède 3 fieldsets avec divers champs concernant la gestion d'appels pour mon boulot (j'ai besoin d'un programme pour me simplifier la vie) . Dans le derniers fieldset il y a un select nommée type_inter qui me permet d'afficher d'autres fieldsets, voila un apercu de mon formulaire:

Pour le traitement du formulaire j'en suis arrivé à ceci mais cela 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;
}
//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', '¶metre_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);
}
?>

Si quelqu'un peut m'aider je suis preneur.

Merci d'avance

maxredphenix

samedi 5 mai 2012

maxredphenix Messages : 60

Je viens juste de voir que j'ai laisser mon code pour l'enregistrement de certain champs en json pour le plugin jquery-week-calendar.

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 + 15min pour le end)

merci

samedi 5 mai 2012

Vanyali Messages : 1298

àce que je vois déjà, il manque une accolade fermante juste avant

 else if($_POST["type_inter"] == "Correctif")

il y a aussi un '¶' bizarre après je sais pas pourquoi X)

et après, tu utilise des '&' ce qui me parait bizarre vu que c'est en rapport aux références et que normalement, tu l'utilise pas pour rentrer dans une variable comme ça, mais c'est possible que ça marche quand même, moi je mettrais des '$', après, si ça marche comme ça, c'est très bien

samedi 5 mai 2012

maxredphenix Messages : 60

Merci pour ta réponse,

J'avais pas fait gaffe au "&" je sais pas pourquoi parce que je sais en plus qu'il faut mettre des dollars.

Pour le else if je pensais qu'il fallait les inclure dans le premier if donc l'accolade de fermeture se trouvait à la fin de la boucle du dernier else if.

Ca me donne maintenant ceci:

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);
}

L'enregistrement se fait sans soucis et la redirection est bonne (il me manque plus qu'a mettre un petit message pour dire que l'enregistrement est reussi avec une tempo de 3s avant la redirection). Par contre ce qui est bizarre, c'est que ça enregistre correctement dans la table "appels" sauf le choix du select qui n'est pas enregistrer dans la table, mais il y a aucun enregistrement dans la table correspondant au choix qu'on à fait dans le select: par exemple si je choisi correctif, les fieldset apparaissent, je les remplis mais rien se s'enregistre dans la table correctif......

En tout cas encore merci

dimanche 6 mai 2012

Vanyali Messages : 1298

ça veut probablement dire qu'il n'entre pas dans la condition else if.

vérifie que dans le select, tu aie bien mis l'attribut value pour chacun des choix.

dimanche 6 mai 2012

maxredphenix Messages : 60

Je viens de changer les lignes correspondant au else if pour mettre la valeur "value" du select mais cela change rien.

if($_POST["type_inter"] == 1) //assistance audio
{
   // code

}
elseif($_POST['type_inter']==2) //correctif
{
   // code
}
elseif($_POST['type_inter']==3) //demande de devis
{
   // code
}
elseif($_POST['type_inter']==4) //demande d'intervention
{
    // code
}

Sinon voila le code du select

<span>
<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>
</span>

Donc logiquement ça devrait être bon mais comme avant, il y a juste un enregistrement dans la table "appels"

dimanche 6 mai 2012

Vanyali Messages : 1298

le select est sensé avoir un name, c'est le name qui fait que tu peut avoir une valeur dans $_POST["type_inter"], généralement, le name et l'id sont identique, par contre, c'est bizarre qu'il t'ai pas mis d'erreur pour ça du coup...

dimanche 6 mai 2012

maxredphenix Messages : 60

Je viens de rajouter le name mais toujours rien. Par contre c'est bien j'ai appris un truc, je savais pas que c'était le name qui comptait pour le POST

dimanche 6 mai 2012

Vanyali Messages : 1298

ah, j'avais pas remarqué, mais normalement, faut pas coller le else et le if, tu l'avais pas fait avant, mais sur le mini code que tu a fait, ils sont collés. (ça dois être else fi et non elseif)

à part ça, je vois pas vraiment d'où pourrais venir le problème...

il t'affiche aucune erreur ?

dimanche 6 mai 2012

maxredphenix Messages : 60

Oups désolé j'ai pas coller le else et le if dans mon code complet c'est juste pour l'exemple que j'ai tapé au dessus....

Sinon non j'ai pas pas d'erreur avec l'outils de développement de google chrome (avec le vrai code ). J'ai tester un enregistrement en sélectionnant chaque choix du select "type_inter" mais aucun enregistrement de fait sauf comme d'hab la table "appels"

dimanche 6 mai 2012

Page suivante »