Redirection en PHP ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Redirection en PHP ?

par Truc » 03 nov. 2005, 02:43

oui c'est certainement plus logique d'afficher ton message plustot que de l'affecter a une variable puis de l'afficher juste apres.

sinon le plus logique serai encore de mettre un peu d'ordre dans le code :wink: tu as beacoup de balises <body> pour une meme page. Tu devrai déclarer une seule fois en début de fichier puis y inclure ton script.

Voila ce que devrai donner ton dernier test (if) avec l'affichage du message:

<?
if ($erreur == 1) 
{
    formulaire($nom,$email,$sujet,$destinataire,$message);
} 
else 
{
    
	// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini (source de la doc)
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
	$headers .= 'From: '.$vemail."\r\n";	
	
	if(mail($destinataire,$titre,$message,$headers))
	{
	?>
    <p><strong>Félicitations votre message :</strong></p>
    <dl><dt><em>Nom</em> : <span><? echo $vnom; ?></span></dt>
    <dt><em>Email</em>   : <span><? echo $vemail; ?></span></dt>
    <dt><em>Sujet</em>   : <span><? echo $vsujet; ?></span></dt>
    <dt><em>Message</em> : <span><? echo $vmessage; ?></span></dt></dl>
    <p><strong>a bien été envoyé à :</strong> <span><? echo $vdestinataire; ?></span></p>
    <p>Nous vous remercions et nous essayerons de répondre dans les plus brefs délais.</p>
    <p> | <a href="index.html" title="Retour à la page d Accueil">Retour à la page d'Accueil</a> | 
	<a href="contacts.html" title="Retour à la page des Contacts">Retour à la page des Contacts</a> | 
	</p>	
	<?
	}
	else 
	?>
	<p><strong>Erreur lors de l'envoi du mail.</strong></p>
	<?
}
j'ai sorti du code php le plus possible d'html (beaucoup d'affichage simple), puis un test sur la fonction mail() pour savoir si le mail a vraiment bien été envoyé et des en-tetes nottamment pour envoyer au format HTML, comme ça tu peut remettre un lien dans le corps du message vers ton site ou ailleur et avoir un meilleur rendu :wink: Pour plus dinfo va voir la doc (pour mail) exemple 4.
pas bon le message contient aussi le message envoyé :/
Euh ben oui tu demande de l'afficher...
".....<dt><em>Message</em> : <span>" . $vmessage. "</span></dt></dl>..."
Sinon je vois pas le probleme ?!

par webphn » 03 nov. 2005, 00:33

Ca devient tres technique mais je comprend un minimum surtout que si cela te parait logique ya pas de raison de ne pas l'utiliser ^^
else {
	mail($destinataire,$titre,$message,"From: $vemail");
	echo "<body bgcolor=#FFD7EB text=#640032 font face=Verdana>
	<p><strong>Félicitations votre message :</strong></p>
	<dl><dt><em>Nom</em> : <span>" . $vnom. "</span></dt>
	<dt><em>Email</em> : <span>" . $vemail. "</span></dt>
	<dt><em>Sujet</em> : <span>" . $vsujet. "</span></dt>
	<dt><em>Message</em> : <span>" . $vmessage. "</span></dt></dl>
	<p><strong>a bien été envoyé à :</strong> <span>" . $vdestinataire. "</span></p>
	<p>Nous vous remercions et nous essayerons de répondre dans les plus brefs délais.</p>
	<p> | <a href=\"index.html\" title=\"Retour à la page d Accueil\">Retour à la page d'Accueil</a> | <a href=\"contacts.html\" title=\"Retour à la page des Contacts\">Retour à la page des Contacts</a> | </p></body>";
   }
tu voudrais donc dire que en changeant comme ceci ca serait plus logique ?

pas bon le message contient aussi le message envoyé :/

par Truc » 03 nov. 2005, 00:23

oui donc voila tu as initialisé $message avant avec:
..
..
$message.="email : $vemail\n";
$message.="sujet : $vsujet\n";
$message.="message : $vmessage\n"; 
donc oui ton mail va contenir ton message mais dans ce cas je ne vois pas l'interet d'affecter le message a une variable ($message) disant que tout s'est bien passé:
$message="<body bgcolor=#FFD7EB text=#640032 font face=Verdana>
<p><strong>Félicitations votre message :</strong></p> 
...
et de faire un echo juste apres ??
tu aurai pu afficher avec un echo de suite:
echo "<body bgcolor=#FFD7EB text=#640032 font face=Verdana>
<p><strong>Félicitations votre message :</strong></p> 
...
voir meme afficher en limitant l'appel a php:
<body bgcolor=#FFD7EB text=#640032 font face=Verdana>
<p><strong>Félicitations votre message :</strong></p>
<dl><dt><em>Nom</em> : <span><?echo $vnom;?> </span></dt>  
...
enfin ça prete a confusion, mais ça marchera dans tous les cas

:wink:

par webphn » 03 nov. 2005, 00:08

je vais te montrer la totalité de mon formulaire.php et je peux te rassurer il fonctionne tres bien :wink:
<?php
function formulaire($nom="",$email="",$sujet="",$destinataire="",$message="") {
}
if(!isset($nom)) { 
	formulaire();
}
else {
	$vnom=trim(htmlentities($_POST["nom"]));
	$vemail=trim(htmlentities($_POST["email"]));
	$vsujet=trim(htmlentities($_POST["sujet"]));
	if ($_POST["destinataire"]=="trotlolotte"){  
	$destinataire="[email protected]";
	}  
	elseif ($_POST["destinataire"]=="webmaster"){  
	$destinataire="[email protected]";
	} 
	else{
	echo"<body bgcolor=#FFD7EB text=#FF0000 font face=Verdana><p align=center><strong>Pas de Destinataire</strong><br /><em>Veuillez svp reculez d'une page (precedent) pour choisir un destinataire pour le message.</em></p></body>";
	}
	$vdestinataire=trim(htmlentities($_POST["destinataire"]));
	$vmessage=trim(htmlentities($_POST["message"]));
	$titre="Message venant du site de TrotLolotte";
	$message="Provenance : $HTTP_REFERER\n";
	$message.="Adresse IP : $REMOTE_ADDR,\n";
	$message.="Navigateur : $HTTP_USER_AGENT\n";
	$message.="nom : $vnom\n";
	$message.="email : $vemail\n";
	$message.="sujet : $vsujet\n";
	$message.="message : $vmessage\n";

	if (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-_.]?[0-9a-z])*\\.[a-z]{2,4}$",$vemail) && ($erreur<>1)){
	echo "<body bgcolor=#FFD7EB text=#FF0000 font face=Verdana><p align=center><strong>L'adresse Email n'est pas correcte</strong><br /><em>Veuillez svp reculez d'une page (precedent) pour entrez une adresse email correcte.</em></p></body>";
	$erreur=1;
	}
	if (empty($vnom) || empty($vemail) || empty($vsujet) || empty($vdestinataire) || empty($vmessage)) {
	echo "<body bgcolor=#FFD7EB text=#640032 font face=Verdana><p align=center><strong>Vous n avez pas complété toutes les zones</strong><br /><em>Veuillez svp reculez d'une page (precedent) pour finir de completer le formulaire de contact.</em></p></body>";
	$erreur=1;
	}
	if ($erreur==1) {
	formulaire($nom,$email,$sujet,$destinataire,$message);
	}
	else {
	mail($destinataire,$titre,$message,"From: $vemail");
	$message="<body bgcolor=#FFD7EB text=#640032 font face=Verdana>
	<p><strong>Félicitations votre message :</strong></p>
	<dl><dt><em>Nom</em> : <span>" . $vnom. "</span></dt>
	<dt><em>Email</em> : <span>" . $vemail. "</span></dt>
	<dt><em>Sujet</em> : <span>" . $vsujet. "</span></dt>
	<dt><em>Message</em> : <span>" . $vmessage. "</span></dt></dl>
	<p><strong>a bien été envoyé à :</strong> <span>" . $vdestinataire. "</span></p>
	<p>Nous vous remercions et nous essayerons de répondre dans les plus brefs délais.</p>
	<p> | <a href=\"index.html\" title=\"Retour à la page d Accueil\">Retour à la page d'Accueil</a> | <a href=\"contacts.html\" title=\"Retour à la page des Contacts\">Retour à la page des Contacts</a> | </p></body>";
   echo$message;
   }
} 
?>

par Truc » 03 nov. 2005, 00:03

ben tu utilise $message ici:
mail($destinataire,$titre,$message,"From: $vemail");
MAIS tu ne définit son contenu que la ligne en dessous !

tu va avoir une belle erreur si tu ne l'a pas initialisée et dans le cas contraire (initialisation ok) tu ne va pas avoir le bon message dans ton mail :wink:

par webphn » 03 nov. 2005, 00:03

voila tout est en ordre Merci beaucoup ^^
	else {
	mail($destinataire,$titre,$message,"From: $vemail");
	$message="<body bgcolor=#FFD7EB text=#640032 font face=Verdana>
	<p><strong>Félicitations votre message :</strong></p>
	<dl><dt><em>Nom</em> : <span>" . $vnom. "</span></dt>
	<dt><em>Email</em> : <span>" . $vemail. "</span></dt>
	<dt><em>Sujet</em> : <span>" . $vsujet. "</span></dt>
	<dt><em>Message</em> : <span>" . $vmessage. "</span></dt></dl>
	<p><strong>a bien été envoyé à :</strong> <span>" . $vdestinataire. "</span></p>
	<p>Nous vous remercions et nous essayerons de répondre dans les plus brefs délais.</p>
	<p> | <a href=\"index.html\" title=\"Retour à la page d Accueil\">Retour à la page d'Accueil</a> | <a href=\"contacts.html\" title=\"Retour à la page des Contacts\">Retour à la page des Contacts</a> | </p></body>";
   echo$message;
   }

par webphn » 03 nov. 2005, 00:00

Grace à toi ^^ merci

par contre les variables j'ai pas encore gratté ni dans le PHP d'ailleurs meme si j'ai une jolie bibliotheque qui n'attend que cela ;) bientot la j'en suis au HTML / CSS ;)

Sinon c'est vraiment pas malin ? mais pourquoi ?

par Truc » 02 nov. 2005, 23:49

c'est les pipes ???
:| euh .. oui oui si tu le dis.... pipes ?!

en tous cas tu as trouvé le probleme de guillemets.

Mais c'est pas bien malin de définir la variable $message apres vouloir l'utiliser dans la fonction mail() :wink:

par webphn » 02 nov. 2005, 23:43

lol non je ne la vois pas :shock: celui la fonctionne ^^
	else {
	mail($destinataire,$titre,$message,"From: $vemail");
	$message="<body bgcolor=#FFD7EB text=#640032 font face=Verdana>
	<p><strong>Félicitations votre message :</strong></p>
	<dl><dt><em>Nom</em> : <span>" . $vnom. "</span></dt>
	<dt><em>Email</em> : <span>" . $vemail. "</span></dt>
	<dt><em>Sujet</em> : <span>" . $vsujet. "</span></dt>
	<dt><em>Message</em> : <span>" . $vmessage. "</span></dt></dl>
	<p><strong>a bien été envoyé à :</strong> <span>" . $vdestinataire. "</span></p>
	<p>Nous vous remercions et nous essayerons de répondre dans les plus brefs délais.</p>
	<p><a href=\"index.html\">Retour à la page d'Accueil</a></p></body>";
	echo$message;
	}
oui tres bien ce bouton PHP :) merci

c'est les pipes ???
<p> | <a href="index.html" title="Retour à la page d Accueil">Retour à la page d'Accueil</a> | <a href="contacts.html" title="Retour à la page des Contacts">Retour à la page des Contacts</a> | </p>

par Truc » 02 nov. 2005, 23:41

Salut si tu utilsais le bouton "PHP" au lieu de "code" pour le php tu verai ton erreur rapidement
else {
   mail($destinataire,$titre,$message,"From: $vemail");
   $message="<body bgcolor=#FFD7EB text=#640032 font face=Verdana>
   <p><strong>Félicitations votre message :</strong></p>
   <dl><dt><em>Nom</em> : <span>" . $vnom. "</span></dt>
   <dt><em>Email</em> : <span>" . $vemail. "</span></dt>
   <dt><em>Sujet</em> : <span>" . $vsujet. "</span></dt>
   <dt><em>Message</em> : <span>" . $vmessage. "</span></dt></dl>
   <p><strong>a bien été envoyé à :</strong> <span>" . $vdestinataire. "</span></p>
   <p>Nous vous remercions et nous essayerons de répondre dans les plus brefs délais.</p>
   <p> | <a href="index.html" title="Retour à la page d Accueil">Retour à la page d'Accueil</a> | <a href="contacts.html" title="Retour à la page des Contacts">Retour à la page des Contacts</a> | </p></body>";
   echo$message;
   }
oui tu vois l'erreur ? :wink:

par webphn » 02 nov. 2005, 23:39

en faites mon fichier s'appel formulaire.php et commence par <?php mais je me demande s'il est possible et utile d'y mettre les balises HTML ?
html head /head body /body /html

Je vais tenter de faire des recherche sur les headers, merci charabia ^^

par webphn » 02 nov. 2005, 23:37

en faites mon fichier s'appel formulaire.php et je me demande s'il est possible et utile d'y mettre les balises HTML ?
html head /head body /body /html

Je vais tenter de faire des recherche sur les headers, merci charabia ^^

par charabia » 02 nov. 2005, 23:34

Un header dans ton cas est bienvenu, mais je ne pense pas qu'il y ait un laps de temps que tu peux contrôler avant redirection... :?

par webphn » 02 nov. 2005, 23:30

tout fonctionne si j'enleve cette partie :

Code : Tout sélectionner

<p> | <a href="index.html" title="Retour à la page d Accueil">Retour à la page d'Accueil</a> | <a href="contacts.html" title="Retour à la page des Contacts">Retour à la page des Contacts</a> | </p>
Qu'entends-tu par tout fonctionne ? La redirection marche sans le <p> ?
non pas de redirection mais j'avais avec ce bout de code un lien vers la page d'accueil alors que sans cela une fois le message bien envoyé on se retrouve devant un message sans possibilité de retourner directement a la page d'accueil :/

je pense que c'est un probleme de syntaxe PHP dans cette partie mais je suis trop nul pour la trouver :/

Code : Tout sélectionner

<p> | <a href="index.html" title="Retour à la page d Accueil">Retour à la page d'Accueil</a> | <a href="contacts.html" title="Retour à la page des Contacts">Retour à la page des Contacts</a> | </p>

par charabia » 02 nov. 2005, 23:28

tout fonctionne si j'enleve cette partie :

Code : Tout sélectionner

<p> | <a href="index.html" title="Retour à la page d Accueil">Retour à la page d'Accueil</a> | <a href="contacts.html" title="Retour à la page des Contacts">Retour à la page des Contacts</a> | </p>
Qu'entends-tu par tout fonctionne ? La redirection marche sans le <p> ?