Alors tout d'abord rebonjour, ça faisait longtemps....Je crois depuis hier !
J'ai réussi à faire mes listes déroulantes en AJAX et elles sont bien envoyées par mail grâce à mon formulaire. Mon souci ?
Lors de la réception de mon formulaire je reçois l'identifiant de mes listes déroulantes alors que je voudrais voir apparaître l'item.
Je ne peux pas enlever l'identifiant, il me sert pour passer les variables en AJAX.
Je sais il y a la solution de mettre mon item dans ma balise option à la suite de l'identifiant, ça ça fonctionne.
Alors j'ai plusieurs solutions :
- soit modifier l'identifiant par le nom, mais dans ce cas il faut que je change la clef étrangère dans ma table date car c'est l'identifiant qui fait le lien entre les deux tables, et je ne préfère aps
- soit cacher l'identifiant à la réception, mais j'ai un doute sur la faisabilité
J'ai essayé d'autres solutions en me disant que comme je réceptionne l'identifiant, il me reste plus qu'à le remplacer par le nom:
- mettre un onclick sur le select+ focntions qui va avec
- tableau array (mais je n'y arrive pas)
- foreach ($trans as $k=>$v)
$trans[$k]= "".ord($k).";";
Mais ça ne focntionne pas... Pouvez-vous m'indiquer quelle solution à privilégier et m'indiquer comment procéder.
Je vous joins mes fichiers :
formulaire.php :
<form method="POST" name="formulaire" action="inscription.php" onsubmit="return validateForm(this)">
<div id="titreForm">Inscription à une formation</div>
<div id="corpForm">
<fieldset id="formation">
<legend>Formation</legend>
<br />
<p>
<label for="forma" title="Veuillez sélectionner la formation souhaitée" class="oblig">*Formation souhaitée :</label>
<? include 'liste-formations.php'; ?>
</p>
<p>
<label for="date_forma" title="Veuillez sléectionner la date souhaitée" class="oblig">*Date:</label>
<span id="date_form" style='display:inline'>
<? include 'liste-dates.php'; ?>
</span>
</p>
<p>
<label for="ref_forma" title="Veuillez saisir le lieu souhaité" class="oblig">Lieu :</label>
<span id="lieu_form" style='display:inline'>
<? include 'liste-lieux.php'; ?>
</span>
</p>
</fieldset>
La page pour la liste déroulante liste-formations.php :
<select name='intitule_formation' id='formations' onchange='getDatte()'>
<option value='-1'>Formations</option>
<?php
$sql = "SELECT id_formations, nom_formations
FROM formation
ORDER BY nom_formations";
$res = mysql_query ($sql) or die ("Exécution de la requête impossible");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row['id_formations']." ".$row['nom_formations']." '>". htmlentities($row["nom_formations"]) ."</option>";
}//
?>
</select>
la page listeDeroulanteAJAX.php :
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest) // On essaye de créer un objet XmlHTTPRequest pour Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try { // Microsoft utilise une autre technique, on tente de créer un objet ActiveX
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) { // On teste une autre méthode si la première n'a pas marché
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
///// relation formation-date //////
// Méthode qui sera appelée sur le click du bouton
function getDatte(){
var xhr = getXhr();
// On défini ce qu'on va faire quand on aura la réponse
// On guette les changements d'état de l'objet
xhr.onreadystatechange = function(){ //instructions de traitement de la réponse
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
if(xhr.readyState == 4 && xhr.status == 200){
leselect = xhr.responseText; // ResponseText = Réponse de la requête
// On se sert de innerHTML pour rajouter les options a la liste en utilisant l'id du span
document.getElementById('date_form').innerHTML = leselect; // Traitement de la réponse, on met à jour le span
}
}
// Envoi de la requête avec la méthode post
xhr.open("POST","liste-dates.php",true); // Préparation d'une requête asynchrone avec la méthode POST
// Ne pas oublier ça pour le post, la méthode $_POST passe par l'entête HTML de la requête,(Header), envoi du header et des paramètres
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=iso-8859-1');
// Ecriture de la réponse
// Ici, l'id du select de la formation
sel = document.getElementById('formations');
idForma = sel.options[sel.selectedIndex].value;// On récupère la valeur sélectionnée dans la liste déroulante
// le travail est terminé
xhr.send("id_formations="+idForma); // On définie l'url à appeler en passant cette valeur
}
enfin une partie de la page inscription.php qui valide le formulaire :
<?php
$formulaireFormation = $_POST['intitule_formation'];
$formulaireRefFormation = $_POST['reference_formation'];
$formulaireDateFormation = $_POST['date_formation'];
$formulaireLieuFormation = $_POST['lieu_formation'];
// Dans l'exemple on va juste vérifier que la formation, sa date, le titre et le nom du responsable, la société, le téléphone et le mail ne soient pas vides.
$message = "";
if (isset($_POST['intitule_formation']) && ($_POST['intitule_formation'] != ""))
{ $formulaireFormation = $_POST['intitule_formation'];
}
else
{ $message = "<p>Veuillez saisir la formation souhaitée.</p>"; }
if (isset($_POST['date_formation']) && ($_POST['date_formation'] != ""))
{ $formulaireDateFormation = $_POST['date_formation']; }
else
{ $message = "<p>Veuillez saisir la date de la formation sélectionnée.</p>"; }
if (isset($_POST['lieu_formation']) && ($_POST['lieu_formation'] != ""))
{ $formulaireLieuFormation = $_POST['lieu_formation']; }
else
{ $formulaireLieuFormation = "";}
// Si la variable message est vide,alors
if ($message == "") {
//on converti les caractères HTML du commentaire
$formulaireCommentaire = htmlentities($formulaireCommentaire);
//mise en forme du mail
$destinataire = "aurel.beaujault@gmail.com";
$sujet = "Je souhaite m'inscrire à une formation";
$from = "From:$formulaireSociete \n";
$from .= "MIME-version: 1.0 \n";
$from .= "Content-type: text/html; charset= iso-8859-1 \n";
$message =
"<table>
<tr>
<td>
Formation :
</td>
<td>
$formulaireFormation
</td>
</tr>Configuration: Windows XP
Firefox 2.0.0.4