Divers problèmes dans mon formulaire php

Petit nouveau ! | 5 Messages

30 déc. 2008, 16:25

Bonjour,

Je rencontres divers problèmes avec mon formulaire php, voici mes "problèmes" :


1) Quand je clic sur envoyer rien ne ce passe

2) Comment vérifier si une adresse e-mail, a bien été tapé dans la zone de saisie, votre e-mail ?

3) Comment bloquer la barre de défilement horizontal de ma zone de saisie ?


Voici mon code :

Code : Tout sélectionner

<div align=center> <form method=POST action=formmail.php > <input type=hidden name=subject value=formmail> <table> <tr><td>Votre Nom :</td> <td><input type=text name=realname size=30></td></tr> <tr><td>Votre Prenom :</td> <td><input type=text name=realname size=30></td></tr> <tr><td>Société :</td> <td><input type=text name=realname size=30></td></tr> <tr><td>Telephone :</td> <td><input type=text name=realname size=30></td></tr> <tr><td>Votre e-mail :</td> <td><input type=text name=email size=30></td></tr> <tr><td>Sujet :</td> <td><input type=text name=title size=30></td></tr> <tr><td colspan=2>Commentaires :<br> <textarea COLS=33 ROWS=6 name=comments></textarea> </td></tr> </table> <br> <input type=submit value=Envoyer> <input type=reset value=Annuler> </form> </div>
<?php
$TO = "votre adresse email";

$h  = "From: " . $TO;

$message = "";

while (list($key, $val) = each($HTTP_POST_VARS)) {
  $message .= "$key : $val\n";
}

mail($TO, $subject, $message, $h);

Header("Location: http://<URL de la page de remerciement>");

?>

Mammouth du PHP | 2937 Messages

30 déc. 2008, 16:40

Avant toute chose, quelle version de PHP utilises-tu ? Sache que $HTTP_POST_VARS est obsolète et remplacé par $_POST et qu'il existe une boucle foreach bien plus pratique à manier que list et each() dans une boucle while. ;)

Pour vérifier que le champ email comporte une adresse email en bonne et dûe forme, il existe la fonction filter_var(), qui comporte, parmi les constantes possibles en guise de filtre, FILTER_VALIDATE_EMAIL.
$avertissement = (!filter_var ('une-adresse-invalide', FILTER_VALIDATE_EMAIL))? 'L\'adresse n\'est pas valide': 'L\'adresse est correcte';
Encore faut-il être en PHP 5.2...

De plus, ton code doit être amélioré : non seulement tu dois vérifier que les saisies récupérées sont conformes aux types de saisie auxquels tu t'attends, mais tu dois aussi t'assurer que ton formulaire ne devienne pas un redoutable serveur de spams à cause d'injections d'en-têtes (une lecture incontournable à ce sujet).

ViPHP
ViPHP | 1996 Messages

30 déc. 2008, 19:12

Tiens c'est mon jour de bonté... Une petite fonction pour tester les emails pour ceux qui n'ont (comme moi) un PHP non compatible avec filter_var()
function verification_email ($email)
               {
               $caract_autorise  = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // caractères autorisés avant l'arobase
               $domain_autorise = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)
                                                 
               $regex = '/^' . $caract_autorise . '+' .'(\.' . $caract_autorise . '+)*'.
                        '@' .
                        '(' . $domain_autorise . '{1,63}\.)+' . $domain_autorise . '{2,63}$/i';

               // test de l'adresse e-mail
               $validation_email = preg_match($regex, $email) ? TRUE : FALSE;

               return $validation_email;
               }
Pour ton code, Victor a raison tu peux grandement l'améliorer :
<?php
$TO = "[email protected]";
$h  = "From: " . $TO;
$message = "";

foreach ($_POST $as $cle => $valeur)
   {
   $message .= "Clef : $cle , valeur : $valeur \n";
   }

if (verification_email ($TO))
   {
   mail($TO, $subject, $message, $h);
   Header("Location: http://<URL de la page de remerciement>");
   }
else
   {
   Header("Location: http://<URL page pas bon email>");
   }

?>
Au fait met ceci aussi

Code : Tout sélectionner

<form method=POST action="formmail.php" >
et dans formmail.php met un
<?php 
echo "<pre>";
print_r ($_POST);
echo "</pre>";
?>
pour savoir si tout est bien posté.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 453 Messages

30 déc. 2008, 23:25

Les vieux scripts qui trainent sur le net...

Salut,

Je fais un petit passage pour signaler quelques pétouilles :

1. Logiquement les valeurs des attributs doivent être entourés par des guillemets doubles.
2. En xhtml, la syntaxe est en minuscule et sans espace pour nomer les tags, attributs, valeurs, etc.
3. Pourquoi mets tu dans le formulaire un champ caché et je ne le vois pas dans la « vérif » ? Est ce normal ?

Il me semble qu'il est préférable de faire une verification sur l'envoi de l'email. (si l'envoi d'email s'est bien déroulé, page de remerciement. Sinon page d'erreur d'envoi)
if(mail($TO, $subject, $message, $h))
  header("location:bonne_page.php");
else
   header("location:mauvaise_page.php");
++

ViPHP
ViPHP | 4674 Messages

31 déc. 2008, 01:13

Hey :),

Tout est à revoir …
Bon, commençons par l'HTML. Si tu écris un truc du style :

Code : Tout sélectionner

<form method="post" action="formmail.php"> <p><label for="name">Votre nom&nbsp;:</label> <input type="text" id="name" name="name" /></p> <p><label for="fname">Votre prénom&nbsp;:</label> <input type="text" id="fname" name="fname" /></p> … <p><label for="comment">Commentaire&nbsp;:</label> <textarea id="comment" name="comment" cols="33" rows="6"></textarea></p> <p><input type="submit" name="submit" /> — <input type="reset" /></p> </form>
ce sera largement suffisant pour faire toutes les mises en page que tu veux (bien sûr avec du CSS) et c'est très accessible, très ergonomique etc.

Ensuite, la page formmail.php va recevoir les données du formulaire dans le tableau $_POST.
Pour savoir si le formulaire a bien été envoyé avant d'arriver sur la page, il suffit de regarder si le bouton de soumission fait parti de la liste des données reçues. Pour voir l'ensemble des données :
print_r($_POST);
pour voir si le formulaire a été envoyé :
if(!isset($_POST['submit']))
    echo 'Formulaire non envoyé !';
Je précise que dans le tableau $_POST, on travaille sur le nom (name="…") des champs, et pas sur l'identifiant (id="…").
Pour vérifier que le champ de mail a bien été rempli, c'est le même principe que pour le bouton de soumission.
Ensuite, pour exploiter l'ensemble d'un tableau, il suffit d'utiliser la boucle foreach de cette façon :
$message = null;
foreach($_POST as $name => $value)
    $message .= $name . ' : ' . $value . "\n";
Enfin, pour bloquer l'ascenseur horizontal de la zone de texte (textarea), il faut travailler avec les propriétés overflow en CSS.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Petit nouveau ! | 5 Messages

05 janv. 2009, 12:04

Bonjour, celà ne marche toujours pas, et après on ose dire que le php est simple !!!!! :roll: :roll:

Code : Tout sélectionner

<div align=center> <form method="post" action="formmail.php"> <input type=hidden name=subject value=formmail> <table> <tr><td><b>Nom :</b></td> <td><input type=text name=realname size=25></td></tr> <tr><td><b>Prénom :</b></td> <td><input type=text name=realname size=25></td></tr> <tr><td><b>Société :</b></td> <td><input type=text name=realname size=25></td></tr> <tr><td><b>E-mail :</b></td> <td><input type=text name=email size=25></td></tr> <tr><td><b>Sujet :</b></td> <td><input type=text name=title size=25></td></tr> <tr><td colspan=2><b>Message :</b><br> <textarea COLS=27 ROWS=6 name=comments></textarea> </td></tr> </table> <br> <input type=submit value=Envoyer> <form method=POST action="formmail.php" > <input type=reset value=Annuler> </form> </div>
<?php
$TO = "[email protected]"; 
	name  if(!isset($_POST['submit']))
    echo 'Formulaire non envoyé !'; 
$h  = "From: " . $TO;

$message = null;
foreach($_POST as $name => $value)
    $message .= $name . ' : ' . $value . "\n"; ";

foreach ($_POST $as $cle => $valeur)
   {
   $message .= "Clef : $cle , valeur : $valeur \n";
   }

if (verification_email ($TO))
   {
   mail($TO, $subject, $message, $h);
   Header("Location: http://<URL de la page de remerciement>");
   }
else
   {
   Header("Location: http://<URL page pas bon email>");
   }
   
echo "<pre>";
print_r ($_POST);
echo "</pre>";

?> 

ViPHP
ViPHP | 4674 Messages

05 janv. 2009, 12:51

Faut dire que tu écris n'importe quoi aussi … C'est quoi de name if(!isset qui traîne ? C'est name qui me gêne, il ne correspond à rien.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 447 Messages

05 janv. 2009, 12:53

C'est normal que ça marche pas, y a des erreurs dans ton code, tu devrais pouvoir les trouver tout seul rien qu'en regardant la coloration de ton code...

En outre, je suis de ton avis php n'est pas facile... enfin, ça dépend pour qui; si comme moi tu es parti de zéro, et qui plus est sur le tard (ça fait juste 3 ans que j'ai un pc, et j'ai tout appris sur le tas).
Aussi je me permets de te conseiller de ne point te décourager! Persévère, lis et relis les documentations que tu pourras te procurer, testes et retestes les choses par toi-même (souvent c'est dans la répétition qu'on assimile)...
Ça fait un peu plus d'un an que je m'intéresse à la prog en général et à php en particulier, et je commence juste à y voir un tout petit peu plus clair!
Probably (only a) Human Problem?