Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: auron818 le le 02-04-2013 a 18:35:15

Titre: PHP invisible
Posté par: auron818 le le 02-04-2013 a 18:35:15

Bonjour à tous !!

Voilà je viens vers vous car j'essai de lancer un formulaire de contact sur mon site.
Vraiment rien de bien compliqué, sauf que...

Je n'arrêtais pas de me retrouver avec une erreur (apparemment il fallait ajouter le fichier .htaccess qui devait contenir une ligne de commande)

Ca à l'air de fonctionner.., sauf que lorsque je tente d'envoi un mail via le formulaire de contact j'ai une page blanche qui s'affiche ensuite... je ne comprends pas pourquoi...

Pouvez-vous m'aider ??

Voici le code en question:


Code:
<?php
/* Si le formulaire est envoyé alors on fait les traitements */
if (isset($_POST['envoye']))
{
/* Récupération des valeurs des champs du formulaire */
if (get_magic_quotes_gpc())
{
$nom         = stripslashes(trim($_POST['nom']));
$prenom    = stripslashes(trim($_POST['prenom']));
$email       = stripslashes(trim($_POST['email']));
$liste_qui    = stripslashes(trim($_POST['liste_qui']));
$message      = stripslashes(trim($_POST['message']));
}
else
{
$nom         = trim($_POST['nom']);
$prenom       = trim($_POST['prenom']);
$email       = trim($_POST['email']);
$liste_qui    = trim($_POST['liste_qui']);
$message      = trim($_POST['message']);
}

/* Expression régulière permettant de vérifier si le
* format d'une adresse e-mail est correct */
$regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';

/* Expression régulière permettant de vérifier qu'aucun
* en-tête n'est inséré dans nos champs */
$regex_head = '/[\n\r]/';

/* Si le formulaire n'est pas posté de notre site on renvoie
* vers la page d'accueil */
if($_SERVER['HTTP_REFERER'] != 'http://www.entrepot-osswald.net/contacts.php')
{
header('Location: http://www.entrepot-osswald.net/');
}
/* On vérifie que tous les champs sont remplis */
elseif (empty($nom)
|| empty($prenom)
|| empty($email)
|| empty($liste_qui)
|| empty($message))
{
$alert = 'Tous les champs doivent être renseignés';
}
/* On vérifie que le format de l'e-mail est correct */
elseif (!preg_match($regex_mail, $email))
{
$alert = 'L\'adresse '.$email.' n\'est pas valide';
}
/* On vérifie qu'il n'y a aucun header dans les champs */
elseif (preg_match($regex_head, $email)
|| preg_match($regex_head, $nom)
|| preg_match($regex_head, $prenom))
{
$alert = 'En-têtes interdites dans les champs du formulaire';
}
/* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
elseif (!isset($_COOKIE['sent']))
{
/* Destinataire (mon adresse mail) */
$to = 'auron818@free.fr';

/* Construction du message */
$msg = 'Bonjour,'."\r\n\r\n";
$msg .= 'Ce mail a été envoyé depuis entrepot-osswald.net par '.$nom.' '.$prenom.' '.$liste_qui."\r\n\r\n";
$msg .= 'Voici le message qui vous est adressé :'."\r\n";
$msg .= '***************************'."\r\n";
$msg .= $message."\r\n";
$msg .= '***************************'."\r\n";

/* En-têtes de l'e-mail */
$headers = 'From: '.$nom.' '.$prenom.' <'.$email.'>'."\r\n\r\n";

/* Envoi de l'e-mail */
if (mail($to, $nom, $msg, $headers))
{
$alert = 'E-mail envoyé avec succès';

/* On créé un cookie de courte durée (ici 120 secondes) pour éviter de
* renvoyer un mail en rafraichissant la page */
setcookie("sent", "1", time() + 120);

/* On détruit la variable $_POST */
unset($_POST);
}
else
{
$alert = 'Erreur d\'envoi de l\'e-mail';
}

}
/* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
else
{
unset($_POST);
}
}
?>


Code:
   <form id="form" method="post" action="contacts.php">
<p>
   <input name="nom" type="text" id="nom" placeholder="Votre nom" required /> <label for="nom">Nom</label>
</p>
<p>
   <input name="prenom" type="text" id="prenom" placeholder="Votre prenom" required /> <label for="name">Prenom</label>
</p>
<p>
   <input name="email" type="email" id="email" placeholder="Votre email" required /> <label for="name">em@il</label>
</p>
<p>
<select name="liste_qui" id="liste_qui">
   <option value="choisissez">Choisissez...</option>
   <option value="particulier">Particulier</option>
<option value="professionnel">Professionnel</option>
</select><br />
<label for="message"></label>
<textarea name="message" id="message" rows="10" cols="50" placeholder="Entrez votre message ici"></textarea>
</p>
<p>
   <input type="submit" value="envoyer" id="envoyer" />
</form>

Titre: Re:PHP invisible
Posté par: WebD le le 02-04-2013 a 19:13:54

Il manque name="envoye" à ton submit du coup ce test ne passe pas:

if (isset($_POST['envoye']))

Titre: Re:PHP invisible
Posté par: auron818 le le 02-04-2013 a 19:44:26

Super !

Ca fonctionne merci beaucoup ^^

Comment j'ai pu oublier ça ??...

Par contre encore un petit soucis, lorsque j'envoi le formulaire je suis automatiquement redirigé sur la first page du site.

Je soupçonne la balise:

Code:
if($_SERVER['HTTP_REFERER']


Vous en dites quoi ??

Titre: Re:PHP invisible
Posté par: auron818 le le 03-04-2013 a 09:44:46

En fait le formulaire n’envoie rien du tout..
Je ne reçois pas de mail par contre la personne est automatiquement redirigé vers la page principal.

Titre: Re:PHP invisible
Posté par: pppplus le le 03-04-2013 a 10:55:40

sur votre fichier contacts.php

mettez simplement

<?php
print_r($_POST);
exit;
?>

vous verrez si vous avez bien les données du formulaire.
Quant à la redirection sur la page d'accueil, vous devez avoir une redirection peut-être sur le .htaccess ?

Titre: Re:PHP invisible
Posté par: auron818 le le 03-04-2013 a 21:59:28

Bonjour,

merci beaucoup pour votre aide.
J'ai donc ajouter ces lignes à mon code php mais je me retrouve avec une erreur:

Code:
Array ( [nom] => a [prenom] => a [email] => a@a.fr [liste_qui] => professionnel [message] => 654 [envoyer] => envoyer )
Warning: Cannot modify header information - headers already sent by (output started at /home/auron818/public_html/contacts.php:4) in /home/auron818/public_html/contacts.php on line 36


Voici mon code php:

Code:
<?php
/* Si le formulaire est envoyé alors on fait les traitements */
if (isset($_POST['envoyer']))
print_r($_POST);
{
/* Récupération des valeurs des champs du formulaire */
if (get_magic_quotes_gpc())
{
$nom         = stripslashes(trim($_POST['nom']));
$prenom    = stripslashes(trim($_POST['prenom']));
$email      = stripslashes(trim($_POST['email']));
$liste_qui   = stripslashes(trim($_POST['liste_qui']));
$message      = stripslashes(trim($_POST['message']));
}
else
{
$nom         = trim($_POST['nom']);
$prenom      = trim($_POST['prenom']);
$email      = trim($_POST['email']);
$liste_qui   = trim($_POST['liste_qui']);
$message      = trim($_POST['message']);
}

/* Expression régulière permettant de vérifier si le
* format d'une adresse e-mail est correct */
$regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';

/* Expression régulière permettant de vérifier qu'aucun
* en-tête n'est inséré dans nos champs */
$regex_head = '/[\n\r]/';

/* Si le formulaire n'est pas posté de notre site on renvoie
* vers la page d'accueil */
if($_SERVER['HTTP_REFERER'] != 'http://www.entrepot-osswald.net/contacts.php')
{
header('Location: http://www.entrepot-osswald.net/contacts.php');
}
/* On vérifie que tous les champs sont remplis */
elseif (empty($nom)
|| empty($prenom)
|| empty($email)
|| empty($liste_qui)
|| empty($message))
{
$alert = 'Tous les champs doivent être renseignés';
}
/* On vérifie que le format de l'e-mail est correct */
elseif (!preg_match($regex_mail, $email))
{
$alert = 'L\'adresse '.$email.' n\'est pas valide';
}
/* On vérifie qu'il n'y a aucun header dans les champs */
elseif (preg_match($regex_head, $email)
|| preg_match($regex_head, $nom)
|| preg_match($regex_head, $prenom))
{
$alert = 'En-têtes interdites dans les champs du formulaire';
}
/* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
elseif (!isset($_COOKIE['sent']))
{
/* Destinataire (mon adresse mail) */
$to = 'auron818@free.fr';

/* Construction du message */
$msg = 'Bonjour,'."\r\n\r\n";
$msg .= 'Ce mail a été envoyé depuis entrepot-osswald.net par '.$nom.' '.$prenom.' '.$liste_qui."\r\n\r\n";
$msg .= 'Voici le message qui vous est adressé :'."\r\n";
$msg .= '***************************'."\r\n";
$msg .= $message."\r\n";
$msg .= '***************************'."\r\n";

/* En-têtes de l'e-mail */
$headers = 'From: '.$nom.' '.$prenom.' <'.$email.'>'."\r\n\r\n";

/* Envoi de l'e-mail */
if (mail($to, $nom, $msg, $headers))
{
$alert = 'E-mail envoyé avec succès';

/* On créé un cookie de courte durée (ici 120 secondes) pour éviter de
* renvoyer un mail en rafraichissant la page */
setcookie("sent", "1", time() + 120);

/* On détruit la variable $_POST */
unset($_POST);
}
else
{
$alert = 'Erreur d\'envoi de l\'e-mail';
}

}
/* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
else
{
unset($_POST);
}
   exit;
}
?>


Je ne comprends vraiment pas pourquoi mon formulaire ne fonctionne pas...
Voici ce que contient mon fichier .htaccess:

Code:
SetEnv PHP_VER 5

Titre: Re:PHP invisible
Posté par: pppplus le le 03-04-2013 a 22:08:19

déjà problème :

<?php
/* Si le formulaire est envoyé alors on fait les traitements */
if (isset($_POST['envoyer']))
print_r($_POST);
{
....

C'est plutôt :
if (isset($_POST['envoyer']))
{
print_r($_POST);
....


Ensuite, l'erreur ligne 36 est certainement cette ligne :

if($_SERVER['HTTP_REFERER'] != 'http://www.entrepot-osswald.net/contacts.php')
{
header('Location: http://www.entrepot-osswald.net/contacts.php');
}

header(xxx); n'est possible que s'il n'y a eu aucune sortie avant.
Et comme je vous ai fait faire un print... ça bloque header()

Et ce header() est la cause de votre redirection.

En début, faites un
echo $_SERVER['HTTP_REFERER'];

et vous verrez, que ça ne fait jamais : http://www.entrepot-osswald.net/contacts.php
D'où la redirection.

Lorsque vous bloquez, faites des echo ou print un peu partout, ça vous éclairera sur ce que vous cherchez et sur ce que fait réellement le script.

Titre: Re:PHP invisible
Posté par: auron818 le le 04-04-2013 a 00:55:58

Bonjour,

Merci beaucoup pour l'aide précieuse que vous m'apportez !!
Je me retrouve actuellement devant un message d'erreur:

Code:
Array ( [nom] => Nicolas [prenom] => Alexia [email] => auron818@free.fr [liste_qui] => particulier [message] => 156 [envoyer] => envoyer ) http://www.entrepot-osswald.net/contacts.html
Warning: Cannot modify header information - headers already sent by (output started at /home/auron818/public_html/contacts.php:5) in /home/auron818/public_html/contacts.php on line 37


Voici mon code actuel:

Code:
<?php
/* Si le formulaire est envoyé alors on fait les traitements */
if (isset($_POST['envoyer']))
{
   print_r($_POST);
/* Récupération des valeurs des champs du formulaire */
if (get_magic_quotes_gpc())
{
$nom = stripslashes(trim($_POST['nom']));
$prenom = stripslashes(trim($_POST['prenom']));
$email = stripslashes(trim($_POST['email']));
$liste_qui = stripslashes(trim($_POST['liste_qui']));
$message = stripslashes(trim($_POST['message']));
}
else
{
$nom = trim($_POST['nom']);
$prenom = trim($_POST['prenom']);
$email = trim($_POST['email']);
$liste_qui = trim($_POST['liste_qui']);
$message = trim($_POST['message']);
}

/* Expression régulière permettant de vérifier si le
* format d'une adresse e-mail est correct */
$regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';

/* Expression régulière permettant de vérifier qu'aucun
* en-tête n'est inséré dans nos champs */
$regex_head = '/[\n\r]/';

/* Si le formulaire n'est pas posté de notre site on renvoie
* vers la page d'accueil */
   echo $_SERVER['HTTP_REFERER'];
if($_SERVER['HTTP_REFERER'] != 'http://www.entrepot-osswald.net/contacts.php')
{
header('Location: http://www.entrepot-osswald.net/contacts.php');
}
/* On vérifie que tous les champs sont remplis */
elseif (empty($nom)
|| empty($prenom)
|| empty($email)
|| empty($liste_qui)
|| empty($message))
{
$alert = 'Tous les champs doivent être renseignés';
}
/* On vérifie que le format de l'e-mail est correct */
elseif (!preg_match($regex_mail, $email))
{
$alert = 'L\'adresse '.$email.' n\'est pas valide';
}
/* On vérifie qu'il n'y a aucun header dans les champs */
elseif (preg_match($regex_head, $email)
|| preg_match($regex_head, $nom)
|| preg_match($regex_head, $prenom))
{
$alert = 'En-têtes interdites dans les champs du formulaire';
}
/* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
elseif (!isset($_COOKIE['sent']))
{
/* Destinataire (mon adresse mail) */
$to = 'auron818@free.fr';

/* Construction du message */
$msg = 'Bonjour,'."\r\n\r\n";
$msg .= 'Ce mail a été envoyé depuis entrepot-osswald.net par '.$nom.' '.$prenom.' '.$liste_qui."\r\n\r\n";
$msg .= 'Voici le message qui vous est adressé :'."\r\n";
$msg .= '***************************'."\r\n";
$msg .= $message."\r\n";
$msg .= '***************************'."\r\n";

/* En-têtes de l'e-mail */
$headers = 'From: '.$nom.' '.$prenom.' <'.$email.'>'."\r\n\r\n";

/* Envoi de l'e-mail */
if (mail($to, $nom, $msg, $headers))
{
$alert = 'E-mail envoyé avec succès';

/* On créé un cookie de courte durée (ici 120 secondes) pour éviter de
* renvoyer un mail en rafraichissant la page */
setcookie("sent", "1", time() + 120);

/* On détruit la variable $_POST */
unset($_POST);
}
else
{
$alert = 'Erreur d\'envoi de l\'e-mail';
}

}
/* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
else
{
unset($_POST);
}
exit;
}
?>


Désolé pour tout le temps que je vous fait perdre, merci de prendre autant de temps pour moi !!

Titre: Re:PHP invisible
Posté par: pppplus le le 04-04-2013 a 10:52:30

Relisez ma réponse précédente, je vous ai mis
1- pourquoi le message d'erreur (Warning: Cannot modify header information)
2- votre test sur $_SERVER['HTTP_REFERER'] n'est pas bon


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.