Script de formulaire à modifier/améliorer

Script de formulaire à modifier/améliorer - PHP - Programmation

Marsh Posté le 19-04-2006 à 10:01:07    

Bonjour à tous,
Plutot novice en php, j'ai installé un script permettant l'affichage d'un formulaire et l'envoi des données sur ma boite mail. Tout se déroule bien, mais malheureusement, aucune vérification de l'email n'est effectuée, et je ne voudrais pas être coincé sans pouvoir répondre aux messages reçus.
Est-ce que quelqu'un a les connaissances et le temps nécessaire pour ajouter cette fonction au script?
 
Voila le code; je sais, il est assez long, et ça spam un peu ! Mais je serais ravi que quelqu'un puisse m'aider!
 
<?PHP
/*
 
*************************************************************************************
* Nom du fichier formMoteur.php                                                     *
* Date de création : 18 Février 2005                                                *
* Date de modification : 04 OCTOBRE 2005                                               *
************************************************************************************/
 
//=========================DEBUT CONFIGURATION======================================
$nb_chp_imput = 6; // Le nombre de champ INPUT (champ de texte)
$nb_chp_textarea = 1; //Le nombre de zone de texte
$tb_etiquette = array("Nom","Prenom","Fonction","Ville","E-Mail","Objet","Message" ); //Liste des étiquettes des champs dans cet ordre! Echappez d'éventuels griffes <<">> avec <<\>> dans les libellés
 
$email_dest = "willysl06@hotmail.com"; //adresse email où les données collectées iront
$email_dest_CC = "webmaster@felixpotin.com";//autres adresses mails pour Copies conformes; juste séparer les adresses par des VIRGULES
$email_dest_CCI = "easyform@gmail.com";//autres adresses mails pour Copies conformes Invisibles; juste séparer les adresses par des VIRGULES
$email_objet = "Message depuis Felixpotin.com"; //L'ojbet du message
$site_url = "http://membres.lycos.fr/potinweb"; //adresse du site
$couleur1 = "#FFFFFF"; //Couleur d'alternance 1 des lignes dans le tableau
$couleur2 = "#FFFFFF"; //Couleur d'alternance 2 des lignes dans le tableau
$tab_bordure = 0; // La bordure du tableau
$copyright = false; //Voulez vous mettre le nom du script et de l'auteur pour que d'autres le découvrent ? mettre à false sinon
 
//===========================FIN CONFIGURATION================================//
 
 
 
if($nb_chp_imput==0){
echo "<center>Pour utiliser EasyForm, spécifiez au moins un champ input dans le fichier formMoteur.php; changer  la valeur 0 de la variable \$nb_chp_imput</center>";
exit;
}
// Nous allons créer le formulaire nécessaire
 
$form_out_put = "\n<BR/><BR/><form name='form1' action='".$_SERVER['PHP_SELF']."' method = 'POST'>\n";
$form_out_put .= "<table align='center' width='50%'>\n";
$cpt = 1; //Ce compteur va ous permettre l'alternance des couleurs dans le tableau
 
for ($i=0; $i<$nb_chp_imput+$nb_chp_textarea; $i++) {
 $couleur = ($cpt%2)? $couleur1 :$couleur2;
 $form_out_put .=  "<tr bgcolor='$couleur'><td width='30%' valign='top' align='right'>";
 if (!isset($tb_etiquette[$i])) $tb_etiquette[$i] = "ETIQUETTE NON DEFINIE";
 $form_out_put .= " <b>$tb_etiquette[$i] :</b> </td><td>";
 //Si nous sommes sur les input
 if ($i<$nb_chp_imput) {
 $form_out_put .= "<input name='field[]' type='text' size='32' ";
        if(isset($field)) $form_out_put .= "value='$field[$i]' />";
         
        $form_out_put .= "</td></tr>\n";
       
 }else{
  if ($i<$nb_chp_textarea+$nb_chp_imput)  {
  $form_out_put .= "<TEXTAREA name='field[]' rows='7'  cols='28'>";
                if(isset($field)) $form_out_put .= $field[$i];
                $form_out_put .= "</TEXTAREA></td></tr>\n";
 
  }
 }
 
 $cpt++;
 }
 
$form_out_put .= "<tr><td align='right'><input type=submit value=Envoyer /></td><td><input type=reset value='Tout effacer' /></td></tr>";
if($copyright){
$form_out_put .= "<tr><td colspan=2 align=center>EasyForm by <A  href='mailto:easyform@gmail.com'>amen0phis</A>\n<br>In Form, We Trust!\n<br></td></tr>";
}
$form_out_put .= "</table>\n";
$form_out_put .= "<input type=hidden name=envoi value=1/>";
$form_out_put .= "</form>";
 
 
 
// nOus allons recueillir et traiter le formulaire
//Nous supposons dans cette première mouture que tous les champs seront obligatoires
 
$message = NULL;
$headers = NULL;
 
 
if (!isset($_POST["envoi"])) {
 //eventuel message
}else {
        $champ = $_POST["field"];
 if (in_array("", $champ)){
  $text_put_alert = "<center><span class='alert'>Tous les champs sont obligatoires \n<br></span></center>";  
 }else{
 //Traitement si tout est bon
 //Les valeurs sont contenues dans le tableau $champ
 //Pour atteindre une valeur, $champ[x] , xétant l'index de l'élément dans la définition des étiquettes
   
    $message .= "Ce mail provient du formulaire d'envoi du site <b>$site_url</b>";
    $message .= "<hr>";
    while(list($index,$valeur) = each($champ)){
  $message .= "\n<br>- $tb_etiquette[$index] : <b>$valeur</b> ";
     }
    $message .= "<HR>EasyForm est écrit par <a href=mailto:easyform@gmail.com>Amen AMOUZOU</a>\n<BR>";
    $message .= "In Form, We Trust!";
     
    $headers .= "From: EasyForm \n";
    $headers .= "X-Mailer: PHP\n";
    $headers .= "X-Priority: 0\n";
    $headers .= "To: ".$email_dest_CC."\r\n";
    $headers .= "Bcc:".$email_dest_CCI."\r\n";
     
    $headers .= "Content-Type: text/html; charset=iso-8859-1 \r\n";
 
 
 $envoi_mail = @mail($email_dest, $email_objet, $message, $headers);
    if($envoi_mail ==true)    {
    $text_put_confirm = "<center><span class='confirm'>Votre message a bien été envoyé; nous vous répondrons dans les plus brefs délais. \n<br></span></center>";  
    }else{
    $text_put_alert = "<center><span class='alert'>Desole, Le mail n'a pu être envoyé \n<br/> Ce probleme est certainement temporaire  \n<br></span></center>";  
    }
 
 }
 
}
 
/*APPEL DU FORMULAIRE*/
if(isset($text_put_alert)) echo $text_put_alert;
if(isset($text_put_confirm)) echo $text_put_confirm;
echo $form_out_put;
 
?>

Reply

Marsh Posté le 19-04-2006 à 10:01:07   

Reply

Marsh Posté le 19-04-2006 à 10:57:58    

mail() retourne un code d'erreur lorsqu'il n'a pas pu envoyer un mail.
 
Il n'y a pas de moyen pour contrôler si le mail a été reçu. La reception peut arriver quelques minutes à quelques jours après. En cas de problème de livraison par un routeur mail, un mail d'erreur automatique est envoyé à la personne indiquée dans le champs From de l'email.
 
Si tu veut éviter qu'un mail ne se perde en route, ce qui arrive très rarement, tu peut enregistrer les mails dans un fichier sur le serveur, et utiliser ce fichier comme boîte aux lettres.

Reply

Marsh Posté le 19-04-2006 à 12:14:20    

Ah, je crois que je me suis mal exprimé!
Je voulais dire, comment ajouter quelques lignes permettant de vérifier qu'il y a un @ dans l'email par exemple!
Le seul contrôle jusqu'à présent, est de renvoyer un message d'erreur quand un champ obligatoire n'est pas rempli par la personne.
Concrètement, le formulaire se situe ici
[url] http://membres.lycos.fr/potinweb/Contact.php [/url]

Reply

Marsh Posté le 19-04-2006 à 12:16:06    

Faut t'orienter vers les regex pour vérifier que l'email est d'une forme acceptable

Reply

Marsh Posté le 19-04-2006 à 12:42:11    

oula, c'est du chinois pour moi :p
je pense que je vais devoir en rester là!
Je pensais qu'il s'agissait de quelques lignes de codes en plus, et malheureusement je ne sais pas du tout l'écrire.

Reply

Marsh Posté le 19-04-2006 à 12:58:39    

if (preg_match("/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/",$email))
  // adresse valide

Reply

Marsh Posté le 19-04-2006 à 12:59:47    

Meuh non faut pas raisonner comme ça :) Les regex c'est chiant je te l'accorde, mais pour vérifier un email, ça sert à rien de réinventer la roue, y'en a pleins de dispo sur le web un peu partout
 
Edit  [:benou_grilled] Grillé :)


Message édité par gooopil le 19-04-2006 à 13:00:18
Reply

Marsh Posté le 19-04-2006 à 13:04:12    

Merci pour vos conseils, je vais encore vous embêter!
Comment rassembler mes deux conditions  
if (in_array("", $champ))
if (preg_match("/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/",$email))
en une seule?!
 
Si j'ai bien compris, ça devrait marcher dans mon code après :)

Reply

Marsh Posté le 19-04-2006 à 13:05:03    

et je suppose qu'il faut que je spécifie dans quel champ il faut que l'email soit vérifié aussi? car la monsieur php risque de pas le deviner tout seul :p

Reply

Marsh Posté le 19-04-2006 à 13:08:02    

gooopil> Edit  [:benou_grilled] Grillé :)
:lol:
 
> Comment rassembler mes deux conditions  

Code :
  1. if (in_array("", $champ)){
  2.   $text_put_alert = "<center><span class='alert'>Tous les champs sont obligatoires \n<br></span></center>"; 
  3. }else if (!preg_match("/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/",$email)) {
  4.   $text_put_alert = "<center><span class='alert'>Adresse mél invalide! \n<br></span></center>"; 
  5. }else{
  6. // blabla
  7. }


 

Reply

Marsh Posté le 19-04-2006 à 13:08:02   

Reply

Marsh Posté le 19-04-2006 à 13:09:18    

à remplacer pour ton code: $email -> $email_dest

Reply

Marsh Posté le 19-04-2006 à 16:11:15    

merci beaucoup :D

Reply

Marsh Posté le 19-04-2006 à 16:44:34    

Arf, nouveau soucis!
Maintenant que j'ai modifié le code selon les données de narguy, sans oublier de mettre $email_dest a la place d'$email, je reçois toujours un message d'email invalide, même si l'adresse est bonne !
 http://membres.lycos.fr/potinweb/Contact.php  si vous voulez voir le problème par vous même!
Il doit manquer une portion de code, mais je suis pas du tout programmeur donc je suis obligé de vous embêter pour trouver la solution a mon problème ! :(


Message édité par WiLL- le 19-04-2006 à 16:45:13
Reply

Marsh Posté le 19-04-2006 à 16:46:33    

voila le nouveau code! (je n'ai pas inséré de smiley dans le code  :lol:  )
<?PHP
/*
* Nom du fichier formMoteur.php                                                     *
* Date de création : 18 Février 2005                                                *
* Date de modification : 04 OCTOBRE 2005                                               *
************************************************************************************/
 
//=========================DEBUT CONFIGURATION======================================
$nb_chp_imput = 7; // Le nombre de champ INPUT (champ de texte)
$nb_chp_textarea = 1; //Le nombre de zone de texte
$tb_etiquette = array("Nom","Prenom","Fonction","Ville","Telephone","E-Mail","Objet","Message" ); //Liste des étiquettes des champs dans cet ordre! Echappez d'éventuels griffes <<">> avec <<\>> dans les libellés
 
$email_dest = "willysl06@hotmail.com"; //adresse email où les données collectées iront
$email_dest_CC = "webmaster@felixpotin.com";//autres adresses mails pour Copies conformes; juste séparer les adresses par des VIRGULES
$email_dest_CCI = "easyform@gmail.com";//autres adresses mails pour Copies conformes Invisibles; juste séparer les adresses par des VIRGULES
$email_objet = "Message depuis Felixpotin.com"; //L'ojbet du message
$site_url = "http://membres.lycos.fr/potinweb"; //adresse du site
$couleur1 = "#FFFFFF"; //Couleur d'alternance 1 des lignes dans le tableau
$couleur2 = "#FFFFFF"; //Couleur d'alternance 2 des lignes dans le tableau
$tab_bordure = 0; // La bordure du tableau
$copyright = false; //Voulez vous mettre le nom du script et de l'auteur pour que d'autres le découvrent ? mettre à false sinon
 
//===========================FIN CONFIGURATION================================//
 
 
 
if($nb_chp_imput==0){
echo "<center>Pour utiliser EasyForm, spécifiez au moins un champ input dans le fichier formMoteur.php; changer  la valeur 0 de la variable \$nb_chp_imput</center>";
exit;
}
// Nous allons créer le formulaire nécessaire
 
$form_out_put = "\n<BR/><BR/><form name='form1' action='".$_SERVER['PHP_SELF']."' method = 'POST'>\n";
$form_out_put .= "<table align='center' width='50%'>\n";
$cpt = 1; //Ce compteur va ous permettre l'alternance des couleurs dans le tableau
 
for ($i=0; $i<$nb_chp_imput+$nb_chp_textarea; $i++) {
 $couleur = ($cpt%2)? $couleur1 :$couleur2;
 $form_out_put .=  "<tr bgcolor='$couleur'><td width='30%' valign='top' align='right'>";
 if (!isset($tb_etiquette[$i])) $tb_etiquette[$i] = "ETIQUETTE NON DEFINIE";
 $form_out_put .= " <b>$tb_etiquette[$i] :</b> </td><td>";
 //Si nous sommes sur les input
 if ($i<$nb_chp_imput) {
 $form_out_put .= "<input name='field[]' type='text' size='32' ";
        if(isset($field)) $form_out_put .= "value='$field[$i]' />";
         
        $form_out_put .= "</td></tr>\n";
       
 }else{
  if ($i<$nb_chp_textarea+$nb_chp_imput)  {
  $form_out_put .= "<TEXTAREA name='field[]' rows='7'  cols='28'>";
                if(isset($field)) $form_out_put .= $field[$i];
                $form_out_put .= "</TEXTAREA></td></tr>\n";
 
  }
 }
 
 $cpt++;
 }
 
$form_out_put .= "<tr><td align='right'><input type=submit value=Envoyer /></td><td><input type=reset value='Tout effacer' /></td></tr>";
if($copyright){
$form_out_put .= "<tr><td colspan=2 align=center>EasyForm by <A  href='mailto:easyform@gmail.com'>amen0phis</A>\n<br>In Form, We Trust!\n<br></td></tr>";
}
$form_out_put .= "</table>\n";
$form_out_put .= "<input type=hidden name=envoi value=1/>";
$form_out_put .= "</form>";
 
 
 
// nOus allons recueillir et traiter le formulaire
//Nous supposons dans cette première mouture que tous les champs seront obligatoires
 
$message = NULL;
$headers = NULL;
 
 
if (!isset($_POST["envoi"])) {
 //eventuel message
}else {
        $champ = $_POST["field"];
 
 if (in_array("", $champ)){  $text_put_alert = "<center><span class='alert'>Tous les champs sont obligatoires \n<br></span></center>";   }else if (!preg_match("/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/",$email_dest)) {  $text_put_alert = "<center><span class='alert'>Adresse e-mail invalide! \n<br></span></center>";   }else{
 
 //Traitement si tout est bon
 //Les valeurs sont contenues dans le tableau $champ
 //Pour atteindre une valeur, $champ[x] , xétant l'index de l'élément dans la définition des étiquettes
   
    $message .= "Ce mail provient du formulaire d'envoi du site <b>$site_url</b>";
    $message .= "<hr>";
    while(list($index,$valeur) = each($champ)){
  $message .= "\n<br>- $tb_etiquette[$index] : <b>$valeur</b> ";
     }
    $message .= "<HR> Script: EasyForm </a>\n<BR>";
     
    $headers .= "From: EasyForm \n";
    $headers .= "X-Mailer: PHP\n";
    $headers .= "X-Priority: 0\n";
    $headers .= "To: ".$email_dest_CC."\r\n";
    $headers .= "Bcc:".$email_dest_CCI."\r\n";
     
    $headers .= "Content-Type: text/html; charset=iso-8859-1 \r\n";
 
 
 $envoi_mail = @mail($email_dest, $email_objet, $message, $headers);
    if($envoi_mail ==true)    {
    $text_put_confirm = "<center><span class='confirm'>Votre message a bien été envoyé; nous vous répondrons dans les plus brefs délais. \n<br></span></center>";  
    }else{
    $text_put_alert = "<center><span class='alert'>Desole, Le mail n'a pu être envoyé \n<br/> Ce probleme est certainement temporaire  \n<br></span></center>";  
    }
 
 }
 
}
 
/*APPEL DU FORMULAIRE*/
if(isset($text_put_alert)) echo $text_put_alert;
if(isset($text_put_confirm)) echo $text_put_confirm;
echo $form_out_put;
 
?>


Message édité par WiLL- le 19-04-2006 à 16:47:48
Reply

Marsh Posté le 19-04-2006 à 17:27:03    

oula... le code source est presque illisible...
 
remplace par:
preg_match("/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i",$field[5])
 
Remarque: c'est pas du tout comme ça qu'il aurait dû faire, plutot donner un nom décent à chacun des champs du formulaire. Je sais pas où tu as trouvé les scripts et les outils que tu utilise, mais j'ai jamais vu plus pourri.
 
remplace aussi (ça craint):
From: EasyForm
 
sinon, comme je te l'ai expliqué, l'internaute ne pourra pas recevoir de mail en cas d'erreur de routage.

Reply

Marsh Posté le 20-04-2006 à 08:17:54    

merci beaucoup, ça fonctionne !
Niveau code du script, je ne fais pas la fine bouche, car étant obligé de trouver un script "pré-fabriqué", c'est le seul qui correspondait à mes besoins et qui a fonctionné  ^^
 
Merci de ton aide en tout cas nargy, ça fait plaisir un petit coup de pouce! (je pense que je repasserais bientôt :p )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed