Sessions php et formulaire svp

aldo -  
 rico -
Bonjour,

J'ai réalisé un petit formulaire dans le but de récupérer les emails de mes visiteurs avec 2 champs: prénom et email.

Jusqu'ici tout va bien le script marche bien, seulement ayant insérer dans le code php une vérification des 2 champs j'ai un petit problème.

En effet quand php vérifie une erreur ou un champ vide celui ci indique au visiteur par un message qu'il manque soit le prénom ou que l'email est invalide.
Si tel est le cas dans ce message d'avertissement un lien de retour au formulaire est disponible.

Donc mon problème est lorsque je clic sur ce lien les 2 champs du formulaire réapparaissent vides, il faut alors tout retaper.

J'aimerai savoir comment faire pour conserver les champs remplis pour que le visiteur n'ai pas à tout retaper de nouveau.

En cherchant j'ai trouvé que les sesions php seraient une bonne solution à mon problème, mais voila je n'arrive pas à savoir où et comment les placer dans mon code avec 1 fichiers html et 1 php que voici:

Le formulaire "contact.html":

<html>
<body>

<form method="post" action="email.php">

<p align="center">
Votre Prénom <br /> <input type="text" name="prenom" size="40"/><br /><br />

Votre E-mail <br />
</font> <input type="text" name="email" size="40">
</p>

<p align="center">
<input type="submit" value="Envoyer" />
</p>

</form>
</body>
</html>

Le fichier php "email.php":

<?php

$prenom = $_POST['prenom'];
$email= $_POST['email'];

$mon_email = 'monsite.com'; # L'adresse e-mail pour savoir qui s'est inscrit
$sujet = 'inscription'; # Sujet du mail a envoyer au nouvel inscrit
$message = " Bonjour $prenom,bla bla.....

# Partie pour valider l'adresse e-mail
$atom = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]'; // caractères autorisés avant l'arobase
$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)

if (preg_match('/\A\s*\Z/', $prenom)) { // test du prenom
die('Veuillez inscrire votre prénom merci<a href=http://monsite.com/contact.html><br>Retour au formulaire</a>');
} elseif (!preg_match($email)) { // test de l'adresse e-mail
die("Votre adresse email $mail est invalide veuillez recommencer merci<a href=http://www.monsite.com/contact.html><br>Retour au formulaire");

}

$msg .= $message;

mail($email, $sujet, $msg,
"Reply-to: $mon_email\r\nFrom: $mon_email");
mail($mon_email, "Nouvel inscrit: $prenom", "\n
Un nouvel inscrit: $prenom

E-mail: $email\n\n" ,
"Reply-to: $mon_email\r\nFrom: $mon_email");

?>

Quelqu'un pourrait-il m'aiguiller ou aurait une autre idée que les sessions
Merci d'avance pour votre aide
Configuration: Windows XP
Firefox 3.0.1

15 réponses

  1. Mimiste Messages postés 1159 Statut Membre 206
     
    Bonjour

    Il faut tout d'abord enregistrer les valeurs tapée dans le champ

    Dans ta page php il faut ajouter au debut

    session_start();
    $_SESSION["PRENOM"] = $_POST['prenom'];
    $_SESSION["EMAIL"] = $_POST['email'];

    Ensuite il va falloir mettre un peu de php dans ton formulaire

    <?PHP
    session_start();
    ?>
    <html>
    <body>

    <form method="post" action="email.php">

    <p align="center">
    Votre Prénom <br /> <input type="text" name="prenom" size="40" value='<?PHP echo $_SESSION["PRENOM"] ?>' /><br /><br />

    Votre E-mail <br />
    </font> <input type="text" name="email" size="40" value='<?PHP echo $_SESSION["EMAIL"] ?>' />
    </p>

    <p align="center">
    <input type="submit" value="Envoyer" />
    </p>

    </form>
    </body>
    </html>

    Evidement il faut le renommer en contact.php
    0
  2. aldo
     
    Bonjour Mimiste et merci pour ta réponse rapide je vais essayer ca tout de suite et je te tiens au courant.
    0
  3. aldo
     
    Et bien voila qui est fait wow ca marche impec merci beaucoup un vrai coup de génie.

    Une dernière question si par exemple il y a un problème de serveur et qu'une erreur s'est produite pendant l'envoi du formulaire est-il possible de l'indiquer au visiteur ?

    Encore merci
    0
  4. aldo
     
    Je veux dire par là un problème d'envoi au serveur.

    Par exemple si la connexion au serveur plante, serait-il possible d'inclure dans le script php pour qu'il indique un message du genre "une erreur s'est produite veuillez recommencer svp" ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. aldo
     
    Personne aurait une idée sur comment indiquer dans mon script
    si une erreur s'est produite lors de l'envoi du message ?

    Merci
    0
    1. Mimiste Messages postés 1159 Statut Membre 206
       
      Bonsoir

      Oui il suffit de recuperer le retour de la fonction mail

      $resultat = mail($email, $sujet, $msg,
      "Reply-to: $mon_email\r\nFrom: $mon_email");
      mail($mon_email, "Nouvel inscrit: $prenom", "\n
      Un nouvel inscrit: $prenom

      E-mail: $email\n\n" ,
      "Reply-to: $mon_email\r\nFrom: $mon_email");

      if ($resultat){
      echo "Mail envoyé";
      } else {
      echo "Erreur durant l'envoi";
      }
      0
  7. fredo
     
    Encore merci Mimiste je cherche également à savoir s'il est possible de vérifier que l'adresse e-mail saisie dans le formulaire est existente avec PHP.

    Merci
    0
  8. fredo
     
    Ce n'est pas possible de vérifier si une adresse email exsite avec php ?

    Merci
    0
  9. Mimiste Messages postés 1159 Statut Membre 206
     
    Verifier qu'un mail existe ? non ce n'est pas possible

    Le seul moyen c'est (comme le font tous les sites) envoyer un mail à la personne en lui demandant de cliquer sur un lien pour valider son mail
    0
  10. rico
     
    Ok Mimiste euuh pourrais-tu m'aider a faire cela stp ? si tu ne veux pas je comprendrais tu m'as déja beaucoup aidé et je t'en remercie beaucoup.

    Amicalement
    0
  11. rico
     
    Mimiste si vous acceptez de m'aider je vous fait une proposition, votre prix sera le mien.
    0
  12. Mimiste Messages postés 1159 Statut Membre 206
     
    Pas de souci

    Tu utilise une base de données pour tout stocker j'imagine

    Tu a donc une table qui contiens tes utilisateurs, dans cette table tu stocke les infos des utilisateurs dont le mail qu'ils ont fourni et un ID unique

    Il faut rajouter 2 colonnes dans cette table : la colonne "valide" et la colonne "verifValide" par exemple

    dans la colonne valide tu stockera l'etat du compte : "valide" ou bien "en attente" (par defaut)
    dans la colonne verifValide tu stockera un numero aleatoire qui permettra la vérification

    Maintenant il faut créer un fichier php tout simple (verifMail.php par exemple) qui execute une requete grace a 2 valeurs passé en GET : l'ID unique de l'utilisateur et le numero aleatoire

    "select count(*) as NB from tableUtilisateur where ID='".$_GET['ID']."' and verifValide='"$_GET['NUM']"' "

    si ce count te retourne 1 il faut que tu passe l'etat du compte en "valide" (avec une requete update) c'est que la personne aura cliqué sur le lien

    Et la derniere etape consiste a créér l'envoi de ce mail de verification. Tu l'envoi avec la fonction mail classique a l'adresse qu'a indiqué la personne lorsque tu valide son inscription. Ce mail comporte en corps de message un lien du genre "http://www.site.com/verifMail.php?ID=2&NUM=19392043"
    ID est l'id de la personne qui viens de s'inscrire et NUM est le numero aleatoire que tu genere et que tu enregistre dans la base en même temps

    Du coup la personne reçoi ce mail et en cliquant sur le lien elle ouvre ta page verifMail.php qui execute la requete avec les valeurs en GET et valide son compte.

    Si le mail n'est pas valide la personne ne reçoi jamais ce mail et ne peux pas valider son compte du coup ça force les gens a fournir une adresse valide si ils veulent pouvoir utiliser ton site

    0
    1. rico
       
      Bonjour,

      Suite a ton post j'ai donc crée une table avec phpmyadmin avec 4 champs comme ceci:


      id   prénom     email        valide          verifvalide
      
      1 	  	             En attente       19392043
      


      Est-ce bien cela qu'il faut faire ?

      Merci
      0
  13. rico
     
    Ok encore merci je vais regarder ca de plus près. Non je n'utilise pas de base de donnée pour stocker, et est-il obligatoire d'en utilsée une ?

    Merci
    0
  14. rico
     
    Bonjour,

    "select count(*) as NB from tableUtilisateur where ID='".$_GET['ID']."' and verifValide='"$_GET['NUM']"' "

    ceci est le code à insérer dans la page verifmail.php pour se connecter à la base de donnée ?
    0
  15. rico
     
    Bonjour,

    Est ce que quelqu'un peut me dire a quoi correspond cette ligne de code SVP ?

    "select count(*) as NB from tableUtilisateur where ID='".$_GET['ID']."' and verifValide='"$_GET['NUM']"' "

    Merci bien
    0