IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème Formulaire Validation Inscription


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Par défaut Problème Formulaire Validation Inscription
    Bonjour,

    J'ai un petit soucis avec ma confirmation mail de formulaire d'inscription.

    Le formulaire envoie bien les champ demandés dans la base de donnée et le lien crée semble correct.

    Seulement, quand je clique sur le lien de confirmation par mail, j'ai toujours un message disant que mon compte n'a pas pu être activé.

    Apparemment, le champ actif, qui est à 0 par défaut, et qui est censé passé à 1 ne se fait pas.

    Je ne trouve vraiment pas


    Le formulaire d'inscription:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
     
    <title>Espace membre</title>
     
    </head>
     
    <body>
     
    <font face="Verdana" size="2">
    <center>
     
    <?php
     
    require("conf.php3");
     
    switch($action) {
    /*-----------------------------------------------------------------*/
    /*	AJOUT DANS MySQL			*/
    /*-----------------------------------------------------------------*/
     
    case "add";
     
    // CONNEXION A LA BASE DE DONNEE
    $db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
    if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php3"; exit;}
     
     
    // Récupération des variables nécessaires au mail de confirmation	
    $email = $_POST['mail'];
    $login = $_POST['pseudo_membre'];
     
    // Génération aléatoire d'une clé
    $cle = md5(microtime(TRUE)*100000);
     
    // TEST SUR LES VALEURS SAISIES
    if($pseudo_membre==""){echo "Vous devez choisir un pseudo<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($passe_membre==""){echo "Vous devez choisir un mot de passe<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    // CHAMPS SUPLEMENTAIRES, inspirez-vous des lignes suivantes. Pour qu'un champs soit facultatif, omettez la ligne.
    //if($email==""){echo "Vous n'avez pas saisi votre email<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    //if($ville==""){echo "Vous n'avez pas saisi la ville<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
     
    // ON VERIFIE SI CE PSEUDO EXISTE DEJA
    $requete=mysql_db_query($sql_bdd,"select * from membre where pseudo=\"$pseudo_membre\"",$db_link) or die(mysql_error());
    $num=mysql_num_rows($requete);
    if($num!=0)
    	{
    	echo "Ce pseudo existe déjà, veuillez en choisir un autre<br><br><a href=\"javascript:window.history.back()\">Retour</a>";
    	}
    else
    	{
    	// CREATION D'UN IDENTIFIANT ALEATOIRE
    	$taille = 20;
    	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
    	srand(time());
    	for ($i=0;$i<$taille;$i++)
    		{
    		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
    		}
     
    	// ON RECHERCHE L'ID MAXIMUM DE LA TABLE
    	$requete=mysql_db_query($sql_bdd,"select max(id_membre) from membre",$db_link) or die(mysql_error());
    	$idmax=mysql_result($requete,0,"max(id_membre)");
     
    	// INSERTION DANS LA TABLE 
    	$idnew=$idmax+1;
    	$requete=mysql_db_query($sql_bdd,"insert into membre values ($idnew,\"$id\",\"$pseudo_membre\",\"$passe_membre\",\"$mail\",\"$cle\",\"\")",$db_link) or die(mysql_error());
    	// CHAMPS SUPLEMENTAIRES, complétez la requête précédente en ajoutant les variables et en respectant l'ordre des colonnes de la table. Exemple :
    	// insert into membre values ($idnew,\"$id\",\"$pseudo_membre\",\"$passe_membre\",\"$email\",\"$ville\")
     
     
    // Préparation du mail contenant le lien d'activation
    $destinataire = $email;
    $sujet = "Activer votre compte" ;
    $entete = "From: inscription@site.com" ;
     
    // Le lien d'activation est composé du login(log) et de la clé(cle)
    $message = 'Bienvenue sur VotreSite,
    
    Pour activer votre compte, veuillez cliquer sur le lien ci dessous
    ou copier/coller dans votre navigateur internet.
    
    http://site.com/validation.php?log='.urlencode($login).'&cle='.urlencode($cle).'
    
    
    ---------------
    Ceci est un mail automatique, Merci de ne pas y répondre.';
     
     
    mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
     
     
    	}
     
    // DECONNEXION MYSQL
    mysql_close($db_link);
     
    break;
     
     
    /*-----------------------------------------------------------------*/
    /*	AFFICHAGE DU FORMULAIRE			*/
    /*-----------------------------------------------------------------*/
     
    default;
    echo "	<h2>Nouveau membre</h2>
    	<form action=\"adduser.php3\" method=\"post\">
    	<input type=\"hidden\" name=\"action\" value=\"add\">
    	Chosissez un pseudo<br><input type=\"text\" name=\"pseudo_membre\"><br>
    	Chosissez un mot de passe<br><input type=\"password\" name=\"passe_membre\"><br>
    	<! -- CHAMPS SUPLEMENTAIRES, décommentez les 2 lignes suivantes -->
    	Votre email<br><input type=\"text\" name=\"mail\"><br>
    	<br>
    	<!-- Ville<br><input type=\"text\" name=\"ville\"><br> -->
    	<input type=\"submit\" value=\"Envoyer\">
    	</form>
    	<font face=\"Verdana\" size=\"2\"><a href=\"index.htm\">Se connecter</a></font>";
    break;
    }
     
     
    ?>
     
    </center>
     
    </font>
     
    </body>
     
    </html>

    Et le fichier de validation ( celui qui pose problème )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
     
    <?php require("conf.php3");?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
    <title>Document sans titre</title>
     
    </head>
     
    <body>
     
    <?php
     
    // CONNEXION A LA BASE DE DONNEE
    $db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
    if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php3"; exit;}
     
    // Récupération des variables nécessaires à l'activation
    $login = $_GET['log'];
    $cle = $_GET['cle'];
     
    // Récupération de la clé correspondant au $login dans la base de données
    $sql = "SELECT cle,actif FROM membre WHERE pseudo like '$login'";
    $result = mysql_query($sql);
     
     
    if($sql)
    {
          $clebdd = $row['cle']; // Récupération de la clé 
          $actif = $row['actif'];  // $actif contiendra alors 0 ou 1 
    }
      {
        $clebdd = $row['cle'];   // Récupération de la clé
        $actif = $row['actif']; // $actif contiendra alors 0 ou 1
      }
     
     
    // On teste la valeur de la variable $actif récupéré dans la BDD
    if($actif == '1') // Si le compte est déjà actif on prévient
      {
         echo "Votre compte est déjà actif !";
      }
    else // Si ce n'est pas le cas on passe aux comparaisons
      {
         if($cle == $clebdd) // On compare nos deux clés   
           {
              // Si elles correspondent on active le compte !   
              echo "Votre compte a bien été activé !";
     
              // La requête qui va passer notre champ actif de 0 à 1
              mysql_query("UPDATE membre SET actif='$actif' WHERE pseudo like '$login'");
           }
         else // Si les deux clés sont différentes on provoque une erreur...
           {
              echo "Erreur ! Votre compte ne peut être activé...";
           }
      }
     
    ?>
     
     
    </body>
     
     
    </html>
     
     
    </body>
     
     
    </html>

    En vous remerciant

  2. #2
    Membre éclairé Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 275
    Par défaut
    salut,
    je vois vite fait qu'il te manque un "else" dans ton fichier de validation;
    ça serait pas ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if($sql)
    {
          $clebdd = $row['cle']; // Récupération de la clé 
          $actif = $row['actif'];  // $actif contiendra alors 0 ou 1 
    }
    else//le "else" manquant
      {
        $clebdd = $row['cle'];   // Récupération de la clé
        $actif = $row['actif']; // $actif contiendra alors 0 ou 1
      }

  3. #3
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Par défaut
    au lieu de if($sql) qui est ta requete mes plutot :
    if((bool)mysql_result($result,0,1))
    tu peux meme le mettre a la place de ton actif == '1' et retirer le if else que zugolin à corrigé...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Par défaut
    Merci pour vos réponses;

    Malheureusement je n'y suis pas arrivé.

    Dans le premier cas, j'ai toujours l'impossibilité d'activer le compte.

    Et dans le deuxième ca, un message d'erreur:

    Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /homez.221/creationbd/www/validation.php on line 29

    Merci à vous si vous pouvez m'aider, je cherche depuis hier je ne trouve vraiment pas

  5. #5
    Membre éclairé Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 275
    Par défaut
    bon, deja, je crois que le if et else servent a rien, ils envoient le meme resultat, donc, a la limite, tu peux directement les remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if($sql)
    {
          $clebdd = $row['cle']; // Récupération de la clé 
          $actif = $row['actif'];  // $actif contiendra alors 0 ou 1 
    }
      else
      {
        $clebdd = '';   // Récupération de la clé
        $actif = ''; // $actif contiendra alors 0 ou 1
      }
    ou bien ça(y'a plus de if else )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         $clebdd = $row['cle']; // Récupération de la clé 
          $actif = $row['actif'];  // $actif contiendra alors 0 ou 1
    ...y'a aussi d'autres possibilités ... mais, bon, a voir...
    ensuite, faut voir aussi a la base :
    est-ce que l'user est bien enregistré avant ?
    c'est a dire, quand il s'est inscrit, est-ce qu'il a bien été enregistré, sa clé presente, son compte actif a zéro.
    et quand il reçoit son mail, est-ce qu'il n'y a pas d'erreur : on retrouve bien son get log et son get cle ?

  6. #6
    Membre éclairé Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 275
    Par défaut
    a oui !
    et tes requetes :

    pseudo like '$login'
    non!
    c'est soit
    pseudo like '%$login%'
    soit
    pseudo = '$login'
    pseudo='$login' n'acceptera pas les sauts de ligne, retour chariot ; pseudo like '%$login%' oui

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème formulaire d'inscription
    Par hooouuta dans le forum Langage
    Réponses: 28
    Dernier message: 20/01/2013, 17h52
  2. [MySQL] probléme :formulaire d'inscription
    Par adilboy2007 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/09/2011, 11h41
  3. Réponses: 6
    Dernier message: 03/04/2006, 09h42
  4. problème de validation de formulaire
    Par calitom dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2006, 15h12
  5. Réponses: 2
    Dernier message: 19/12/2005, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo