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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    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 habitué Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    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 éprouvé 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
    Points : 915
    Points
    915
    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é...
    Développeur informatique contrarié...

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    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 habitué Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    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 habitué Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    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

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Arff, merci encore, mais y'a rien à faire, j'ai toujours le compte de peut être activé.

    J'ai vérifié dans la base de donnée, une fois le mail parti, la clé est bien enregistré dans le champ clé et le compte est à 0.

    J'ai essayé toutes les solutions, pas moyen

    Je remet où j'en suis:

    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
     
     
    // 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%'";
     
     
    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
      }
    Peut être un problème dans la requête UPDATE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    mysql_query("UPDATE membre SET actif='$actif' WHERE pseudo like '%$login%'");

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut
    a ben oui !!
    il reprend la valeur zéro de ta bdd et la re-inscrit a zéro, normal !

    mysql_query("UPDATE membre SET actif='$actif' WHERE pseudo like '$login'");
    c'est donc
    mysql_query("UPDATE membre SET actif='1' WHERE pseudo like '$login'");

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Non toujours pas.

    Il ne récupéré pas la clé pour faire la comparaison, vraiment je ne comprend pas du tout.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    J'ai deja trouvé quelque chose:

    le lien mail:

    http://site.com/validation.php?log='.urlencode($login).'&cle='.urlencode($cle).'

    Le & que j'ai mis en gras, si je le vire, je n'ai plus l'erreur, le compte a bien été activé.

    Mais le champ ne passe tjrs pas de 0 à 1 lol

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut
    est-ce que dans le mail tu reçois la clé ?
    est-ce que dans la bdd, a la premiere inscription, tu as la clé
    est-ce que, lorsque tu valides ton mail, la clé est reçu?

    dans la page d'activation, tu fais un
    echo'$clebdd.'(cle BDD)<br>';
    echo'$cle.'(cle recu)<br>';

    Il ne récupéré pas la clé pour faire la comparaison, vraiment je ne comprend pas du tout.
    il faut donc remonter la piste ... il ne l'a pas recuperé, mais est-ce qu'elle est arrivée?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    J'ai fait comme tu me l'a conseillé ( voir message plus haut )

    Effectivement la clé n'arrivait pas.

    Je n'ai plus l'erreur et le compte s'active.

    Mais le champ reste à 0 toujours.

    On y est presque mdr !

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut
    normal, il faut comparer la cle et il faut qu'elles soient identiques pour activer

    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='1' WHERE pseudo like '$login'");
    }
    edit: y'aurait pas un mauvais encodage de 'urlencode' ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Cette ligne y était déjà il me semble.

    Mais en fait je viens de vérifier un truc, j'ai mis le champ actif directement à 1 dans la base, et il m'affiche quand même compte activé alors qu'il est censé me dire que le compte est déjà activé.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Je viens de remarquer un truc ( je cherche je cherche lol )


    http://site.com/validation.phplog='.urlencode($login).'cle='.urlencode($cle).'

    S'il a fallu enlever le & pour que la clé soit bonne, il ne prend pas du coup un pseudo du genre logincle...

    Du fait il ne trouve pas la correspondance avec les pseudo de ma base.

    Ou peut être le mettre en htmlentities mais je ne sais pas comment.

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut
    apparemment, il faut reprendre a zero ton code
    y'a des swicth/case dans l'inscription ... moi, quand j'essai la page, j'ai meme pas de retour, alors j'ai mis des if(on reçoit le post) else (on affiche le formulaire)
    ensuite, y'a des $login qui se transforment en $passe_membre ; des $email en $pseudo_membre ......
    je comprends que tu copies des sources pour essayer de faire quelque chose(j'ai fait et je le fait encore), mais il faudrait que tu les comprennes et que tu les re-interprete a ta façon a TOI pour les re-ecrire, comme ça tu sais ou tu en es et tu comprends les manipes...
    (par contre, y'a un truc que je ne comprends pas , c'est comment on peut trouver sur le web des sources qui soient faussent ou completement tronquées .....mais ça , c'est autre chose...)

    j'ai refait ta page 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
     
    <!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");
     
    if(isset( $_POST['action'])){
    /*-----------------------------------------------------------------*/
    /*	AJOUT DANS MySQL			*/
    /*-----------------------------------------------------------------*/
     
    // 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	
    $mail_membre = $_POST['mail'];
    $pseudo_membre = $_POST['pseudo_membre'];
    $passe_membre = $_POST['passe_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($mail_membre=="")
    {echo "Vous n'avez pas saisi votre email<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;} 
     
    if(1==2){}
     /* 
    // 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());*/
     
    // 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($pseudo_membre).'&cle='.urlencode($cle).'
     
     
    ---------------
    Ceci est un mail automatique, Merci de ne pas y répondre.';
     
     
    mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
     echo 
     'num aleatoire:'.$id.'<br>',
     'http://site.com/validation.php?log='.urlencode($pseudo_membre).'&cle='.urlencode($cle).'';
    	}
     
     
     }
     
    /*-----------------------------------------------------------------*/
    /*	AFFICHAGE DU FORMULAIRE			*/
    /*-----------------------------------------------------------------*/
    else{
    echo "	<h2>Nouveau membre</h2>
    	<form action=\"1.php\" 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>
    	Votre email<br><input type=\"text\" name=\"mail\"><br>
    	<br>
    	<input type=\"submit\" value=\"Envoyer\">
    	</form>
    	<font face=\"Verdana\" size=\"2\"><a href=\"index.htm\">Se connecter</a></font>";
     
     }
     
    ?>
     
    </center>
     
    </font>
     
    </body>
     
    </html>
    de cette façon, on reçoit et on voit le numero d'identifiant aleatoire(est-ce que t'en as besoin ???) et l'adresse de reception avec le log qui est visible(ça risquait pas marcher etant donné ce que je te disait au sujet de $login qui n'existe pas ...) et on voit aussi la clé
    je te conseille donc de partir sur cette copie plutot que la 1iere (en decommentant les connexion bdd, car moi je n'ai pas installé de base pour essayer )

    EDIT: renommes le formulaire, car moi, je l'ai appelé "1.php"

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut
    reprends plutot celle là et suis les commentaires que j'ai mis
    note: j'ai nommé ma page adduser.php (pas php3)

    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
     
    <!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");//moi, j'en ai pas besoin ...toi oui
     
    if(isset( $_POST['action'])){
     
    //connexion a decommenter 
    /*
    // 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"; exit;}  */
     
     
    // Récupération des variables nécessaires au mail de confirmation	
    $mail_membre = $_POST['mail'];
    $pseudo_membre = $_POST['pseudo_membre'];
    $passe_membre = $_POST['passe_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($mail_membre=="")
    {echo "Vous n'avez pas saisi votre email<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;} 
    //commenter la ligne suivante ( if(1==2) ) et decommenter la verif bdd
    if(1==2){}
    /*
    // 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>";
    	}  */
     
    // as tu besoin d'un identifiant aleatoire??	
    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);
    		}
     
    // l'id maximum, on ne devrait pas en avoir besoin si l'ID, dans ta bdd est en "auto-increment" 	
    //decommenter la partie suivante 
    /* 	// 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()); */
     
    // 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($pseudo_membre).'&cle='.urlencode($cle).'
     
     
    ---------------
    Ceci est un mail automatique, Merci de ne pas y répondre.';
     
     
    mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
    //ligne suivante a supprimer ou commenter quand ce sera ok
    echo 'mail:'.$mail_membre.'<br>pass:'.$passe_membre.'<br>num aleatoire:'.$id.'<br>','http://site.com/validation.php?log='.urlencode($pseudo_membre).'&cle='.urlencode($cle).'';
     
    	}
     
     
     }
     
    /*-----------------------------------------------------------------*/
    /*	AFFICHAGE DU FORMULAIRE			*/
    /*-----------------------------------------------------------------*/
    else{
    echo "	<h2>Nouveau membre</h2>
    	<form action=\"adduser.php\" 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>
    	Votre email<br><input type=\"text\" name=\"mail\"><br>
    	<br>
    	<input type=\"submit\" value=\"Envoyer\">
    	</form>
    	<font face=\"Verdana\" size=\"2\"><a href=\"index.htm\">Se connecter</a></font>";
     
     }
     
    ?>
     
    </center>
     
    </font>
     
    </body>
     
    </html>
    quand tu valides l'inscription, tu vois apparaitre tous les resultats(c'est le plus pratique pour voir ses erreurs ...)

    avec ça, tu devrais partir sur de meilleures bases...

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    C'est exactement la question que je me posais, je n'arrête pas de tomber sur des tutos foireux, où il manque la moitié des choses et même pas fini...

    En tout cas, merci infiniment pour la peine que tu te donnes, je vais revoir cela tout de suite.

    Merci encore

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    J'ai bien refait le formulaire d'inscription.

    J'ai vérifié avec le lien qui tu a laissé, toutes les infos passent parfaitement et tout s'inscrit nickel sur la base.


    Mais le formulaire de validation merde toujours.


    Je met où j'en suis, si j'avance je post.
    Merci encore.

    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
     
     
    <!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
     
    require("conf.php3");
     
    // 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"; 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 = mysql_db_query($sql_bdd,"SELECT cle,actif FROM membre WHERE pseudo = '$login'",$db_link) or die(mysql_error());
    $row = $sql;
     
    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
      }
     
     
    // 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_db_query($sql_bdd,"UPDATE membre SET actif='1' WHERE pseudo like '%$login%'",$db_link) or die(mysql_error());
     
           }
         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>
    EDIT:

    En fait, je crois qu'il y a un gros soucis avec l'encodage du lien, parce que j'ai fait à tout hasard:

    $login = $_GET['log'];
    $cle = $_GET['&cle'];

    J'ai rajouté le & au début du formulaire de validation, et là j'ai eu le compte activé.


    Je viens de voir une erreur grossière, je n'ai spécifié nul part la connexion à la base de donnée sur mes requêtes !!!!!

    J'ai rectifié comme sur le code que j'ai mis et du coup enfin !! le champ se met
    à 1 après validation du compte !!!

    Reste deux grand mystères, pourquoi suis-je obligé de rajouter le '&' mais aussi il ne fait pas la vérification si jamais le compte est deja activé.

    Je devrais avoir le message " deja activé " mais il me le réactive à chaque fois.

  20. #20
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 111
    Points : 152
    Points
    152
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($actif) // Si le compte est déjà actif on prévient
      {
         echo "Votre compte est déjà actif !";
      }
    Peut être à cause du guillemet?
    Pour le & aucune idée

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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