Page 1 sur 1

Formulaire PHP

Posté : 29 déc. 2009, 16:49
par seb0000006
Bonjour à toutes et à tous

J'ai un soucis avec un script de formulaire. Tous les champs et envoi mails marchent nickel, le probleme est que lorsqu'on clique sur "envoyer", normalement on devrait être dirigé vers une page que j'ai nommée "merci.html".
Et là rien à faire, le formulaire est bien envoyé mais l'utilisateur reste sur une page blanche.
Cela fait des heures que je cherche et je ne comprends pas pourquoi.

Voici le scipt:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<?php

// N'afficher que les erreurs, pas les avertissements...
ini_set("error_reporting", "E_ALL & ~E_NOTICE");

// Adresse de réception du formulaire
$email_dest = "[email protected]";

if ($_POST['envoi']) {

// E-mail headers:
$headers ="MIME-Version: 1.0 n";
$headers .="From: Formulaire de reservations TransfertService<[email protected]>n";


$headers .="Content-Type: text/html; charset=iso-8859-1 n";

$subject = "Votre demande";

$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['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;

// Send the e-mail
if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");
} else { // Closing if !mail...

// Renvoi à la page de remerciement
header("Location:http://www.transfertservice.fr/merci.html");
exi t();

} // Fin du else
} // Closing if edit
?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<script language="JavaScript">function verifSelection() {if (document.mail_form.champ1.value == "") {
alert("Veuillez indiquer votre nom svp")
return false
} if (document.mail_form.zone_email.value == "") {
alert("Veuillez indiquer votre e-mail svp")
return false
}

invalidChars = " /:,;'"

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

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

atPos = document.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.')
document.mail_form.zone_email.focus()
return false
}

if (document.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.')
document.mail_form.zone_email.focus()
return false
}

periodPos = document.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.')
document.mail_form.zone_email.focus()
return false
}

if (periodPos+3 > document.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.')
document.mail_form.zone_email.focus()
return false
}if (document.mail_form.zone_texte.value == "") {
alert("Veuillez préciser votre demande svp")
return false
} } // Fin de la fonction

</script>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Transfert Services | Taxi driver along the C&ocirc;te d'Azur</title>
<script type="text/JavaScript">
<!--
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
<style type="text/css">
<!--
.Style1 {
font-family: Arial, Helvetica, sans-serif;
color: #787A79;
font-size: 12px;
}
.Style2 {
font-family: Arial, Helvetica, sans-serif;
color: #767877;
font-size: 12px;
}
.Style3 {
font-family: Arial, Helvetica, sans-serif;
color: #757776;
font-size: 12px;
}
.Style4 {
font-family: Arial, Helvetica, sans-serif;
color: #737776;
font-size: 12px;
}
.Style5 {font-family: Arial, Helvetica, sans-serif}
.Style9 {font-family: Arial, Helvetica, sans-serif; font-size: 12px; }
.Style11 {font-family: Arial, Helvetica, sans-serif; font-size: 24px; }
-->
</style>
</head>

<body onload="MM_preloadImages('images/service02.jpg','images/accueil02.jpg','images/r eserver_bouton_vert_02.png')">
<table width="780" height="550" border="0" align="center" background="images/fondperso02.jpg">
<tr>
<td colspan="2"><a href="http://www.transfertservice.fr/index.php"><img src="FICHIERS/logo_transfertservice.png" width="274" height="44" border="0" /></a></td>
<td width="24">&nbsp;</td>
<td width="24">&nbsp;</td>
<td width="24">&nbsp;</td>
<td width="24">&nbsp;</td>
<td width="24">&nbsp;</td>
<td width="24">&nbsp;</td>
<td width="18">&nbsp;</td>
<td colspan="2"><div align="center"><img src="images/interstar_minibus_gris_devant.jpg" width="70" height="50" /></div></td>
</tr>
<tr>
<td rowspan="11"><form name="mail_form" method="post" action="<?=$_SERVER['PHP_SELF']?>" onSubmit="return verifSelection()">
<div align="left"><a href="#" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('reservez','','images/reserver_bouton_vert_02.png',1)" >
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#ve rsion=7,0,19,0" width="180" height="25">
<param name="movie" value="animations/reservez.swf" />
<param name="quality" value="high" />
<embed src="animations/reservez.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="180" height="25"></embed>
</object>
</a></div>
<table width="220" border="0" align="center">
<p align="center"></p><tr>
<td colspan="2"><div align="left"><font face="Verdana" size="2">Nom / Prénom</font></div></td>
</tr><tr>
<td colspan="2"><div align="left">
<input name="champ1" type="text" />
</div></td>
</tr>
<tr>
<td colspan="2"><div align="left"><font face="Verdana" size="2">Soci&eacute;t&eacute;</font></div></td>
</tr>
<tr>
<td colspan="2"><div align="left">
<input name="champ2" type="text" />
</div></td>
</tr>
<tr>
<td colspan="2"><div align="left"><font face="Verdana" size="2">E-mail</font></div></td>
</tr>
<tr>
<td colspan="2" valign="top"><div align="left">
<input name="zone_email" type="text" />
</div></td>
</tr>
<tr>
<td colspan="2" valign="top"><div align="left"><font face="Verdana" size="2">Votre demande</font></div></td>
</tr>
<tr>
<td colspan="2" valign="top"><div align="left">
<textarea name="zone_texte" cols="20" rows="10"></textarea>
</div></td>
</tr>
<tr>
<td valign="top"><input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="2">
<input name="nbre_zones_texte" type="hidden" value="1">
<input name="nbre_zone_email" type="hidden" value="1">
<input name="titre_champ1" type="hidden" value="Nom / Prénom"><input name="titre_champ2" type="hidden" value="Société"><input name="titre_email" type="hidden" value="E-mail"><input name="titre_zone" type="hidden" value="Votre demande"></td>
<td><div align="center">
<input type="reset" name="Reset" value="Effacer"> 
<input type="submit" name="envoi" value="Envoyer">
</div></td>
</tr>
</table>
etc.....

Merci beaucoup pour votre aide

Seb

Re: Formulaire PHP

Posté : 29 déc. 2009, 17:10
par macgawel
Bonjour.

1. Merci d'utiliser les balises qui vont bien pour le code (balises php ou html).

2. Au moins pendant la phase de tests, il vaut mieux afficher tous les messages :
ini_set("error_reporting", "E_ALL");
Et enlève le @ de @mail...

3. Essaye en remplaçant le header (celui qui redirige vers merci.html) par un echo.

Re: Formulaire PHP

Posté : 29 déc. 2009, 19:52
par seb0000006
merci
j'ai essayé en remplacant le "header" par "echo", mais maintant il y a toujours la page blanche avec marqué Location:http://www.......merci.html

Re: Formulaire PHP

Posté : 30 déc. 2009, 13:10
par Ryle
Pour que le header fonctionne, il ne faut en principe rien envoyer au navigateur avant de demander la redirection (on peut aussi jouer sur le buffer de php, mais c'est quelque chose que personnellement je déconseille).

En gros, puisque tu as déjà envoyé les lignes :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
au navigateur, il ne te laisse vraissemblablement pas le rediriger vers une nouvelle page. Tu devrais avoir un message d'erreur "output already sent"...

Commence ton script directement par <?php (sans espace, sans saut de ligne, sans rien qui pourrait être envoyé au navigateur) et déplace le doctype après ton traitement (avant la balise html)) :)

Re: Formulaire PHP

Posté : 30 déc. 2009, 15:22
par seb0000006
Magnifique!

Merci beaucoup Ryle ça marche nickel! Merci à tous pour votre aide

Bonne fin d'année à tous!

xx