Divers problèmes dans mon formulaire php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Divers problèmes dans mon formulaire php

par Stef » 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!

par Hywan » 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.

par farfale78 » 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>";

?> 

par Hywan » 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.

par niuxe » 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");
++

par Aureusms » 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é.

par Victor BRITO » 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).

Divers problèmes dans mon formulaire php

par farfale78 » 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>");

?>