Urgent ! Problème formulaire listes liées

neelix_57 Messages postés 3 Statut Membre -  
neelix_57 Messages postés 3 Statut Membre -
Bonjour,

J'ai crée un formulaire avec 2 listes liées, utilisant la base de données MySQL. Le script fonctionne parfaitement, mais je n'arrive pas à envoyer le contenu sélectionné des listes liées par mail. Dans le mail, je reçois le numéro auquel correspondent la région et le département dans la base, au lieu de leurs noms.

Voici mon script (3 fichiers) :

Fichier formulaire.php :

<?php

$email_dest = "neelix@starfleet.net";

if ($_POST['envoi']) {

// E-mail headers:
$headers ="MIME-Version: 1.0 \n";
$headers .="From: isp@isp.net \n";
$headers .="Content-Type: text/html; charset=iso-8859-1 \n";

$subject = "Sujet";

$partie_entete = "<html><head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head>
<body>";

for ($a=1; $a<= $_POST['nbre_champs_texte']; $a++) {
$partie_champs_texte .= "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_champ'.$a] . " = " . $_POST['champ'.$a] . "</font><br>";
}

for ($b=1; $b<= $_POST['nbre_champs_liste']; $b++) {
$partie_champs_liste .= "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_liste'.$b] . " = " . $_POST['liste'.$b] . "</font><br>";
}

if ($_POST['nbre_zone_email'] != 0) {
$partie_zone_email = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_email'] . " = " . $_POST['zone_email'] . "</font><br>";
}

if ($_POST['nbre_zones_texte'] != 0) {
$partie_zone_texte = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_zone'] . " = " . $_POST['zone_texte'] . "</font><br>";
$partie_zone_texte = stripslashes($partie_zone_texte);
}

$fin = "</body></html>";

$sortie = $partie_entete . $partie_champs_texte . $partie_champs_liste . $partie_zone_email . $partie_zone_texte . $fin;

// Send the e-mail
if (@!mail($email_dest,$subject,$sortie,$headers)) {
?><html>
<head>
<title>Formulaire</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.p_echec {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 16px;
	font-weight: bold;
	color: #F00;
	left: 42%;
	top: 15%;
	position: absolute;
}
.a_echec {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 14px;
	font-weight: bold;
	color: #33F;
	text-decoration: underline;
	left: 44%;
	top: 20%;
	position: absolute;
}
-->
</style>
</head>
<body background="images/jaune_017.jpg">
<p class="p_echec">
<?php
$message_echec = "Envoi du formulaire impossible";
echo(stripslashes($message_echec));
?>
</p>
<p class="a_echec">
<a href="javascript:history.go(-1)" target="_self">Retourner au formulaire</a>
</p>
</body>
</html>
<?php
exit();
} // Closing if !mail...

else {

$message_remerciement = "Merci";
}

} // Closing if edit

?><html>
<head>
<title>Formulaire</title>
<style type="text/css">
<!--
.p_thanks {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 16px;
	font-weight: bold;
	color: #F00;
	left: 50%;
	top: 15%;
	position: absolute;
}
.a_thanks {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 14px;
	font-weight: bold;
	color: #33F;
	text-decoration: underline;
	left: 44%;
	top: 20%;
	position: absolute;
}
-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script language="JavaScript"><!-- Hide script from older browsers
function verifSelection() {if (mail_form.champ1.value == "") {
alert("Champs vide ou incorrect")
return false
} if (mail_form.champ2.value == "") {
alert("Champs vide ou incorrect")
return false
} if (mail_form.champ3.value == "") {
alert("Champs vide ou incorrect")
return false
} if (mail_form.champ4.value == "") {
alert("Champs vide ou incorrect")
return false
} if (mail_form.champ5.value == "") {
alert("Champs vide ou incorrect")
return false
} if (mail_form.liste1.value == "") {
alert("Champs vide ou incorrect")
return false
} if (mail_form.liste2.value == "") {
alert("Champs vide ou incorrect")
return false
} if (mail_form.liste3.value == "") {
alert("Champs vide ou incorrect")
return false
} if (mail_form.zone_email.value == "") {
alert("Champs vide ou incorrect")
return false
}

invalidChars = " /:,;'"

for (i=0; i<invalidChars.length; i++) {	// does it contain any invalid characters?
badChar = invalidChars.charAt(i)

if (mail_form.zone_email.value.indexOf(badChar,0) > -1) {
alert("Votre adresse e-mail contient des caractères invalides. Veuillez vérifier.")
mail_form.zone_email.focus()
return false
}
}

atPos = mail_form.zone_email.value.indexOf("@",1)			// there must be one "@" symbol
if (atPos == -1) {
alert('Votre adresse e-mail ne contient pas le signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

if (mail_form.zone_email.value.indexOf("@",atPos+1) != -1) {	// and only one "@" symbol
alert('Il ne doit y avoir qu\'un signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

periodPos = mail_form.zone_email.value.indexOf(".",atPos)

if (periodPos == -1) {					// and at least one "." after the "@"
alert('Vous avez oublié le point "." après le signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

if (periodPos+3 > mail_form.zone_email.value.length)	{		// must be at least 2 characters after the 
alert('Il doit y avoir au moins deux caractères après le signe ".". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}if (mail_form.zone_texte.value == "") {
alert("Champs vide ou incorrect")
return false
}if (mail_form.zone_texte.value == "") {
alert("Champs vide ou incorrect")
return false
} } // Fin de la fonction

</script>
<script type="text/javascript" src="./dept_xhr.js" charset="iso_8859-1"></script>

<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "france";

/* Requête SQL de récupération des données de la première liste */
$sql = "SELECT `id_region` AS idr, `region` ".
       "FROM `region` ".
       "ORDER BY `id_region`;";
	   
/* Connexion et exécution de la requête */
$connexion = mysql_connect($serveur, $admin, $mdp);
if($connexion != false)
{
    $choixbase = mysql_select_db($base, $connexion);
    $recherche = mysql_query($sql, $connexion);
    /* Création du tableau PHP des valeurs récupérées */
    $regions = array();
    /* Index du département par tableau régional */
    $id = 0;
    while($ligne = mysql_fetch_assoc($recherche))
    {
        $regions[$ligne['idr']] = $ligne['region'];
    }
?>


</head>

<body background="images/jaune_017.jpg">
<form name="mail_form" method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" target="_self" onSubmit="return verifSelection()">
  <div align="center"></div>
<?php
if ($message_remerciement) {
?>

<p class="p_thanks" align="center">
<?php
echo(stripslashes($message_remerciement));
?>
</p>
<p class="a_thanks" align="center">
<a href="index.html" target="_self">Retour à l'accueil</a>
</p>
<?php
exit();
}
?>
  <table width="566" border="0" align="center">
<p align="center">
</p><tr>
      <td><b><font face="Verdana" size="2">Nom</font></b></td>
      <td><input name="champ1" type="text"></td>
    </tr><tr>
      <td><b><font face="Verdana" size="2">Prénom</font></b></td>
      <td><input name="champ2" type="text"></td>
    </tr><tr>
      <td><b><font face="Verdana" size="2">Adresse</font></b></td>
      <td><input name="champ3" type="text"></td>
    </tr><tr>
      <td><b><font face="Verdana" size="2">Code postal</font></b></td>
      <td><input name="champ4" type="text"></td>
    </tr><tr>
      <td><b><font face="Verdana" size="2">Ville</font></b></td>
      <td><input name="champ5" type="text"></td>
    </tr><tr>
      <td><b><font face="Verdana" size="2">Secteur</font></b></td>
      <td><select name="liste1" title="Secteur">
      <option value="" Selected>Secteur</option>
      <option value="Bitche">Bitche</option>
      <option value="Sarre-Union">Sarre-Union</option>
      <option value="Sarrebourg">Sarrebourg</option>
      <option value="Sarreguemines">Sarreguemines</option></select></td>
    </tr><tr>
      <td><b><font face="Verdana" size="2">Région</font></b></td>
      <td><select name="liste2" id="region" onChange="getDepartements(this.value);">
      <option value="vide">- - - Choisissez une région - - -</option>
<?php
      /* Construction de la première liste : on se sert du tableau PHP */
      foreach($regions as $nr => $reg)
    {
?>
      <option value="<?php echo($nr); ?>"><?php echo($reg); ?></option>
<?php
    }
?>
      </select></td>
      <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de
      la seconde liste déroulande -->
    </tr><tr>
      <td><b><font face="Verdana" size="2">Région</font></b></td>
      <td><span id="blocDepartements"></span><br /></td>
 
<?php
}
else
{
    /*  Si vous arrivez ici, vous avez un gros problème avec la connexion au serveur de base de données */
?>
<p>La connexion au serveur de base de données a échoué. Aucun élément ne peut être affiché.</p>
<?php
}
?>
    </tr><tr>
      <td width><b><font face="Verdana" size="2">Votre eMail</font></b></td>
      <td width><input name="zone_email" type="text"></td>
    </tr><tr>
      <td valign="top"><b><font face="Verdana" size="2">Votre message</font></b></td>
      <td><textarea name="zone_texte" cols="50" rows="10"></textarea></td>
    </tr><tr>
      <td valign="top"><input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="5">
        <input name="nbre_zones_texte" type="hidden" value="1">
<input name="nbre_champs_liste" type="hidden" id="nbre_champs_liste" value="3">
<input name="nbre_zone_email" type="hidden" value="1">
<input name="titre_champ1" type="hidden" value="Nom"><input name="titre_champ2" type="hidden" value="Prénom"><input name="titre_champ3" type="hidden" value="Adresse"><input name="titre_champ4" type="hidden" value="Code postal"><input name="titre_champ5" type="hidden" value="Ville"><input name="titre_liste1" type="hidden" value="Secteur"><input name="titre_liste2" type="hidden" value="Région"><input name="titre_liste3" type="hidden" value="Département"><input name="titre_email" type="hidden" value="Votre eMail"><input name="titre_zone" type="hidden" value="Votre message"></td>
      <td><div align="center">
<input type="reset" name="Reset" value="Effacer">          
<input type="submit" name="envoi" value="Envoyer">
        </div></td>
    </tr>
  </table>
  <div align="center"></div>
</form>
</body>
</html>


Fichier departements.php :

<?php
/**
 * Code qui sera aeeplé par un objet XHR et qui
 * retournera la liste déroulante des départements
 * correspondant à la région sélectionnée.
 */
/* Paramètres de connexion */
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "france";

/* On récupère l'identifiant de la région choisie. */
$idr = isset($_GET['idr']) ? $_GET['idr'] : false;
/* Si on a une région, on procède à la requête */
if(false !== $idr)
{
    /* Cération de la requête pour avoir les départements de cette région */
    $sql2 = "SELECT `id_departement`, `departement`".
            " FROM `departement`".
            " WHERE `id_region` = ". $idr ."".
            " ORDER BY `id_departement`;";
    $connexion = mysql_connect($serveur, $admin, $mdp);
    mysql_select_db($base, $connexion);
    $rech_dept = mysql_query($sql2, $connexion);
    /* Un petit compteur pour les départements */
    $nd = 0;
    /* On crée deux tableaux pour les numéros et les noms des départements */
    $code_dept = array();
    $nom_dept = array();
    /* On va mettre les numéros et noms des départements dans les deux tableaux */
    while(false != ($ligne_dept = mysql_fetch_assoc($rech_dept)))
    {
        $code_dept[] = $ligne_dept['id_departement'];
        $nom_dept[]  = $ligne_dept['departement'];
        $nd++;
    }
    /* Maintenant on peut construire la liste déroulante */
    $liste = "";
    $liste .= '<select name="liste3" id="departement">'."\n";
    for($d = 0; $d < $nd; $d++)
    {
        $liste .= '  <option value="'. $code_dept[$d] .'">'. htmlentities($nom_dept[$d]) .' ('. $code_dept[$d] .')</option>'."\n";
    }
    $liste .= '</select>'."\n"; 
    /* Un petit coup de balai */
    mysql_free_result($rech_dept);
    /* Affichage de la liste déroulante */
    echo($liste);
}
/* Sinon on retourne un message d'erreur */
else
{
    echo("<p>Une erreur s'est produite. La région sélectionnée comporte une donnée invalide.</p>\n");
}
?>


Fichier dept_xhr.js

/**
 * Lister les départements d'une région avec un objet
 * XMLHTTPRequest.
 */
/* Création de la variable globale qui contiendra l'objet XHR */
var requete = null;
/**
 * Fonction privée qui va créer un objet XHR.
 * Cette fonction initialisera la valeur dans la variable globale définie
 * ci-dessus.
 */
function creerRequete()
{
    try
    {
        /* On tente de créer un objet XmlHTTPRequest */
        requete = new XMLHttpRequest();
    }
    catch (microsoft)
    {
        /* Microsoft utilisant une autre technique, on essays de créer un objet ActiveX */
        try
        {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(autremicrosoft)
        {
            /* La première méthode a échoué, on en teste une seconde */
            try
            {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(echec)
            {
                /* À ce stade, aucune méthode ne fonctionne... mettez donc votre navigateur à jour ;) */
                requete = null;
            }
        }
    }
    if(requete == null)
    {
        alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.');
    }
}
/**
 * Fonction privée qui va mettre à jour l'affichage de la page.
 */
function actualiserDepartements()
{
    var listeDept = requete.responseText;
    var blocListe = document.getElementById('blocDepartements');
    blocListe.innerHTML = listeDept;
}

/**
 * Fonction publique appelée par la page affichée.
 * Cette fonction va initialiser la création de l'objet XHR puis appeler
 * le code serveur afin de récupérer les données à modifier dans la page.
 */
function getDepartements(idr)
{
    /* Si il n'y a pas d'identifiant de région, on fait disparaître la seconde liste au cas où elle serait affichée */
    if(idr == 'vide')
    {
        document.getElementById('blocDepartements').innerHTML = '';
    }
    else
    {
        /* À cet endroit précis, on peut faire apparaître un message d'attente */
        var blocListe = document.getElementById('blocDepartements');
        blocListe.innerHTML = "Traitement en cours, veuillez patienter...";
        /* On crée l'objet XHR */
        creerRequete();
        /* Définition du fichier de traitement */
        var url = 'departements.php?idr='+ idr;
        /* Envoi de la requête à la page de traitement */
        requete.open('GET', url, true);
        /* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */
        requete.onreadystatechange = function()
        {
            /* Lorsque l'état est à 4 */
            if(requete.readyState == 4)
            {
                /* Si on a un statut à 200 */
                if(requete.status == 200)
                {
                    /* Mise à jour de l'affichage, on appelle la fonction apropriée */
                    actualiserDepartements();
                }
            }
        };
        requete.send(null);
    }
}


Je vous remercie d'avance pour votre aide.

4 réponses

974_Vin's_974 Messages postés 554 Statut Membre 102
 
T'arrive au moins à faire un "echo" de ce qui sort de tes deux listes ???

0
neelix_57 Messages postés 3 Statut Membre
 
oui, c'est juste dans le mail que ça coince
0
974_Vin's_974 Messages postés 554 Statut Membre 102
 
Ah ok, ben ca n'as aucun rapport avec les liste liées en faite ???

0
neelix_57 Messages postés 3 Statut Membre
 
Si, je pense, du fait que pour la liste déroulante simple, ça marche. En fait, le problème ne se pose qu'avec les listes liées. Je pense que je me suis mal exprimé. Le formulaire m'envoie par mail les coordonnées de la personne qui le remplit. Pour tous les champs, je reçoit ce que l'internaute à entré dans les différents champs. Mais pour les champs région et département, si on envoie Alsace, dans le mail il y aura 1 au lieu de Alsace et pour le département, c'est pareil, si on envoie Bas-Rhin, par exemple, il y aura 67 au lieu de Bas-Rhin.
0