Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/02/2011, 18h51   #1
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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 :
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 :
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
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 21h14   #2
Membre régulier
 
Avatar de zugolin
 
Inscription : octobre 2007
Messages : 239
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 239
Points : 98
Points : 98
salut,
je vois vite fait qu'il te manque un "else" dans ton fichier de validation;
ça serait pas ça ?

Code :
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
  }
zugolin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 02h24   #3
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
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 : 586
Points : 859
Points : 859
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é...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 10h09   #4
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 11h01   #5
Membre régulier
 
Avatar de zugolin
 
Inscription : octobre 2007
Messages : 239
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 239
Points : 98
Points : 98
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 :
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 :
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 ?
zugolin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 11h06   #6
Membre régulier
 
Avatar de zugolin
 
Inscription : octobre 2007
Messages : 239
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 239
Points : 98
Points : 98
a oui !
et tes requetes :

Citation:
pseudo like '$login'
non!
c'est soit
Citation:
pseudo like '%$login%'
soit
Citation:
pseudo = '$login'
pseudo='$login' n'acceptera pas les sauts de ligne, retour chariot ; pseudo like '%$login%' oui
zugolin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 11h22   #7
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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 :
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 :
1
2
3
 
 
mysql_query("UPDATE membre SET actif='$actif' WHERE pseudo like '%$login%'");
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 11h45   #8
Membre régulier
 
Avatar de zugolin
 
Inscription : octobre 2007
Messages : 239
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 239
Points : 98
Points : 98
a ben oui !!
il reprend la valeur zéro de ta bdd et la re-inscrit a zéro, normal !

Citation:
mysql_query("UPDATE membre SET actif='$actif' WHERE pseudo like '$login'");
c'est donc
Citation:
mysql_query("UPDATE membre SET actif='1' WHERE pseudo like '$login'");
zugolin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 11h59   #9
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
Non toujours pas.

Il ne récupéré pas la clé pour faire la comparaison, vraiment je ne comprend pas du tout.
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 12h21   #10
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 12h26   #11
Membre régulier
 
Avatar de zugolin
 
Inscription : octobre 2007
Messages : 239
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 239
Points : 98
Points : 98
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>';

Citation:
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?
zugolin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 12h29   #12
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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 !
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 12h39   #13
Membre régulier
 
Avatar de zugolin
 
Inscription : octobre 2007
Messages : 239
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 239
Points : 98
Points : 98
normal, il faut comparer la cle et il faut qu'elles soient identiques pour activer

Citation:
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' ?
zugolin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 12h44   #14
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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é.
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 12h59   #15
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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.
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 14h15   #16
Membre régulier
 
Avatar de zugolin
 
Inscription : octobre 2007
Messages : 239
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 239
Points : 98
Points : 98
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 :
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"
zugolin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 14h40   #17
Membre régulier
 
Avatar de zugolin
 
Inscription : octobre 2007
Messages : 239
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 239
Points : 98
Points : 98
reprends plutot celle là et suis les commentaires que j'ai mis
note: j'ai nommé ma page adduser.php (pas php3)

Code :
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...
zugolin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 15h34   #18
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 16h37   #19
Invité régulier
 
Inscription : novembre 2010
Messages : 109
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 109
Points : 6
Points : 6
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 :
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.
TRUNCKS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 18h04   #20
Membre régulier
 
Inscription : novembre 2010
Messages : 102
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 102
Points : 86
Points : 86
Code :
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
Soull est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h35.


 
 
 
 
Partenaires

Hébergement Web