Besoin d'une aide amicale :) Prob html/php

Fermé
Utilisateur anonyme - Modifié par onmyown31 le 12/04/2011 à 14:37
 le père - 4 avril 2011 à 18:20
Bonjour,

Voilà j'ai un petit soucis concernant la réalisation d'un formulaire de contact en html/php.
J'ai voulu me débrouiller tt seule en bricolant par-ci par-là des morceaux de codes, sauf que résultat > ça marche à moitié !
J'ai une page de contact tt simple en html (et sa feuille csss) et une page en php...J'ai transféré tt ça sur mon site. Le truc est que les information sont bien envoyées sur ma boite mail mais ma page php ne rétablit pas la liaison avec le site en redirigeant vers une page html de confirmation d'envoi (merci.html). Si quelqu'un a une idée, ça serait vraiment bienvenu !
Voilà le code que j'ai utilisé :

Pour la page html :
<form name="mail_form" method="post" action="contact.php">
<div align="top">
</p>
</div>
<table width="23" height="30" border="0" align="left" cellpadding="0" cellspacing="0">
<tr>
<td width="23" height="30"><div align="center">
<font color="#CC0000" size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong><?php
if ($erreur_email1) {
echo(stripslashes($erreur_email1));
} else {
if ($erreur_case1) {
echo(stripslashes($erreur_case1));
} else {
if ($erreur_texte1) {
echo(stripslashes($erreur_texte1));
} else {
} // Fin du else...
} // Fin du else...
} // Fin du else...
?>
</strong></font>
</div></td>
</tr>
</table>
<p align=""></p><table width="566" border="0" align="left"><tr>
<td width="2" height="20"><div align="right"></div></td>
<td width="38" align="center" valign="middle">
<?php
if ($erreur_email1) {
echo($icone);
}
?> </td>
<td width="512"><input name="zone_email1" type="text" value="Votre adresse mail" size="33"></td>
</tr></table><table width="566" border="0" align="left"><tr>
<td width="45" height="51"><div align="right" class="Style3"><font face="Verdana">Sujet</font></div></td>
<td width="15" align="center" valign="middle">
<?php
if ($erreur_case1) {
echo($icone);
}
?> </td>
<td width="492"><span class="Style4">
<span class="Style5 ">
<input type="checkbox" name="case1_[0]" id="case1_" value="Demande de devis"<?php
if ($_SESSION['case1_'][0] == "Demande de devis") {
echo(" checked");
}
?>>
<font face="Verdana">Demande de devis</font><br>
<input type="checkbox" name="case1_[1]" id="case1_" value="Renseignement technique"<?php
if ($_SESSION['case1_'][1] == "Renseignement technique") {
echo(" checked");
}
?>>
<font face="Verdana">Renseignement technique</font><br>
<input type="checkbox" name="case1_[2]" id="case1_" value="Autre"<?php
if ($_SESSION['case1_'][2] == "Autre") {
echo(" checked");
}
?>>
<font face="Verdana">Autre</font><font face="Verdana"></font><font face="Verdana"></font></span></span></td>
</tr></table><table width="566" border="0" align="left"><tr>
<td width="20" height="95" valign="top"><div align="right">
<p> </p>
<p> </p>
</div></td>
<td width="41" align="center" valign="top">
<?php
if ($erreur_texte1) {
echo($icone);
}
?> </td>
<td width="491"><textarea name="zone_texte1" cols="40" rows="5"></textarea></td>
</tr></table><table width="406" border="0" align="left">
<tr>
<td width="400" valign="top"><div align="right">
<input type="submit" name="envoi" value="Envoyer">
</div></td></tr></table><div align="left"><input name="nbre_fichiers" type="hidden" id="nbre_fichiers" value=""></div></form></div>
<p align="center" class="Style8"><strong>-------------------------</strong><br/>

Pour le php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>contact</title>
</head>


<body>
</body>
<?php

// On vérifie si la fonction ini_set() a été désactivée...
$desactive = ini_get('disable_functions');
if (preg_match("/ini_set/i", "$desactive") == 0) {
// Si elle n'est pas désactivée, on définit ini_set de manière à n'afficher que les erreurs...
ini_set("error_reporting" , "E_ALL & ~E_NOTICE");
}

// Vérifier que le formulaire a été envoyé...
if (isset($_POST['envoi'])) {


//On commence une session pour enregistrer les variables du formulaire...

session_start();

$_SESSION['zone_email1'] = $_POST['zone_email1'];

//Enregistrement des paramètres de la case 1...
$_SESSION['case1_'][0] = "";
if (isset($_POST['case1_'][0])) {
$_SESSION['case1_'][0] = $_POST['case1_'][0];
} // Fin du if...

$_SESSION['case1_'][1] = "";
if (isset($_POST['case1_'][1])) {
$_SESSION['case1_'][1] = $_POST['case1_'][1];
} // Fin du if...

$_SESSION['case1_'][2] = "";
if (isset($_POST['case1_'][2])) {
$_SESSION['case1_'][2] = $_POST['case1_'][2];
} // Fin du if...

//Enregistrement des zones de texte...
$_SESSION['zone_texte1'] = $_POST['zone_texte1'];

// Définir l\'icone apparaissant en cas d\'erreur...


// Définir sur 0 pour afficher un petit x de couleur rouge.
// Définir sur 1 pour afficher l\'image d\'une croix rouge telle que celle utilisée dans l\'assistant
// Si vous utilisez l\'option 1, l\'image de la croix rouge \'icone.gif\' doit se trouver dans le répertoire \'images\',
// ce dernier devant se trouver au même niveau que votre formulaire...
$flag_icone = 0;

// On vérifie si $flag_icone est défini sur 0 ou 1...
if ($flag_icone == 0) {
$icone = "<b><font size=\"3\" face=\"Arial, Verdana, Helvetica, sans-serif\" color=\"#CC0000\">x</font></b>";
} else {
$icone = "<img src=\"images/icone.gif\"";
}

// Définir l'indicateur d'erreur sur zéro...
$flag_erreur = 0;
// N'envoyer le formulaire que s'il n'y a pas d'erreurs...
if ($flag_erreur == 0) {

// Addresse de réception du formulaire
$email_dest = "contact@xxx";
$sujet = "Contact";
$entetes ="MIME-Version: 1.0 \n";
$entetes .="From: contact-monsite<contact@xxx>\n";
$entetes .="Return-Path: contact-xxx<contact@xxx>\n";
$entetes .="Reply-To: contact-xxx<contact@xxx>\n";
$entetes .="Content-Type: text/html; charset=iso-8859-1 \n";
$partie_entete = "<html>\n<head>\n<title>Formulaire</title>\n<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>\n</head>\n<body bgcolor=#FFFFFF>\n";


//Partie HTML de l'e-mail...
$partie_zone_email .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Adresse mail = " . $_SESSION['zone_email1'] . "</font><br>\n";
$partie_cases .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Sujet</font><br>\n";
$partie_cases .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Case 1 = " . $_SESSION['case1_'][0] . "</font><br>\n";
$partie_cases .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Case 2 = " . $_SESSION['case1_'][1] . "</font><br>\n";
$partie_cases .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Case 3 = " . $_SESSION['case1_'][2] . "</font><br>\n";
$partie_zone_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Message = " . $_SESSION['zone_texte1'] . "</font><br>\n";


// Fin du message HTML
$fin = "</body></html>\n\n";

$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_listes . $partie_boutons . $partie_cases . $partie_zone_texte . $fin;


// Send the e-mail
if (@!mail($email_dest,$sujet,$sortie,$entetes)) {
echo("Envoi du formulaire impossible");
exit();
} else {

// Rediriger vers la page de remerciement
header("http://wwwxxx/xxx.html");
exit("");
} // Fin else
} // Fin du if ($flag_erreur == 0) {
} // Fin de if POST
?>
</html>

3 réponses

Bonjour

Tu utilises session_start() et header() après avoir commencé l'envoi des données au client (l'envoi des données a commencé dès le DOCTYPE).
Or ces fonctions utilisent les en-têtes HTTP et doivent donc être utilisées AVANT tout envoi de données.
Il faut que tu réorganises ton code pour respecter cette condition.
0
Utilisateur anonyme
4 avril 2011 à 18:03
Merci de votre réponse ! Donc d'après vous ce n'est qu'une question d'organisation, mais après toutes les infos y sont ? car ce qui est étrange c'est que le formulaire fonctionne...Il ne me redirige simplement pas vers ma page merci.html une fois la demande envoyée...
Je ne sais pas vraiment comment réorganiser mon code du coup.
0
Il ne faut rien envoyer sur la sortie (même pas un espace ou une ligne vide avant le premier <?php) avant d'avoir exécuté la dernière instruction qui fait appel aux en-têtes - ici c'est ton "header". Ce n'est pas difficile, il suffit par exemple de mettre dans une variable tout ce que tu avais envie d'envoyer avant ($variable.= $truc; au lieu de echo $truc;), et d'attendre d'avoir le droit pour faire l'envoi.

D'ailleurs, je m'aperçois que ton header est mal écrit : tu as mis
header("http://www.monsite/merci.html");
alors que c'est
header("Location: http://www.monsite/merci.html");
qu'il vaut mieux faire suivre de exit(); sinon ton script va continuer de s'exécuter alors que le client l'ignorera.
0