Page 1 sur 2

probleme liste déroulante dans formulaire

Posté : 24 juil. 2006, 13:06
par celine123
bonjour
J'ai un formulaire qui me pose des problemes, et plus exactement la récupération des varables de la liste déroulante. J'ai tourné le script dans tous les sens, je sais que je suis pas loin mais bon, je trouve pas.
Le plus simple étant de poser le script alors voila :
<?php 
$email_dest = "mon adresse@com";

// E-mail headers:
$headers ="MIME-Version: 1.0 \n";
$headers .="From: expediteur<email expediteur>\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 bgcolor=#FFFFFF>";

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>";
}
if ($_POST['liste_rubrique'] != 0) {
$partie_liste = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_rubrique'] . " = " . $_POST['liste'] . "</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_zone_email . $partie_zone_texte . $fin;

if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");
} 
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><script language="JavaScript">
function verifSelection() {if (mail_form.champ1.value == "") {
alert("remplir tous les champs")
return false
} if (mail_form.champ2.value == "") {
alert("remplir tous les champs")
return false
} } 
</script>
</head>
<body>
<form name="mail_form" method="post" action="<?=$PHP_SELF?>" onSubmit="return verifSelection()">
<div align="center"></div><p align="center">
 <table width="566" border="1" align="center">
 <p align="center"> </p>
 <tr><td colspan="2" class="infoBoxHeading"><div align="center">merci de remplir les champs suivants</div></td>
 <tr><td class="infoBoxContents">Rubrique</td>
 <td><select name="liste" size="1">
  <option selected style="color:#FF0000">ARCHITECTURE, DESIGN</option>
<option value="1">Architecture</option>
 <option value="2">Design</option>
						<tr><td td class="infoBoxContents">nom</td>
	<td><input name="champ1" type="text"></td></tr>
	<tr><td td class="infoBoxContents">Prénom</td>
	<td><input name="champ3" type="text"></td></tr>
	<td><input name="zone_email" type="text"></td></tr>
	rows="5"></textarea></td></tr>
	
<input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="2"> 
<input name="liste_rubrique" type="hidden" id ="liste_rubrique" value="1">
<input name="nbre_zone_email" type="hidden" value="1"> 
<input name="titre_rubrique" type="hidden" value="rubrique"> 
<input name="titre_champ1" type="hidden" value="nom">
<input name="titre_champ3" type="hidden" value="Prenom"> 
<input name="titre_email" type="hidden" value="e-mail">

<td><div align="center"> 
          <input type="reset" name="Reset" value="Effacer">
        <input type="submit" name="envoi" value="Envoyer">
      </div></td>
    </tr></table>
	 
celine

Posté : 24 juil. 2006, 15:05
par Ryle
Utilises les balises [ php ] pour du code php, ca met en couleur et c'est plus facile pour trouver des erreurs :)

As-tu testé la valeur de $_POST['liste_rubrique'] pour savoir si tu rentrais bien dans le if ?
As-tu testé la valeur de $_POST['list'] pour savoir si tu le récupérais bien ?
As-tu testé la valeur de $partie_liste pour vérifier qu'elle contenait bien ce que tu attendais ?
As-tu testé la valeur de $sortie pour vérfier qu'elle correspondait à ce que tu voulais envoyer ?

Et maintenant que tu as pu situé le problème, ne manquerait-il pas quelque chose lorsque tu constitues ta variable $sortie ? ;)

Posté : 24 juil. 2006, 15:53
par aelurus
Fait un
print_r($_POST);
c pratique pour recup les variable qui passe par un formulaire.


$partie_liste
^^ c la tite bete qui manque je crois

Posté : 24 juil. 2006, 16:10
par celine123
ARgh c'était trop simple, je suis bête!!!
Pendant que j'y suis comment pourrais je faire pour que le bouton envoyer lance a la fois le résultat du formulaire par mail (comme maintenant) mais aussi redirige sur une autre page
En tout cas, merci pour vos explications
celine

Posté : 24 juil. 2006, 16:35
par aelurus
heu premiere idée tu inclues le traitement de ton formulaire dan sla page demancer, car je ne pense pas que l'on puisse faire de multiple traitement juste avec l'url de validation. Mais plus dans la de traitement elle meme :)
genre :
include(traitement.php);
if (isset($_post)){alors blabla bla tout ce que tu veux}{ ou alors bla bla bla tout ce que tu veux}
et la encore blabla bal
Si je dit pas trop de bettise ^^

Posté : 24 juil. 2006, 17:23
par Ryle
S'il s'agit juste d'une redirection pour ne pas revenir sur le formulaire après l'envoi du mail, il te suffit d'utiliser la fonction header(). Par exemple :
if (@!mail($email_dest,$subject,$sortie,$headers)) { 
  echo("Envoi du formulaire impossible"); 
}
else { // en cas de succès
  header("Location: urlDeLaNouvellePage"); // redirige vers la nouvelle page
  exit(); // optionnel : arrête le traitement ici, c'est pas la peine de lire le reste de la page et de faire des trucs compliqués dessus alors qu'on va en changer ;)
}
Si tu as besoin des valeurs saisies dans le formulaire tu peux creuser la solution d'aelurus :) (sachant que tu peux aussi en repasser en Get via l'url de la page que tu ouvres : "Location: maPage.php?param=xxx")

Posté : 24 juil. 2006, 17:38
par aelurus
Rooooooooooooooo
header()
Ba voila une nouveau jouet ^^ à essayer

Posté : 25 juil. 2006, 12:06
par celine123
Salut
C'est exactement ce que je veux faire Ryle, rediriger apres l'envoi du mail le probleme avec
header
c'est qu'il fait la redirection directement, sans même afficher le formulaire
celine

Posté : 25 juil. 2006, 12:14
par aelurus
S'il s'agit juste d'une redirection pour ne pas revenir sur le formulaire après l'envoi du mail, il te suffit d'utiliser la fonction header(). Par exemple :
S'il s'agit juste d'une redirection

Cela semble normal, precise clairement ce que tu veux une fois ton formulaire validé.

Posté : 25 juil. 2006, 13:33
par Invité
Resalut
En fait je veux, qu'une fois le formulaire rempli et valider par le bouton submit, ca envoi A LA FOIS les variables sur le mail ET une redirection sur une autre page.
Le
header
ne fait QU'UNE redirection, j'ai plus l'affichage du formulaire!

Posté : 25 juil. 2006, 14:21
par Invité
Ba tu rediriges sur la page voulu en specifiant le action="tapage" dans le formulaire et dans le ta page tu inclus le traitement du formulaire.
Pour moi tu as les deux techniques qui permette de resoudre ta requette.
Voir meme juste rejouter la technique du header dans ton code deja donné mais j'ai peur que ce soit pas evident a gerer avec l'envoi du header.
Je ferais des includes car j'aime bien les pseudo frame :) plus simple dans ma tete. Que te pose probleme la logique de ton action ou la procedure j'essaye de faire de mon mieux mais ne cerne pas ton besoin.

Posté : 25 juil. 2006, 14:25
par aelurus
Excuse moi j'étais pas logé.
c'est qu'il fait la redirection directement, sans même afficher le formulaire
celine
Heu redonne quand meme le code que tu as mit car il doit y avoir un aoublie dans le if de depart ou une mauvaiselogique dans les conditions du if je pense

Posté : 25 juil. 2006, 16:11
par celine123
Bon alors dans le code de précedemment, (voir le haut du post) j'ai juste rajouté
if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");}
else { 
  header("Location: http://www.blabla.com");
   }
Voili voilou
celine

Posté : 25 juil. 2006, 16:49
par aelurus
Ba si tu as mit ssa c'est normal. Car ton code dit si tu ne peux pas envoyé un email vide alors vas sur www.blablabla.com.

Essaye
if (isset ($_POST['valider'])){
    if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");}
else {
  header("Location: http://www.blabla.com");
   }}
//ensuite ton blabla pour le mail.
La ont dit si le formulaire est valider alors tu test son envoi, si l'envoie passe pas affiche Envoi du formulaire impossible si il passe vas sur blablabla.com
et si le form est pas validé ba affiche le form ....
C'est bien sa que tu veux faire je pense.

Posté : 25 juil. 2006, 23:36
par Ryle
ah oui tiens bien vu, j'avais pas fait attention qu'il exécutait tout le code php à chaque ouverture de la page.. La solution d'aelurus de tester si on a reçu des données du formulaire en vérifiant que $_POST['tonBouton'] est définie est en effet a utiliser.

Personnellement, je l'étendrais même à tout la partie php qui n'a besoin d'être exécutée qu'une fois le formulaire renvoyé :)