8796 sujets

Développement web côté serveur, CMS

Bonjour à toi lecteur...

Essentiellement "webdesigner" e dois mettre en place un formulaire d'inscriptions en php
pour qu'il soit, après avoir été complété, envoyé sur plusieurs adresses mail...

Sauf que le php et moi sommes encore au début de notre relation, d'où pas mal d'incompréhensions !

Ce que doit obligatoirement renseigner le visiteur :
Prénom
Nom
Profession
Adresse
Code postal
Ville
Pays
Tel
Fax (pas obligatoire)
Email

Mon code merdeux :


<?php
$email_webmaster = "email1@trucmuch.com, email2@trucmuch.com, email3@trucmuch.com";

               if (isset($_POST["envoyer"])){
               $etat = "erreur";
		
		if (isset($_POST["prenom"])) {
                 $_POST["prenom"]=trim(stripslashes($_POST["prenom"]));
        }
		if (isset($_POST["nom"])) {
                 $_POST["nom"]=trim(stripslashes($_POST["nom"]));
        }
		if (isset($_POST["profession"])) {
                 $_POST["profession"]=trim(stripslashes($_POST["profession"]));
        }
		if (isset($_POST["adresse"])) {
                 $_POST["adresse"]=trim(stripslashes($_POST["adresse"]));
        }
		if (isset($_POST["codepostal"])) {
                 $_POST["codepostal"]=trim(stripslashes($_POST["codepostal"]));
        }
		if (isset($_POST["ville"])) {
                 $_POST["ville"]=trim(stripslashes($_POST["ville"]));
        }
                 if (isset($_POST["pays"])) {
                 $_POST["pays"]=trim(stripslashes($_POST["pays"]));
        }
		if (isset($_POST["phone"])) {
                 $_POST["phone"]=trim(stripslashes($_POST["phone"]));
        }
                 if (isset($_POST["fax"])) {
                 $_POST["fax"]=trim(stripslashes($_POST["fax"]));
        }
                 if (isset($_POST["email"])) {
                 $_POST["email"]=trim(stripslashes($_POST["email"]));
        }
		
        // --- test de la validité des champs ---
		if (empty($_POST["nom"])) {
		$erreur=TXT_erreur_nom; 
        }
		if (empty($_POST["prenom"])) {
                 $erreur=TXT_erreur_prenom; 
        }
		if (empty($_POST["profession"])) {
                 $erreur=TXT_erreur_profession; 
        }
		if (empty($_POST["adresse"])) {
                 $erreur=TXT_erreur_adresse; 
        }
        if (empty($_POST["codepostal"])) {
                 $erreur=TXT_erreur_codepostal; 
        }
		if (empty($_POST["ville"])) {
                 $erreur=TXT_erreur_ville; 
        }
		if (empty($_POST["pays"])) {
                 $erreur=TXT_erreur_pays; 
        }
		if (empty($_POST["phone"])) {
                 $erreur=TXT_erreur_phone; 
        }
		if (empty($_POST["email"])) {
                 $erreur=TXT_erreur_email; 
        }
        else if (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email"])){
		
                 $erreur=TXT_erreur_mailinvalide; 
        }
        else {
		
                 $etat="ok";
        }
}
		else {
		
           $etat="attente";
}
?>


Le code dans ma_page_inscriptions.php


	 <?php
if ($etat!="ok"){
// le formulaire n'a pas été soumis, ou soumis avec une erreur
        if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
        echo "<p><strong>".$erreur."</strong></p>\n";
// afficher le message d'erreur
         }
?>
		<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">  
		
        <p><label for="prenom">Prénom</label><br />
        <input type="text" size="40" name="prenom" id="prenom" value="<?php
        if (!empty($_POST["prenom"])) {
// le prenom de l'expéditeur a été saisie: le réafficher
                echo htmlspecialchars($_POST["prenom"],ENT_QUOTES);
        }
        ?>" />
        </p>
		
	
        <p><label for="nom">Nom :</label><br />
        <input type="text" size="40" name="nom" id="nom" value="<?php
        if (!empty($_POST["nom"])) {
// le pnom de l'expéditeur a été saisie: le réafficher
                echo htmlspecialchars($_POST["nom"],ENT_QUOTES);
        }
        ?>" />
        </p>
		
		
		
	<p><label for="profession">Profession :</label><br />
        <input type="text" size="40" name="profession" id="profession" value="<?php
        if (!empty($_POST["profession"])) {
// la profession de l'expéditeur a été saisie: le réafficher
                echo htmlspecialchars($_POST["profession"],ENT_QUOTES);
        }
        ?>" />
        </p>
		
	
		
        <p><label for="adresse">Adresse :</label><br />
        <textarea name="adresse" id="adresse" cols="40" rows="10"><?php
        if (isset($_POST["adresse"])) {
// le adresse a été saisi: le réafficher
                echo htmlspecialchars($_POST["adresse"],ENT_QUOTES);
        }
        ?></textarea>
        </p>
		

		<p><label for="codepostal">Code Postal :</label><br />
        <input type="text" size="40" name="codepostal" id="codepostal" value="<?php
        if (!empty($_POST["codepostal"])) {
// la codepostal de l'expéditeur a été saisie: le réafficher
                echo htmlspecialchars($_POST["codepostal"],ENT_QUOTES);
        }
        ?>" />
        </p>
		
		
		<p><label for="ville">Ville :</label><br />
        <input type="text" size="40" name="ville" id="ville" value="<?php
        if (!empty($_POST["ville"])) {
// la ville de l'expéditeur a été saisie: le réafficher
                echo htmlspecialchars($_POST["ville"],ENT_QUOTES);
        }
        ?>" />
        </p>
		
		
		<p>
		<label for="pays">Pays :</label><br />
		<select name="pays" id="pays">
		<?php include('inc/pays.inc.php');
        if (!empty($_POST["pays"])) {
		echo htmlspecialchars($_POST["pays"],ENT_QUOTES);
        }
        ?></select>

        </p>
		
		
		<p><label for="phone">Tel :</label><br />
        <input type="text" size="40" name="phone" id="phone" value="<?php
        if (!empty($_POST["phone"])) {
// la phone de l'expéditeur a été saisie: le réafficher
                echo htmlspecialchars($_POST["phone"],ENT_QUOTES);
        }
        ?>" />
        </p>
		
		
		<p><label for="email">Email</label><br />
        <input type="text" size="40" name="email" id="email" value="<?php
        if (!empty($_POST["email"])) {
// la email de l'expéditeur a été saisie: le réafficher
                echo htmlspecialchars($_POST["email"],ENT_QUOTES);
        }
        ?>" />
        </p>
		
		<p><label for="fax">Fax</label><br />
		<input type="text" name="fax" id="fax" />
        </p>
		
		
		
        <p><input type="submit" name="envoyer" value="<?php echo TXT_Envoi; ?>" />
        </p>
        </form>
<?php
}
else {
// le formulaire a été soumis sans erreur, on envoie le email
				$entete = "From: ".$_POST["email"]." <".$_POST["email"].">\n"; 
				$entete .= "MIME-Version: 1.0";				
				$msg = 
				'Prénom :'.$_POST["prenom"]."\n".
				'Nom :'.$_POST["nom"]."\n".
				'Profession :'.$_POST["profession"]."\n".
				'Adresse :'.$_POST["adresse"]."\n".
				'Code Postal :'.$_POST["codepostal"]."\n".
				'Ville : '.$_POST["ville"]."\n".
				'Pays : '.$_POST["pays"]."\n".
				'Telephone : '.$_POST["phone"]."\n".
				'Fax : '.$_POST["fax"]."\n".
				'Email : '.$_POST["email"]."\n";
				if (@email($email_webmaster,$msg,$entete)){ 
					

// mail envoyé
                echo TXT_MessOK;
                echo TXT_NewMail;
        }
        else {
// erreur lors de l'envoi du mail
                echo 'Inscriptions-error.php';
                echo TXT_Retry;
        }
}

?>    


Ca doit être du grand n'importe quoi... je me mets au php sérieusement mais faute de temps pour
faire le boulot je viens vous solliciter...

Merci d'avance.

Samsam
Modifié par Samiaule (15 Oct 2009 - 15:02)
Modérateur
Hello,

a écrit :
Mon code merdeux : [...] Ca doit être du grand n'importe quoi [...]


Pas tant que ça...

J'ai lu vite fait ton code. Cela me parait correct. Cependant qu'est ce que :

* TXT_erreur_nom;
* TXT_erreur_prenom;
* TXT_erreur_adresse;
* etc.

Des constantes ? Si ce n'est pas le cas, ton soucis provient de là je pense.
Modifié par Nolem (14 Oct 2009 - 17:26)
Ha yes... merci d'être là !

"TXT_erreur_nom;" est là car c'est un site multilingue, çà appelle dans mes fichiers "fr-lang.php" ou "en-lang.php" etc... doc pas de pb de ce côté en principe. Si ça marche pas ce genre de truc, la page affiche direct un pb.

Mais au fait j'y pense, je l'ai pas testé online mon formulaire ! Smiley confus

Je vais quand même essayer, sait-on jamais, sous WAMP c'est pô toujours bien clean...

i'll be back !
pfff... nan, même en ligne çà marche pô...
ça me renvoie sur "ma_page_inscription.php" en bouffant tout ce qui se trouve au dessous du code du formulaire... il me reste le "header" avec le menu et un bout de la page ! Smiley lol

Faut peut-être que je me penche là-dessus ?
<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">  


Bref...toujours en rade...
Heyoan a écrit :
Salut,

j'ai un peu la flemme de regarder pourquoi ça ne fonctionne pas mais tu as un exemple récent dans ce post.


et je te comprends...

Merci pour le lien, je vais aller tester et voir comment je peux adapter.

@+
Modérateur
Samiaule a écrit :

...
if (@email($email_webmaster,$msg,$entete)){
...


En relisant un tout petit peu mieux ton code, je crois avoir mis le point sur ton soucis (@ ...). Ce qui a pour effet de masquer l'erreur d'appel de la fonction inconnue (fatal error) et l'arrêt du script.

++

Au passage et de mémoire, il faut paramétrer ton WAMP pour un envoi en local (php.ini). (cf. google : wamp smtp mail)
Modifié par Nolem (14 Oct 2009 - 21:23)
Nolem a écrit :

Au passage et de mémoire, il faut paramétrer ton WAMP pour un envoi en local (php.ini). (cf. google : wamp smtp mail)


Merci Nolem, mon php.ini est bien configuré, et de toute façon çà ne marche pas en ligne non plus...

Smiley rolleyes

Bref... je continue d'essayer.
@+
Salut.

As tu essayé ta fonction mail sans entête ? En parcourant rapidement ton code, rien ne m'a sauté aux yeux, et a priori tu n'as pas de message d'erreur, donc comme nolem, je pense que le problème vient de la fonction mail.

Vérifie aussi avec un phpinfo() que cette fonction est acceptée car ce n'est pas le cas partout.
MattBPA a écrit :
Salut.

As tu essayé ta fonction mail sans entête ?


Yep merci MattBPA,
Concretement ça signifie quoi ?
que je modifie çà :


$entete = "From: ".$_POST["email"]." <".$_POST["email"].">\n";  
$entete .= "MIME-Version: 1.0"; 
Oui, en gros tu mets ces deux lignes en commentaire et tu changes ta fonction mail en

if (@email($email_webmaster,$msg)){  


Ca ne pourra pas être la version définitive car à l'envoi du mail, l'adresse de l'expéditeur sera bidon, mais ça permet déjà de cibler le problème.
Modifié par MattBPA (15 Oct 2009 - 11:47)
if (@email($email_webmaster,$msg)){ 

Heu... c'est la fonction mail() et non email() qui permet d'envoyer un mail en PHP à ce que je sache Smiley rolleyes

D'ailleurs il me semble que c'est ce que signalait Nolem en parlant du @ devant la fonction qui masque l'erreur retournée par PHP.
>< tellement évident qu'on passe à coté...

Oui en effet avec mail() ça marchera beaucoup mieux.
moust a écrit :
if (@email($email_webmaster,$msg)){ 

Heu... c'est la fonction mail() et non email() qui permet d'envoyer un mail en PHP à ce que je sache Smiley rolleyes

D'ailleurs il me semble que c'est ce que signalait Nolem en parlant du @ devant la fonction qui masque l'erreur retournée par PHP.


naaannnnn !!! ça roule !!!
Smiley biggol

Donc mon code retapé était pas si foireux!

Merci mais alors en GRAND !!!
Modérateur
Hello,

Si tu considères que ce sujet est résolu, je t'invite à rééditer ton premier message et saisir entre crochets résolu.

Bonne journée à toi
Modifié par Nolem (15 Oct 2009 - 14:42)