8797 sujets

Développement web côté serveur, CMS

Pages :
Bonjour.
Voila, je débute en php et je dois faire un formulaire qui permette de contacter soit la boîte pour laquelle je fais le site (je suis stagiaire là-bas) sois contacter le webmaster (autrement-dit moi).
pour la partie html, cela donne :

	<div style="margin-top:100px;" align=center>

	<form method="post" action="mail.php">
	
    
	<p>
	
		<table>
		
			<tr><td>Contacter:</td>
			<td><select name="choix">
					<option value="choix1">Entreprise</option>
					<option value="choix2">Webmaster</option>
				</select>
			</td></tr>
			<tr><td>Nom:</td>
			<td><input type=text name="nom" size=30></td></tr>
			<tr><td>Email:</td>
			<td><input type=text name="mail" size=30></td></tr>
			<tr><td>Objet:</td>
			<td><input type=text name="objet" size=30></td></tr>
			<tr><td colspan=2>Message:<br>
			<textarea cols=50 rows=8 name="message"></textarea>
			</td></tr>
		</table>
	
	
	</p>
	
				<input type=submit value=Envoyer>&nbsp;<input type=reset value=Annuler>
				<p>Tous les champs sont obligatoires</p>

 
	</form>

	</div>



et pour le php :
<?php 
$nom=$HTTP_POST_VARS['nom']; 
$mail=$HTTP_POST_VARS['mail']; 
$objet=$HTTP_POST_VARS['objet']; 
$message=$HTTP_POST_VARS['message']; 
$choix=$HTTP_POST_VARS['choix']; 



$headers = "MIME-Version: 1.0\r\n"; 

////// mail en format text 
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 

////expediteur et adresse de réponse 
$headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer [langue]HP"; 

$subject="$objet"; 
$body="$message"; 
if (mail($choix="choix1",$subject,$body,$headers)) { 
 $destinataire="yyyy@fai.com";
 echo "Votre mail a  bien été envoyé<br>"; 
 }
 else if (mail($choix="choix2",$subject,$body,$headers)) {
 $destinataire="xxx@fai.com";
 echo "Votre mail a  bien été envoyé<br>"; 
 
 }
 else { 
echo "Une erreur est survenue"; 
 } 
?></p>
<p align="center">Vous allez bientot etre redirigé vers la page d'acceuil<br>
Si vous n'etes pas redirigé au bout de 5 secondes cliquez <a href="http://www.entreprise.fr">ici 
</a></p>


Le problème c'est que ne sais pas si mon code php fonctionne.
Si quelqu'un pouvait me dire si il est juste ou faux (et dans ce cas me dire où sont les erreurs)...Merci d'avance
Modifié par Rand (29 Jul 2008 - 12:17)
Salut Rand,

Je suis aussi débutant en PHP donc je ne sais pas si mes conceils seront très bon mais dans ton code php, la fonction mail me semble étrange.
Ce que j'ai peu voir sur les différents sites (site du zero,...)
ressemble en général à :

if (@ mail($adress, $sujet, $mess, $entete)){...}


la variable mess étant une "compile" de tous ce que tu veux afficher dans le mail que tu recevras.
Je viens d'afficher mon topic résolu. Peut être y trouvera tu des réponses...

Autre truc que je ne comprend pas, ou intégre tu ton php?

Bon courage.
++
Modifié par Dim (14 Jul 2008 - 20:26)
<citation>Le problème c'est que ne sais pas si mon code php fonctionne.</citation>

Ben essaie, tu verras bien. ET si ça marche pas et que tu ne sais pas pourquoi, tu reviens ici et tu postes le message d'erreur pour qu'on puisse t'aider. Personne ne va s'amuser à lire ton code HTML et ton code PHP pour te dire sans avoir testé s'il y a quelque chose qui cloche ou pas.
Pour l'instant le site n'est pas hébergé (sur mon pc donc) et c'est la première fois que je code du php, c'est pour ça que je posais cette question...
Bonjour Rand et bienvenue Smiley smile ,
Rand a écrit :
Pour l'instant le site n'est pas hébergé (sur mon pc donc) et c'est la première fois que je code du php, c'est pour ça que je posais cette question...
A priori on doit pouvoir envoyer des mails avec Wamp ou EasyPhP : il faudrait chercher quelques tutos à ce sujet.

Sinon, en attendant d'avoir un vrai hébergement, tu peux toujours en choisir un gratuit (genre free) pour effectuer tes tests Smiley cligne .

Tu peux faire du debug en affichant les variables avant de les utiliser avec par exemple echo, print_r ou vardump.

Et enfin, à priori il faudrait plutôt faire :
<?php
if ($choix == "choix1") { 
	$destinataire="yyyy@fai.com";
} else {
	$destinataire="xxx@fai.com";
}

if (@mail($destinataire, $subject, $body, $headers)) { 
	echo "Votre mail a  bien été envoyé<br>"; 
} else { 
	echo "Une erreur est survenue"; 
}
?>

Pour débuter, tu pourrais faire un tour sur le Site du Zero ou sur phpdebutant

Et je suppose que tu ne vas pas avoir le temps de t'en occuper mais tu pourrais rendre ton formulaire plus accessible par exemple en rajoutant des id à tes éléments et une balise <label> associée Smiley murf !

A+
Modifié par Heyoan (16 Jul 2008 - 16:18)
Modérateur
Salut,

Heyoan a écrit :

A priori on doit pouvoir envoyer des mails avec Wamp ou EasyPhP : il faudrait chercher quelques tutos à ce sujet.


Exact, il faut simplement reconfigurer le php.ini qui se trouve dans le répertoire apache.

De mémoire, il faut remplacer les deux lignes suivantes :
smtp :localhost
sendmail_from:user@localhost (un truc du style)

remplacer par :

smpt : smtp.mon_fai.com
sendmail_from:mon_nom@mon_fai.com


Dim a écrit :

Autre truc que je ne comprend pas, ou intégre tu ton php?


Tout simplement, il appelle la page : mail.php (voir action sur formulaire) Smiley cligne .

++
Nolem a écrit :

Tout simplement, il appelle la page : mail.php (voir action sur formulaire) Smiley cligne .

++


Effectivement je n'avais pas vu... Smiley rolleyes
Merci pour vos réponses Smiley cligne

Le site doit être prêt pour mercredi prochain environ, et j'ai encore des tonnes de trucs à faire, du style corriger quelques bugs sous ie, faire des diaporamas sur certaines pages (et trier les photos qui vont dedans), rajouter des détails par ci par là, certains aspect du design...Donc le php j'ai pas trop le temps de creuser, même si c'est loin d'être inintéressant.
Up

Bon ben le site est pas encore hébergé finalement, et j'ai un petit problème avec mon fichier php...

<?php
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";
 
$votremail=$_POST["votremail"]; 
$from=htmlspecialchars( "From: " $par $votreprenom $votrenom .$votremail."\r\n");  
$message=stripslashes(htmlspecialchars($_POST["message"]));
 
$destinataire="xxx@fai.fr";
 

$objet=$_POST['objet'];
 

if(!preg_match($verif,$votremail))
{
        echo "Votre e-mail n'est pas valide";
}
 
elseif (trim($message)=="")
{
        echo "Le message est vide";
}
 
else
{
        mail($destinataire,$objet,$message,$from,$name);
        echo "<p>Votre message a bien été envoyé, merci.<br><a href="accueil.html">Cliquez ici pour revenir sur la page d'accueil</p></a>" ;

}
 
?>


Lorsque je clique sur "envoyer" (bouton créé dans mon formulaire html associé), la page qui s'affiche contient :

Votre message a bien été envoyé, merci.
Cliquez ici pour revenir sur la page d'accueil

" ; } ?>

Or normalement il ne devrait rien y avoir après accueil !
Quelqu'un pourrait-il me dire pourquoi l'instruction echo prend aussi en compte ce qui vient après le texte à afficher ?
Salut Rand,

j'ai eu ce problème il y as quelques jours. La réponse à ta question se trouve dans ton code.
Si tu vois des choses s'afficher c'est que tu demande qu'elle s'affiche.
En gros tu doit avoir un doublons quelque part.
Je regarde ton code mais je ne garanti pas de trouver la réponse.
Mon avis est que l'erreur n'est pas dans le fichier que tu nous donne ci-dessus. Donne nous plutôt le fichier de ton formulaire.
Modifié par Dim (26 Jul 2008 - 18:40)
voili voilou :

<form method="post" action="mail.php">
	
	
		<table>
		
			<tr><td>
					<div id="radio">
						<ul>
							<li>
								<label for="civilitemme">Madame&nbsp;</label>
								<input name="par" value="Madame" id="civilitemme" type="radio" />
							</li>
							<li>
								<label for="civilitemlle">Mademoiselle&nbsp;</label>
								<input name="par" value="Mademoiselle" id="civilitemlle" type="radio" />

							</li>
							<li>
								<label for="civilitemr">Monsieur&nbsp;</label>
								<input name="par" value="Monsieur" id="civilitemr" type="radio" />
							</li>
						</ul>
					</div>	
			</td></tr>
			
			<tr><td><label for="nom">Nom :&nbsp;</label>
					<input type="text" id="nom" name="votrenom" class="champ" />
			</td></tr>
			
			<tr><td><label for="prenom">Prénom :&nbsp;</label>
					<input type="text" id="prenom" name="votreprenom" class="champ" />
			</td></tr>
			
			<tr><td><label for="mail"><b>E-mail *</b> :&nbsp;</label>
					<input name="votremail" id="mail" type="text" class="champ" />
			</td></tr>
			
			<tr><td><label for="objet"><b>Objet *</b> :&nbsp;</label>
					<input type="text" id="objet" name="objet" class="champ" />
			</td></tr>
			
			<tr><td colspan=2><label for="message"><b>Message *</b> :&nbsp;</label>
							<textarea name="message" cols="47" rows="4" id="message"></textarea>
			</td></tr>
	

	</table>
	
				<p>&nbsp;</p>
	
				<input type=submit value=Envoyer>&nbsp;<input type=reset value=Annuler>
				
				<p>
					<b>* Champs obligatoires.</b>
					
				</p>
				
 
	</form>


c'est peut-être évident, mais je ne vois pas ou il y a une erreur. Smiley ohwell
Modérateur
Salut Rand,

Je pense que ton erreur vient de la dernière ligne :



echo "<p>Votre message a bien été envoyé, merci.<br><a href="accueil.html">Cliquez ici pour revenir sur la page d'accueil</p></a>" ;
}
?>


à remplacer par :

echo "<p>Votre message a bien été envoyé, merci.<br><a href=\"accueil.html\">Cliquez ici pour revenir sur la page d'accueil</p></a>" ;
}

?>

Normalement, tu aurais dû avoir un beau message d'erreur du type parse error si je ne m'abuse.

En ce qui concerne ta conditionnelle (sinon si), je ferai plutôt ceci :

elseif (empty($message))
{

        echo "Le message est vide";

}


++
Modifié par Nolem (26 Jul 2008 - 19:58)
Perdu c'est pas encore dans celui la (ou du moins je ne la vois pas).... Smiley cligne
Alors juste un petit truc que j'ai vu mais ça ne changera rien au problème.
dans


echo "<p>Votre message a bien été envoyé, merci.<br><a href="accueil.html">Cliquez ici pour revenir sur la page d'accueil</p></a>" ;

remplace le <br> par <br /> il faut toujours fermer une balise que tu ouvre. Dans le cas du br il n'y as pas besoin d'une balise de fermeture donc on intègre le / dans la balise elle même. Comme tu le fait pour tes input.

Pour ton problème tu n'aurait pas par hasard... un fichier index qui appel tous ça...?

[EDIT]
Salut Nolem, toujours de bon conseil... Smiley cligne
La différence entre les deux c'est juste un saut de ligne? Ca suffit à provoquer une erreur? Olala j'ai encore du boulot avant de connaître les petits astuces...

[EDIT2]
Bein justement jusqu'à présent je travaille toujours en ligne... Car le local j'ai pas encore tous compris pour réussir à faire marcher... donc en gros j'avoue j'ai pas testé... Smiley confused
Modifié par Dim (26 Jul 2008 - 20:15)
Modérateur
Dim a écrit :

...(ou du moins je ne la vois pas)...

echo "<p>Votre message a bien été envoyé, merci.<br><a href="accueil.html">Cliquez ici pour revenir sur la page d'accueil</p></a>" ;



Essaye sur ton ordi en local cette ligne de code Smiley cligne

++
en fait je suis en local... Et ça ne marche toujours pas Smiley bawling
Modifié par Rand (26 Jul 2008 - 20:27)
Modérateur
As tu fait le remplacement ?
Est ce que la ligne (echo "texte en dur "texte_en_dur" texte en dur";) est syntaxiquement juste ?

++

<<<EDIT
Je pense que ton easyphp ou wamp est paramétré afin de laisser peut être des erreurs syntaxe simple
EDIT;
Modifié par Nolem (26 Jul 2008 - 20:31)
Je propose sans savoir (c'est pas très bien je sais Smiley rolleyes )
mais peut être que l'espace entre
evenir sur la page d'accueil</p></a>"
et le ;
il faut l'enlever
Je sais pas ce que ça donne car j'ai un peu la flemme d'intégrer ton code dans une page de mon site pour voir... dsl

[EDIT2] j'ai essayé la fameuse ligne que tu donne Nolem et effectivement sur mon site elle provoque une erreur...
Mais le tous c'est de trouver pourquoi...
[EDIT3] l'imbrication de p n'est pas bonne....
ça résous pas le problème mais le </a> doit se trouver avant le </p>
[EDIT4]
Sur mon site cela fonctionne voila la fameuse ligne.

echo "<p>Votre message a bien été envoyé, merci.<br /><a href='accueil.html'>Cliquez ici pour revenir sur la page d'accueil</a></p>";

Le problème était dans les guillemets j'ai remplacé les doubles guillemets par des simple au niveau du href.
Dit nous si cela fonctionne chez toi.

[EDIT5]
Je suis bigleu Smiley eek mais tu avais résolu le souci avec des antislash... Honte à moi...
Modifié par Dim (26 Jul 2008 - 20:56)
a écrit :
Au passage dans ton formulaire tu rend obligatoire le champ objet * mais tu ne fait pas la vérification ... c'est normale?


Non, j'ai oublié ça erf Smiley langue

Bon je voulais pas y venir mais j'ai plus le choix là je crois, à nous deux wamp...
Modérateur
Regarde Dim ce que j'ai mis plus haut (ligne de remplacement) Smiley cligne .

Ma syntaxe est plus juste au niveau html. Je crois qu'il est préférable de conservé les guillemets doubles pour les attributs.

++
Oui Nolem, j'ai vu... d'ailleurs j'ai édité mon message précédent.
Pour les doubles guillemets ce que tu dit est certainement vrai..
Cependant je voudrais juste rajouter que le </p> et </a> seraient certainement mieux inversés... Smiley cligne
Mais sinon toujours de très bon conseils, on sent l'expérience... Smiley murf
Modifié par Dim (26 Jul 2008 - 21:08)
Pages :