8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Etant débutant en PHP, je me suis inspiré d'un code existant pour créer mon propre formulaire.
Seulement je cherche depuis un bon moment mais ne trouve pas ce qui bug dans mon code.
Si quelqu'un pouvait m'indiquer mon erreur et m'expliquer pourquoi...
Le voilà :

<?php

$erreur = NULL;
$info = NULL;

if(!empty($_POST['Capacite'])
	and !empty($_POST['nom'])
	and !empty($_POST['train'])
	and !empty($_POST['dimension'])
	and !empty($_POST['frein'])
	and !empty($_POST['attelage'])
	and !empty($_POST['porte'])
	 ) {
	
	if( $_POST['mail']) {
	$pseudo = htmlspecialchars(addslashes($Capacite));
	$nom = htmlspecialchars(addslashes($nom));
	$prenom = htmlspecialchars(addslashes($train));
	$dimension = htmlspecialchars(addslashes($dimension));
	$frein = htmlspecialchars(addslashes($frein));
	$attelage = htmlspecialchars(addslashes($attelage));
	$destinataire="blabla@blabla.fr";
	$sujet = "Formulaire de contact";
	$messagecomplet="Contact en ligne
	Capacite: $Capacite     
	Train: $train       
	Nom: $nom
	Dimension: $dimension
	Frein: $frein
	Attelage: $attelage
	Porte: $porte
	";
	$info ="Votre e-mail à été envoyé";
	}
	
} else { $erreur = "Veuillez remplir tous les champs obligatoires *"; }


?>




<!DOCTYPE HTML>
<html lang="fr">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Reprise Bennes</title>
<link rel="stylesheet" media="screen" type="text/css" href="style.css"/>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="js/lightbox.js"></script>
<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />

</head>

<body>


<div id="content">

	<div id="gauche">
  	 <form method="post" target="" id="formulaire_contact">
     <fieldset>
     <legend>Reprise Benne</legend>
     <label for="nom">Nom du Client*</label><input type="text" name="nom" id="nom" value="
	 <?php if(isset($_POST['nom'])) echo htmlspecialchars ($_POST['nom']);?>" /><br/>
     <label for="Capacite">Capacité*</label><input type="text" name="Capacite" id="Capacite" value="
	 <?php if(isset($_POST['Capacite'])) echo htmlspecialchars($_POST['Capacite']);?>    
     " />T<br/>
     <label for="train">Train roulant*</label><input type="text" name="train" id="train" value="
	 <?php if(isset($_POST['train'])) echo htmlspecialchars($_POST['train']);?>" /><br/> 
     <label for="dimension">Dimension des pneus*</label><input type="text" name="dimension" id="dimension" value="
	 <?php if(isset($_POST['dimension'])) echo htmlspecialchars($_POST['dimension']); ?>"/><br/>
     <label for="frein">Freins*</label><input type="text" name="frein" id="frein" value="
	 <?php if(isset($_POST['frein'])) echo htmlspecialchars($_POST['frein']); ?>"/><br/>
     <label for="attelage">Attelage*</label><input type="text" name="attelage" id="attelage" value="
	 <?php if(isset($_POST['attelage'])) echo htmlspecialchars($_POST['attelage']); ?>"/><br/>
     <label for="attelage">Porte AR*</label><input type="text" name="porte" id="porte" value="
	 <?php if(isset($_POST['porte'])) echo htmlspecialchars($_POST['porte']); ?>"/><br/>
     <label for="message">Commentaire</label><textarea name="message" id="message" value="<?php if(isset($_POST['message'])) echo htmlspecialchars($_POST['message']);?>" ></textarea>
     <br/>
     
     <input type="submit" value="Envoyer" /><span style="color:red;"><?php echo $erreur; ?></span><span style="color:green;"><?php echo $info;?></span>
     </fieldset>
     </form>
	</div>
    
    

       
    
</div>

</body>
</html>


Merci d'avance,

Cordialement,
Modifié par Regisnoop (24 Mar 2015 - 16:48)
Justement, il ne se passe rien quand je clique sur envoyer.
Normalement il devrait s'afficher : Votre e-mail a été envoyé.

Je pense que ça vient de cette ligne :
if( $_POST['mail'])  


J'ai remplacer la variable 'mail', par la variable porte, et la: Votre e-mail a été envoyé!

Sauf qu'il n'est jamais arrivé a destination... J'ai revérifié mon adresse mail dans le code, et elle correspond bien...Je ne sais pas d'ou vient l'erreur

Merci pour votre aide,
Modifié par Regisnoop (25 Mar 2015 - 09:01)
salut,
c'est normal que tu ne reçoives rien vu que tu n'envoies rien !

Pour ton premier problème, $_POST["mail"] ne fait référence à rien là où $_POST["porte"] fait référence à un input bien réel et présent. Cela dit, si je remplis tous les autres input et que je laisse celui-ci vide, puis j'envoie ton formulaire, il ne sera pas considéré comme étant envoyé. Donc pour ne pas s'amuser à tester au hasard un input, on donne un nom à l'input de type="submit", puis on effectue le test sur celui-ci (ne pas donner de name="submit").

Pour envoyer un email en PHP on utilise la fonction mail.
On peut en même temps effectuer une condition sur cette fonction pour vérifier que l'email a bien été envoyé :

if (mail($destinataire, $sujet, $messagecomplet)) {
   echo $info;
}else {
   echo "Votre e-mail n'a pas été envoyé !"
}
Merci beaucoup pour ton aide Zelalsan!

J'arrive maintenant à m'envoyer l'email (et je le reçois).
Problème suivant Smiley decu
Dans mon e-mail je ne reçois pas ce qui à été remplis dans les input.
upload/58104-probleme.jpg

Il doit donc y avoir un problème là
$messagecomplet="Contact en ligne
	Nom client: $cli  
	Capacité: $capacite     
	Nom: $nom'
	E-mail: $mail
	Train roulant: $train
	Message:$message
	";


Hélas je ne sais pas ou Smiley confus

Je vous remet mon nouveau code
<?php

$erreur = NULL;
$info = NULL;

if(!empty($_POST['cli'])
	and !empty($_POST['nom'])
	and !empty($_POST['capacite'])
	and !empty($_POST['mail'])
	and !empty($_POST['message'])
	and !empty($_POST['train'])
	
	 ) {
	
	if( preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail'])) {
	$cli = htmlspecialchars(addslashes($cli));
	$nom = htmlspecialchars(addslashes($nom));
	$capacite = htmlspecialchars(addslashes($capacite));
	$mail = htmlspecialchars(addslashes($mail));
	$message = htmlspecialchars(addslashes($message));	
	$destinataire="exemple@exemple.fr";
	$sujet = "Formulaire de contact";
	$messagecomplet="Contact en ligne
	Nom client: $cli  
	Capacité: $capacite     
	Nom: $nom'
	E-mail: $mail
	Train roulant: $train
	Message:$message
	";
	mail($destinataire, $sujet, $messagecomplet, "From: $mail\n\r");
	$info ="Votre e-mail à été envoyé";
	}
	else {
	$erreur="adresse E-mail invalide*";
	}
} else { $erreur = "Veuillez remplir tous les champs obligatoires *"; }


?>




<!DOCTYPE HTML>
<html lang="fr">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Reprise</title>
<link rel="stylesheet" media="screen" type="text/css" href="style.css"/>
</head>

<body>


<div id="content">

	<div id="gauche">
  	 <form method="post" target="" id="formulaire_contact">
     <fieldset>
     <legend>Reprise</legend>
     
     
     
     <label for="nom">Nom commercial*</label><input type="text" name="nom" id="nom" value="
	 <?php if(isset($_POST['nom'])) echo htmlspecialchars ($_POST['nom']);?>" /><br/>
     
     <label for="mail">Ton E-mail*</label><input type="text" name="mail" id="mail" value="
	 <?php if(isset($_POST['mail'])) echo htmlspecialchars($_POST['mail']); ?>"/><br/>
     
     <label for="cli">Nom client*</label><input type="text" name="cli" id="cli" value="
	 <?php if(isset($_POST['cli'])) echo htmlspecialchars($_POST['cli']);?>    
     " /><br/>
     
     <label for="capacite">Capacité*</label><input type="text" name="capacite" id="capacite" value="
	 <?php if(isset($_POST['capacite'])) echo htmlspecialchars($_POST['capacite']);?>" /><br/> 
     
          
     <label for="train">Train roulant*</label><input type="text" name="train" id="train" value="
	 <?php if(isset($_POST['train'])) echo htmlspecialchars($_POST['train']);?>"/><br/>
     
     <label for="message">Votre message*</label><textarea name="message" id="message" value="<?php if(isset($_POST['message'])) echo htmlspecialchars($_POST['message']);?>" ></textarea>
     <br/>
     
     <input type="submit" value="Envoyer" /><span style="color:red;"><?php echo $erreur; ?></span><span style="color:green;"><?php echo $info;?></span>
     </fieldset>
     </form>
	</div>
    
    


</body>
</html>
Il faudrait revoir un minimum ton code avant de poster une question sur le forum. Encore une fois, tu es entrain d'envoyer des variables vides ! Il faut affecter quelques chose aux variables que tu envoies dans le message !
Désolé mais comme je l'ai indiqué, je suis vraiment débutant (ce sont vraiment mes premières lignes de PHP). Cela ne me semble pas aussi logique et facile qu'a toi... Je me suis déjà arraché pas mal de cheveux .

Lorsque j'oublie ou remplit mal une case (input), le mail ne part pas et le message d'erreur s'affiche bien. Donc pourquoi lorsque le formulaire est bien remplit et que l'email est bien partit, les réponses ne se trouve pas dans celui-ci?

Qu'entends tu par "envoyer des variables vides" ? Si je remplie toutes mes cases, mes variables ne devraient plus "être vides".
Donc en se posant la bonne question, si les valeurs de tes inputs doivent être récupérées dans des variables et en sachant que ces valeurs d'input se récupèrent via un $_POST["..."], à quel moment tu le fais dans ton code ?
Youhou ça fonctionne

Je viens de comprendre l'utilité du $_POST...
Nom client: $_POST[cli]


Merci Zelalsan Smiley biggrin Smiley biggrin

Me reste plus qu'à trouver pourquoi j'ai des espaces au début de mes input.

Quel encodage recommande tu? UTF 8?
- n'utilises pas des fonctions sans savoir à quoi elles servent. addslashes, typiquement
- $_POST est généralement mis de coté au profit de $_REQUEST
- UTF8 n'est pas recommandé; il est obligatoire en 2015 sur le web. Le mot peut sembler fort, mais ça fait plus de 10 ans que ça traîne.
- n'inclue pas tes variables en bourrin dans des double-quotes comme ça. Concatène. Tu verras, certaines choses seront bien plus simples.