Problème de script PHP

Fermé
End-y Messages postés 2 Date d'inscription mardi 13 septembre 2011 Statut Membre Dernière intervention 14 septembre 2011 - 13 sept. 2011 à 19:01
 Utilisateur anonyme - 16 sept. 2011 à 07:59
Bonjour,

Alors voilà, après avoir lu de multiples et multiples tuto et parcouru de multiples et multiples forums, j'ai toujours un problème avec mon script php..
Je ne sais pas quel est le problème, mais après avoir cliqué sur "envoyer" dans mon formulaire de contact, il ne se passe rien..
J'implore donc votre aide ; voici mon script :

<?php
	if(!empty($_POST['nom']) && !empty($_POST['adresse']) && !empty($_POST['code_postal']) && !empty($_POST['ville']) && 
		!empty($_POST['num_tel']) && !empty($_POST['email']) && !empty($_POST['objet']) && !empty($_POST['nombre']) && 
		!empty($_POST['taille']) && !empty($_POST['prix']) && !empty($_POST['couleurs']) && !empty($_POST['remarque']))
    extract($_POST);
{
    /* Récupération des valeurs des champs du formulaire */
    if (get_magic_quotes_gpc())
    {
      $nom				= stripslashes(trim($_POST['nom']));
      $adresse	     	= stripslashes(trim($_POST['adresse']));
      $code_postal		= stripslashes(trim($_POST['code_postal']));
      $ville			= stripslashes(trim($_POST['ville']));
      $num_tel			= stripslashes(trim($_POST['num_tel']));
	  $email			= stripslashes(trim($_POST['email']));
      $objet			= stripslashes(trim($_POST['objet']));
	  $nombre			= stripslashes(trim($_POST['nombre']));
      $taille			= stripslashes(trim($_POST['taille']));
	  $prix				= stripslashes(trim($_POST['prix']));
      $couleurs			= stripslashes(trim($_POST['couleurs']));
      $remarque			= stripslashes(trim($_POST['remarque']));
    }
    
    /* On vérifie que tous les champs sont remplis */
    elseif (empty($nom)
           || empty($adresse)
           || empty($code_postal)
           || empty($ville)
		   || empty($num_tel)
           || empty($email)
		   || empty($objet)
		   || empty($nombre)
           || empty($taille)
           || empty($prix))
    {
      $echo = 'Veuillez remplir les champs indiqués d\'un *.';
    }
    /* On vérifie que le format de l'e-mail est correct */
    elseif (!preg_match($regex_mail, $email))
    {
      $echo = 'Adresse e-mail non valide.';
    }
    /* On vérifie qu'il n'y a aucun header dans les champs */
    elseif (preg_match($regex_head, $nom) 
            || preg_match($regex_head, $adresse) 
            || preg_match($regex_head, $code_postal)
			|| preg_match($regex_head, $ville) 
            || preg_match($regex_head, $num_tel)
			|| preg_match($regex_head, $email) 
            || preg_match($regex_head, $objet)
			|| preg_match($regex_head, $nombre)
			|| preg_match($regex_head, $taille) 
            || preg_match($regex_head, $prix)
			|| preg_match($regex_head, $couleurs) 
			|| preg_match($regex_head, $remarque))
    {
        $echo = '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'email */
    elseif (!isset($_COOKIE['sent']))
    {
        /* Destinataire */
        $to = 'seewald.andy@gmail.com';
      
        /* Construction du message */
        $msg .= 'Nouvelle commande !'."\r\n\r\n";
        $msg .= 'Nom :'.$nom.' '."\r\n";
        $msg .= 'Adresse :'.$adresse.' ."\r\n" '.$code_postal.' ."\r\n" '.$ville.''."\r\n";
        $msg .= 'Numéro :'.$num_tel.''."\r\n"; 'E-mail :'.$email.''."\r\n\r\n";
		
        $msg .= 'Objet :'.$objet.''."\r\n";
		$msg .= 'Qté :'.$nombre.''."\r\n";
		$msg .= 'Taille :'.$taille.''."\r\n";
		$msg .= 'Prix :'.$prix.''."\r\n";
		$msg .= 'Couleurs :'."\r\n";
		$msg .= '$couleurs';
        $msg .= 'Remarque/personnalisation :'.$remarque.''."\r\n";
        
        /* En-tête de l'email */
        $headers = 'From: '.$email.''."\r\n\r\n";
    }
	else
    {
      $nom				= trim($_POST['nom']);
      $adresse	     	= trim($_POST['adresse']);
      $code_postal		= trim($_POST['code_postal']);
      $ville			= trim($_POST['ville']);
      $num_tel			= trim($_POST['num_tel']);
	  $email			= trim($_POST['email']);
      $objet			= trim($_POST['objet']);
	  $nombre			= trim($_POST['nombre']);
      $taille			= trim($_POST['taille']);
	  $prix				= trim($_POST['prix']);
      $couleurs			= trim($_POST['couleurs']);
      $remarque			= trim($_POST['remarque']);
    }
	
	/* 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]/';
	
        /* Envoi de l'email */
        if(mail($to, $msg, $headers))
        {
            $echo = 'Merci. Votre commande a bien été prise en compte.';
            
            /* 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
        {
            $echo = 'Erreur. Message non envoyé.';
        }

}
?>


Je suis vraiment désolé de la présentation de mon script :s
Je ne sais pas comment le joindre en couleurs avec les num des lignes, etc...

Si ça peut vous aider, voici mon site qui est déjà en ligne : http://www.objets-decobois.com
Allez dans l'onglet "Commande" dans le premier menu de gauche et comme je le disais avant, en cliquant sur "Envoyer" : page blanche :s

Voilà, je vous remercie d'avance pour votre aide,
End-y
A voir également:

5 réponses

Utilisateur anonyme
14 sept. 2011 à 08:47
Bonjour,

Premier jet, j'ai copié le code et l'ai exécuté, sans rien poster.

Trois message d'erreurs :

Notice: Undefined variable: to in F:\EasyPHP-5.3.6.1\www\test\test.php on line 107

Notice: Undefined variable: msg in F:\EasyPHP-5.3.6.1\www\test\test.php on line 107

Notice: Undefined variable: headers in F:\EasyPHP-5.3.6.1\www\test\test.php on line 107

Alors pour allez plus loin ce serait sympa d'avoir aussi le formulaire.

Cordialement
0
nickyaneo57 Messages postés 7 Date d'inscription vendredi 9 septembre 2011 Statut Membre Dernière intervention 16 septembre 2011 2
14 sept. 2011 à 09:09
bonjour ton script n'est pas très organisé. Tu refais plusieurs fois le même test (champs vides)
Pour le cookie je te conseille de le supprimer et de faire une redirection quand l'email est envoyé, ca te fera des tests en moins et donc du temps d'exécution serveur gagné.
Ton message d'erreur de champs vides ne s'affichera jamais car tu l'affiche dans la condition "if" si les champs sont remplis. Tu teste tes champs puis tu les reteste à l'intérieur de ce même test.
0
End-y Messages postés 2 Date d'inscription mardi 13 septembre 2011 Statut Membre Dernière intervention 14 septembre 2011
14 sept. 2011 à 16:25
Bonjour,

Merci pour vos réponse ! :)

@Neoprog67 : J'ai effectivement eu le même résultat en serveur local.. mais je ne sais pas comment y remédier...
Désolé ; voici mon formulaire.html (la partie qui nous intéresse) :

 <div id="corps">
			<div class="formulaire">
			<h2>Commande</h2>
			<h4>Bienvenue dans l'espace <em>commande</em> de ce site web. Remplissez ce formulaire et envoyez le moi, 
			je vous contacterai ensuite par téléphone ou par e-mail afin de confirmer votre commande, avant de définir une date à laquelle nous nous rencontrerons
			chez moi.</h4>
		<form name="commande" method="post" action="traitement.php">
			<fieldset>
					<legend>Vos coordonnées</legend>
				<label for="nom">Votre nom</label> * <input type="text" name="nom" id="nom" size="30" /><br /><br />
				<label for="adresse">Votre adresse</label> * <input type="text" name="adresse" id="adresse" size="50"/><br /><br />
				<label for="code_posal">Code postal</label> * <input type="text" name="code_postal" id="code_postal" size="4" maxlength="5" />
				<label for="ville">Ville</label> * <input type="text" name="ville" id="ville" size="30" /><br /><br />
				<label for="num_tel">Téléphone</label> * <input type="text" name="num_tel" id="num_tel" size="9" maxlength="10" />
				<label for="email">E-mail</label> * <input type="text" name="email" id="email" size="35" /><br />
				</fieldset><fieldset>
				
					<legend>Votre commande</legend>
				<label for="objet">Objet </label> * <input type="text" name="objet" id="objet" size="40" />
				<label for="nombre">Qté </label> * <input type="text" name="nombre" id="nombre" size="8" maxlength="2"/><br /><br />
				<label for="taille">Taille (cm)</label> * <input type="text" name="taille" id="taille" size="8" maxlength="3" />
				<label for="prix">Prix (EUR)</label> * <input type="text" name="prix" id="prix" size="8" maxlength="3" /><br /><br />
				<label for="couleurs">Couleurs </label> * <br /><input type="text" name="partie1" id="partie1" size="20" value="	partie de l'objet" onclick="if (value=='	partie de l\'objet'){value=''}; this.focus();"/> : 
						<input type="text" name="couleur1" id="couleur1" size="30" value="	couleur de cette partie" onclick="if (value=='	couleur de cette partie'){value=''}; this.focus();"/><br />
						<input type="text" name="partie2" id="partie2" size="20" /> : 
						<input type="text" name="couleur2" id="couleur2" size="30" /><br />
						<input type="text" name="partie3" id="partie3" size="20" /> : 
						<input type="text" name="couleur3" id="couleur3" size="30" /><br />
						<input type="text" name="partie4" id="partie4" size="20" /> : 
						<input type="text" name="couleur4" id="couleur4" size="30" /><br /><br />
				<label for="remarque">Avez-vous des remarques ou une personnalisation à apporter ?</label><br /><textarea name="remarque" id="remarque" rows="5" cols="50"></textarea><br />
			</fieldset>
				<p><em>Les champs indiqués d'un * sont obligatoires.</em><br /></p>
				<h5><input type="submit" value="Envoyer" /><input type="reset" value="Effacer"/></h5>
		</form>
			</div>
	   </div>


@nickyaneo57 : Merci pour tes remarques :)
J'ai supprimé mon cookie mais comment créer une redirection ?
Que dois-je encore modifier ??
0
Utilisateur anonyme
15 sept. 2011 à 10:29
Bonjour,

Merci pour le HTML.

Bon il faut totalement restructurer le PHP, ça ne va pas du tout.

En gros faire ceci étape par étape :

1- vérifier que le formulaire est bien poste, si ce n'est pas le cas, retour au formulaire, sinon étape 2

if (isset($_POST['nom']) {
// Etape 2
} else {
header('location:formulaire.html');
}


2 - Vérifier si tout les champs ont bien été postés

Alors je n'aime pas du tout le extract, je préfère travailler avec les $_POST directement, plus sûr...
if (empty[$_POST['nom'] || ...) {
echo 'Veuillez remplir les champs indiqués d\'un *.';
} else {
// etape 3
}


3 - vérifier la cohérence des champs
if (preg_match($regex_head, $nom) || ... ) {
echo 'En-têtes interdites dans les champs du formulaire.';
} else {
// etape 4
}


4 - fabrication du mail et envoi

Mais, si vous voulez que les messages s'affichent dans le formulaire, il va falloir fusionner votre PHP et HTML.

Je m'explique, la page php doit être la page qui affiche le formulaire, donc on reprend

1- vérifier que le formulaire est bien poste, si ce n'est pas le cas, retour au formulaire, sinon étape 2

$echo='';
if (isset($_POST['nom']) {
// Etape 2
} 
?>

code HTML de la page du formulaire avec quelque part dans cette page un
<span class="error"><?php echo $echo; ?></span>


2 - Vérifier si tout les champs ont bien été postés

if (empty[$_POST['nom'] || ...) {
$echo = 'Veuillez remplir les champs indiqués d\'un *.';
} else {
// etape 3
}


3 - vérifier la cohérence des champs
if (preg_match($regex_head, $nom) || ... ) {
$echo = 'En-têtes interdites dans les champs du formulaire.';
} else {
// etape 4
}


4 - fabrication du mail et envoi et redirection vers une nouvelle page PHP ou HTML
//envoi mail...
header('location:page.php');
exit;

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Oh merci ! :)
Ca marche nickel !! :D
Vous êtes géniaux !!

Une dernière chose (et puis j'arrête :p ) :
Savez vous comment faire en sorte qu'une petite fenêtre transparente apparaisse et dise : "Merci, bien envoyé" ou "tous les champs doivent être remplis" etc.. (je crois que c'est du javascript ^^' ) puis qu'elle disparaisse et que si le mail est envoyé, les internautes soient redirigés sur ma page d'accueil.

Merci bcp pour votre aide et bonne soirée :)
0
Utilisateur anonyme
16 sept. 2011 à 07:59
Une fenêtre transparente ?
Il faudrait utiliser une DIV qui s'affiche sur la page
regardez ce lien :
https://www.commentcamarche.net/faq/18953-creer-une-div-avec-transparence
0