changer le bouton de mon formulaire d'envoi en php

Petit nouveau ! | 2 Messages

08 oct. 2011, 22:24

Bonjour,

je voudrais changer le bouton d'envoi de mon formulaire
de contact php qui est <input type="submit" name="envoi" value="Envoyer le formulaire !" />
par un bouton image.

J ai donc ecris le code suivant : <input name="envoi" type="image" value="image" src="pix/bt_envoyer.png" />

et cela ne marche pas.

Je suis nouveau sur ce forum. Est ce que je peux coller le code de ma page php pour une meilleur compréhension
dans ce forum?

merci d avance pour les infos

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 oct. 2011, 22:54

Qu'est ce qui ne fonctionne pas ? l'image n'est pas affichée ? le formulaire n'est pas envoyé ? les données ne sont pas enregistrées ?

Tu peux bien naturellement nous montrer ton code (les balises php et html te permettent de le mettre en forme), en ayant pitié de nous et en ne montrant que ce qui est utile si celui-ci est trop long :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 2 Messages

08 oct. 2011, 23:13

Cc,


à chaque fois que je clique sur mon image(bt_envoyer.png) cela m'écrit : Vous devez d'abord envoyer le formulaire (ce qui correspond à "$message_erreur_formulaire" de ma page traitement formulaire.php)

voiçi mes deux pages php

ma page contact.php
<form id="contact" method="post" action="traitement_formulaire.php">

 <div align="center">
 <table width="400" border="0" cellspacing="0" cellpadding="8">
 <tr>
 <th width="84" align="right" scope="row">Nom</th>
 <th width="2" scope="row">&nbsp;</th>
 <td width="255" align="left"><input type="text" id="nom" name="nom" tabindex="1" /></td>
 </tr>
 <tr>
 <th align="right" scope="row"> <label for="prenom">Prénom</label></th>
 <th scope="row">&nbsp;</th>
 <td align="left"><input type="text" id="prenom" name="prenom" tabindex="2" /></td>
 </tr>
 <tr>
 <th align="right" scope="row"> <label for="telephone">Téléphone</label></th>
 <th scope="row">&nbsp;</th>
 <td align="left"><input type="text" id="telephone" name="telephone" tabindex="3" /></td>
 </tr>
 <tr>
 <th align="right" scope="row"><label for="email">Email</label></th>
 <th scope="row">&nbsp;</th>
 <td align="left"><input type="text" id="email" name="email" tabindex="4" /></td>
 </tr>
 <tr>
 <th align="right" scope="row"><label for="objet">Objet </label></th>
 <th scope="row">&nbsp;</th>
 <td align="left"><input type="text" id="objet" name="objet" tabindex="5" /></td>
 </tr>
 <tr>
 <th align="right" scope="row"> <label for="message">Envoyer </label></th>
 <th scope="row">&nbsp;</th>
 <td align="left"><textarea id="message" name="message" tabindex="6" cols="26" rows="8"></textarea></td>
 </tr>
 <tr>
 <th scope="row">&nbsp;</th>
 <th scope="row">&nbsp;</th>
 <td align="left"><input type="submit" name="envoi" value="Envoyer le formulaire !" /></td>
 </tr>
 <tr>
 <th scope="row">&nbsp;</th>
 <th scope="row">&nbsp;</th>
 <td align="left"><input name="envoi" type="image" value="image" src="pix/bt_envoyer.png" /></td>
 </tr>
 </table>
 <p>&nbsp;</p>
 </form>
 </div>



et ma page traitement_formulaire.php
<?php
 /*
 ********************************************************************************************
 CONFIGURATION
 ********************************************************************************************
 */
 // destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
 $destinataire = '[email protected]';
 
// copie ? (envoie une copie au visiteur)
 $copie = 'non'; // 'oui' ou 'non'
 
// Messages de confirmation du mail
 $message_envoye = "Votre message nous est bien parvenu !";
 $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
 
// Messages d'erreur du formulaire
 $message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";
 $message_formulaire_invalide = "V&eacute;rifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
 
/*
 ********************************************************************************************
 FIN DE LA CONFIGURATION
 ********************************************************************************************
 */
 
// on teste si le formulaire a été soumis
 if (!isset($_POST['envoi']))
 {
 // formulaire non envoyé
 echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
 }
 else
 {
 /*
 * cette fonction sert à nettoyer et enregistrer un texte
 */
 function Rec($text)
 {
 $text = trim($text); // delete white spaces after & before text
 if (1 === get_magic_quotes_gpc())
 {
 $stripslashes = create_function('$txt', 'return stripslashes($txt);');
 }
 else
 {
 $stripslashes = create_function('$txt', 'return $txt;');
 }
 
// magic quotes ?
 $text = $stripslashes($text);
 $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
 $text = nl2br($text);
 return $text;
 };
 
/*
 * Cette fonction sert à vérifier la syntaxe d'un email
 */
 function IsEmail($email)
 {
 $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
 return (eregi($pattern,$email)) ? true : false;
 };
 
// formulaire envoyé, on récupère tous les champs.
 $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
 $prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
 $telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : '';
 $email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
 $objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : '';
 $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
 
// On va vérifier les variables et l'email ...
 $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
 
if (($nom != '') && ($prenom != '') && ($telephone != '') && ($email != '') && ($objet != '') && ($message != ''))
 {
 // les 4 variables sont remplies, on génère puis envoie le mail
 $headers = 'From: '.$nom.''.$prenom.''.$telephone.' <'.$email.'>' . "\r\n";
 
// envoyer une copie au visiteur ?
 if ($copie == 'non')
 {
 $cible = $destinataire.','.$email;
 }
 else
 {
 $cible = $destinataire;
 };
 
// Remplacement de certains caractères spéciaux
 $message = str_replace("'","'",$message);
 $message = str_replace("&#8217;","'",$message);
 $message = str_replace(""",'"',$message);
 $message = str_replace('<br>','',$message);
 $message = str_replace('<br />','',$message);
 $message = str_replace("<","<",$message);
 $message = str_replace(">",">",$message);
 $message = str_replace("&","&",$message);
 
// Envoi du mail
 if (mail($cible, $objet, $message, $headers))
 {
 echo '<p>'.$message_envoye.'</p>'."\n";
 }
 else
 {
 echo '<p>'.$message_non_envoye.'</p>'."\n";
 };
 }
 else
 {
 // une des 3 variables (ou plus) est vide ...
 echo '<p>'.$message_formulaire_invalide.' <a href="contact.php">Retour au formulaire</a></p>'."\n";
 };
 }; // fin du if (!isset($_POST['envoi']))
 ?>

MERCI D AVANCE POUR LES INFOS

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 oct. 2011, 11:57

C'est une question de navigateur... Quand tu cliques sur l'image, le navigateur envoi au serveur les coordonnées du point qui a été cliqué. En gros, tu vas recevoir deux informations "nom_input.x" et "nom_imput.y" qui correspondent aux coordonnées du clic sur l'image.
Certains navigateurs envoient en plus le nom de l'input comme le fait un bouton submit. Du coup, pour ne pas dépendre du navigateur, tu peux tester les deux données nom du champ et au moins l'une des coordonnées :
if ( !isset($_POST['envoi'] && !isset($_POST['envoi_x']) )
A noter que php va transformer les suffixes ".x" et ".y" en "_x" et "_y", d'où le test sur $_POST['envoi_x'] (et non $_POST['envoi.x'])
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...