8792 sujets

Développement web côté serveur, CMS

Bonjour,
Je suis entrain de faire un mailer en php.
Pour les gens qui connaissent le php, c'est relativement simple, mais mes connaissances dans le domaine sont plus que limitées ^^ Je me heurte donc souvent à des problèmes qui me compliquent pas mal la vie, il me faut en général deux à trois heures pour trouver la solution, alors que si quelqu'un dans mon entourage connaissait bien le php, ça ne prendrait que 10 minutes.
C'est là que m'est venue l'idée de demander sur alsacreations Smiley biggrin Je compte donc poser mes questions ici. Si quelqu'un veut bien garder le topic à l'œil, c'est très sympa Smiley smile

Ce qui me bloque pour l'instant concerne la réponse du script. J'ai un mailer qui récupère les données, les vérifie et les envoie comme il faut. Si tout est ok, il redirige vers une page qui remercie. Mais si il y a un problème, il le notifie dans une page vierge. Le code correspondant :
if($message=='')
{
	echo "Il faut un message.";
	exit();
}

Je voudrais qu'il renvoie à la page du formulaire (sans effacer les champs si possible) et qu'il fasse deux choses :
- Le message d'erreur s'inscrit dans un endroit prévu pour.
- Un peu plus dur : le script ajoute class="form-erreur" au champ mal/non remplis.

Déjà merci d'avoir lu Smiley cligne

PS : J'oubliais, voici mon formulaire
Modifié par Whisno (30 Dec 2006 - 19:47)
Bonjour.

Dans l'état actuel, votre formulaire est .html et renvoi vers une page .php

Pour obtenir ce que vous désirez, il faudrait rendre le formulaire actif et faire pointer form action vers lui même.

Exemple de code "contact.php" (maquette)


<?php
   // içi, le code du mailer, en dur ou en include (mieux en include)
   include "mailer.php";
?>

<html>
<head><title>contact.php</title></head>

<body>
<div id="zone_reponse">
    <?php
    // içi, inclusion php dans html, réponse optionnelle en fonction de $_POST
        if (isset ($_POST["email"])
        {
            echo "Merci, merci..."
        }
    ?>

</div>


<form action="contact.php" method="post">
...
    <input name="email" />
    <input type="submit" />
</form


</body>

</html>
Merci de ta réponse.
J'ai fais comme tu as dit, mais ça me pose un problème : le php s'exécute directement.
Comment faire pour qu'il n'entre en action qu'à la validation du formulaire?
Il faut subordonner son exécution à la présence de données POST :


if (isset($_POST["nom_var"]))
{
   // içi du code
}
Merci, ça marche au poil maintenant Smiley smile
Il y a juste encore un problème avec la redirection vers une page qui dit que tout est ok. Elle se fait avec le code suivant :
if(le mail est pas parti)
{
   …
}
else
{
   header("Location: ../sent/sent.html");
}

Je reçois le message :
a écrit :
Warning: Cannot modify header information - headers already sent by (output started at /home.2/w/h/i/whisno/www/syn/contribuer/form_corr/form_corr.php:14) in /home.2/w/h/i/whisno/www/syn/contribuer/form_corr/form_corr.php on line 314

Ce n'est pas la première fois que j'y suis confronté, mais je n'ai toujours pas compris ^^
Ok, mais alors quelle fonction permet de le faire (redirection conditionnelle)?
Modifié par Whisno (30 Dec 2006 - 22:00)
Il faut utiliser la fonction php suivante :
redirect("<adresse>");
exemple : redirect("http://www.google.fr");
Cette fonction accepte un 2ème paramètre optionnel où il faut mettre le numéro d'entête de la page, mais là, vu que je ne l'utilise jamais, je renvoie à la doc php.
Whisno a écrit :
Je reçois le message :
Warning: Cannot modify header information - headers already sent by (output started at /home.2/w/h/i/whisno/www/syn/contribuer/form_corr/form_corr.php:14) in /home.2/w/h/i/whisno/www/syn/contribuer/form_corr/form_corr.php on line 314

Ce n'est pas la première fois que j'y suis confronté, mais je n'ai toujours pas compris ^^
Oh non Smiley lol A chaque fois que je vois cette erreur, une grande démotivation me remplis Smiley biggol A force de la voir sûrement.

C'est écrit : ligne 14 de form_corr.php, y'a quelque chose qui est affiché. Donc quelque chose est envoyé au client. Donc on ne peut logiquement plus toucher aux headers.


Je crois qu'il faudrait faire un tutorial "Faites un formulaire d'envoi de message en PHP", histoire de montrer comment faire ça bien...
FlorentG a écrit :
Je crois qu'il faudrait faire un tutorial "Faites un formulaire d'envoi de message en PHP", histoire de montrer comment faire ça bien...

+1, histoire que les noobs parviennent à quelque-chose Smiley lol

a écrit :
Il faut utiliser la fonction php suivante :
redirect("<adresse>");
exemple : redirect("http://www.google.fr");
Cette fonction accepte un 2ème paramètre optionnel où il faut mettre le numéro d'entête de la page, mais là, vu que je ne l'utilise jamais, je renvoie à la doc php.

Merci Smiley biggrin Je vais pouvoir nettoyer mon code.
Ray a écrit :
Il faut utiliser la fonction php suivante :
redirect("<adresse>");
exemple : redirect("http://www.google.fr");
Cette fonction accepte un 2ème paramètre optionnel où il faut mettre le numéro d'entête de la page, mais là, vu que je ne l'utilise jamais, je renvoie à la doc php.


Smiley eek
Jamais entendu parlé de cette fonction...D'ailleurs je ne la trouve pas dans la doc de www.php.net
En .NET la fonction response.redirect existe mais en php j'ai des doutes...

t'es sur de ton coup ? t'as pas un petit lien ?
Modifié par Zeke (16 Jan 2007 - 08:53)