Bonjour à toutes et à tous,

Je suis en train de réaliser pour les besoins de mon site Internet un système d'espace client. J'ai deux cas : je code en local pour ne pas souffrir des lenteurs de notre connexion Internet et j'exporte mon site sur notre hébergeur une fois que tout fonctionne.

1 - En local

L'inscription fonctionne à merveilles, (si un email ou un pseudo existe déjà, on le signale l'inscription n'a pas lieu...) le compte est enregistré avec un champs "compte_actif" initialisé à 0 puis j'envoie un mail d'activation du compte.

Évidemment en local, le mail ne part pas mais j'ai la confirmation dans ma base de données que le compte a bien été créé, le mot de passe est bon.

Si j'essaie de m'authentifier maintenant, j'ai un message comme quoi le compte existe mais n'est pas actif (tout est parfait pour le moment).

Si je "triche" en activant manuellement le compte dans la base de données (je simule le clic de l'internaute sur le lien d'activation de son email)
=> TADAAAAM => l'authentification fonctionne parfaitement (aucun problème au niveau du cryptage du mot de passe en md5 etc...)

2 - Sur Internet

Tout fier de mon code et de ma réussite, je m'en vais la fleur au fusil m'attaquer à mon hébergeur, armé de mes pages fraichement codées et mon enthousiasme à tout rompre...

1er choc !

"bug" à l'inscription, si le pseudo ou l'email existent déjà dans la base de données => Pas de problème : ça crée quand même le compte

Bref, Admettons que le destin joue en ma faveur et que je n'ai pas deux personnes au monde qui veuillent utiliser le même email ou le même pseudo (ce dont je doute malheureusement assez fort), je passe à la suite.

L'inscription fonctionne, malgré cela, plutôt bien, le compte est bien créé sur la base de données (tout est strictement identique local / Internet), compte_actif est bien à 0 et l'email contenant le lien d'activation est parfaitement envoyé à mon futur client.

2ème choc !!

Si ce dit client veut s'authentifier avant d'avoir activé son compte, (on s'attend au message précédent : "compte existant mais non actif") ET BIEN NON ! ça me met "mot de passe incorrect" !!! Le MD5 semble ne pas fonctionner chez mon hébergeur !!!

Alors, j'ai poussé un peu plus loin : J'ai créé la page qui génère un nouveau mot de passe et qui vous l'envoie par e-mail si vous avez égaré votre mot de passe. (bien sûr en local, encore une fois, ça ne marche pas). La régénération du mot de passe est effectuée comme un charme, le nouveau mot de passe prend place dans la Base de données (invérifiable puisque md5 mais le mot de passe change) et est envoyé en clair dans l'email du client.

Je teste donc le compte client avec ce nouveau mot de passe et là... ÉCHEC à nouveau !!! (qui a dit que j'étais une buse en md5 ??? => ben c'est vrai snif.)

Quelqu'un a-t-il déjà entendu parler d'un problème de md5 sur un hébergeur Internet avec un code testé fonctionnel en local ??

Please help !!

Petite nouveauté !!

J'ai testé en virant le MD5 pensant qu'il était la cause de mon soucis... en fait pas du tout, même avec des mots de passe en clair (et pas des très compliqués), le serveur php de mon hébergeur trouve le moyen de me dire que login : max mdp : 1 ne correspond pas à l'enregistrement login : max mdp : 1 de la base de données (alors que ça fonctionne très bien en local...)

Du coup je mise sur la nullité de mon script et je vais donc vous en faire profiter :

Page pour créer son compte client
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
 
<?php
 
// si on clique sur OK
if (isset($_POST['nom']))
{
	// Si un des champs obligatoire n'est pas rempli
	if(empty ($_POST['pseudo']) OR empty($_POST['email']) OR empty($_POST['mdp1']) AND empty($_POST['mdp2']))
	{
		if(empty($_POST['pseudo'])) 
		{
			echo("Veuillez entrer un pseudonyme / ");
		}
		if(empty($_POST['email']))
		{	
			echo("Veuillez entrer un e-mail / ");
		}
		if(empty($_POST['mdp1']))
		{
			echo("Veuillez entrer un mot de passe / ");
		}
		if(empty($_POST['mdp2']))
		{
			echo("Veuillez valider votre mot de passe / ");
		}
		include("fr_formulaire_inscription.php");
	}
	//sinon : tous les champs sont remplis, on vérifie @, tél, mdp
	else if ((!(preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$#", $_POST['email']))) OR ($_POST['mdp1']!=$_POST['mdp2']))
	{
		// test e-mail valide ?
		if (!(preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$#", $_POST['email'])))
		{
			echo ("Veuillez entrer une adresse e-mail valide / ");
		} 
		// test mdp concordants ?
		if ($_POST['mdp1']!=$_POST['mdp2'])
		{
			echo ("Veuillez entrer deux fois le même mot de passe");
		}
		include("fr_formulaire_inscription.php");
	}
	// test N° Telephone valide ? Si tel rempli et si invalide
	else if (!empty($_POST['telephone']) AND !(preg_match("#^0[0-68]([0-9]{2}){4}$#", $_POST['telephone'])))
	{
		echo ("Veuillez entrer un numéro de téléphone valide");
		include("fr_formulaire_inscription.php");
	}
	else // le formulaire est rempli correctement
	{	
		//  Connexion à la base de données
		include("fr_connexion_bdd_online.php");		
 
		//Sécurisation :
		$nom = mySQL_real_escape_string($_POST['nom']);
		$prenom = mySQL_real_escape_string($_POST['prenom']);
		$adresse = mySQL_real_escape_string($_POST['adresse']);
		$code_postal = mySQL_real_escape_string($_POST['code_postal']);
		$ville = mySQL_real_escape_string($_POST['ville']);
		$pays = mySQL_real_escape_string($_POST['pays']);
		$telephone = mySQL_real_escape_string($_POST['telephone']);
		$pseudo = mySQL_real_escape_string($_POST['pseudo']);
		$email = mySQL_real_escape_string($_POST['email']);
		$mdp1 = mySQL_real_escape_string($_POST['mdp1']);
		$mdp2 = mySQL_real_escape_string($_POST['mdp2']);
 
 
		//Requête : on vérifie que l'email ou le pseudo n'existent pas.
		$requete1 = mySQL_query("SELECT pseudo,email FROM Client WHERE email='".$email."' OR pseudo='".$pseudo."'");
		$donnees1 = mysql_fetch_array($requete1);
		$requete2 = mySQL_query("SELECT email FROM Client WHERE email='".$email."'");
		$donnees2 = mysql_fetch_array($requete2);
		$requete3 = mySQL_query("SELECT pseudo FROM Client WHERE pseudo='".$pseudo."'");
		$donnees3 = mysql_fetch_array($requete3);
 
		/*---------------------------------------------------------------------------------*/
		// si pas de correspondance le pseudo et l'email sont dispos => On enregistre !
		if ($donnees1 == null ) 
		{
 
			// Génération de la clef d'activation
			$caracteres = array("a", "b", "c", "d", "e", "f", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
			$caracteres_aleatoires = array_rand($caracteres, 8);
			$clef_activation = "";
 
			foreach($caracteres_aleatoires as $i)
			{
				$clef_activation .= $caracteres[$i];
			}
 
			$nom = htmlentities(addslashes($_POST['nom']));
			$prenom = htmlentities(addslashes($_POST['prenom']));
			$adresse = htmlentities(addslashes($_POST['adresse']));
			$code_postal = htmlentities(addslashes($_POST['code_postal']));
			$ville = htmlentities(addslashes($_POST['ville']));
			$pays = htmlentities(addslashes($_POST['pays']));
			$telephone = htmlentities(addslashes($_POST['telephone']));
			$pseudo = htmlentities(addslashes($_POST['pseudo']));
			$email = htmlentities(addslashes($_POST['email']));
			$mdp1 = htmlentities(addslashes($_POST['mdp1']));
			$mdp2 = htmlentities(addslashes($_POST['mdp2']));
 
			// Création du compte utilisateur
			$req="INSERT INTO 
			client
			(
				idclient
				, nom
				, prenom
				, adresse
				, code_postal
				, ville
				, pays
				, telephone
				, mdp1
				, pseudo
				, email
				, date_inscription
				, code_activation
			)
			VALUES
			(
				null
				, '" . $nom . "'
				, '" . $prenom . "'
				, '" . $adresse . "'
				, '" . $code_postal . "'
				, '" . $ville . "'
				, '" . $pays . "'
				, '" . $telephone . "'
				, '" . /*md5($mdp1)*/ $mdp1. "'
				, '" . $pseudo . "'
				, '" . $email . "'
				, '" . time() . "'
				, '" . $clef_activation . "'
			) 
			";
 
			//Envoi de la requête = enregistrement du compte	
			$resultat=mysql_query($req);
 
			// Si une erreur survient
			 if(!$resultat)
			 {
				  echo ("Erreur d'accès à la base de données lors de la création du compte utilisateur<br>\n");
				  echo ("Veuillez contacter l'administrateur afin qu'il créé votre compte votre compte");
			 }
			 //Sinon, le compte est enregistré
			 else
			 {
				// Envoi du mail d'activation
				$headers ='From: "inscription@secretsparis.fr"<inscription@secretsparis.fr>'."\n";
				$headers .='Reply-To: ne-pas-repondre@secretsparis.fr'."\n";
				$headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
				$headers .='Content-Transfer-Encoding: 8bit';
				$sujet = "Activation de votre compte Seecret's";
				$message = "Pour valider votre inscription, merci de cliquer sur le lien suivant :\n";
				$message .= "<a href=\"http://" . $_SERVER["SERVER_NAME"];
				$message .= "/fr_activer_compte_utilisateur.php?id=" . mysql_insert_id();
				$message .= "&clef=" . $clef_activation."\"> ACTIVEZ VOTRE COMPTE </a>";
 
				// Si une erreur survient
				if(!@mail($_POST["email"], $sujet, $message, $headers))
				{
					echo ("Une erreur est survenue lors de l'envoi du mail d'activation<br />\n");
					echo ("Veuillez contacter l'administrateur afin d'activer votre compte");
				}
				else
				{
					// Message de confirmation
					echo ("Votre compte utilisateur a correctement été créé<br />\n");
					echo ("Un email vient de vous être envoyé afin de l'activer");
				}
			}
		}
 
		/*---------------------------------------------------------------------------------*/
		// sinon, pseudo ou email existant / 
		else 
		{
			if ($donnees2 == null ) // si email libre => pb sur le pseudo
			{
				echo ("Ce pseudonyme est déjà utilisé, veuillez en choisir un autre / ");
			}
			if ($donnees3 == null ) // si pseudo libre => email déjà pris
			{
				echo ("Cet e-mail est déjà utilisé, veuillez en choisir un autre");
			}
			include("fr_formulaire_inscription.php");
		}
 
	}
}
else // On vient du lien pour créer un compte
{ 
	include("fr_formulaire_inscription.php");
}
 
?>
Page pour s'authentifier
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
 
<?php
 
/*---------------------------------------------------------------------------------*/
// Si la session existe (au moins 2eme visite)
 
if (isset($_SESSION['login']) AND isset($_SESSION['mdp'])) 
{
	echo "<br>Bonjour" . " " . $_SESSION['pseudo'];
?>
	<br><a href="fr_mon_compte.php"> Mon compte </a><br>
	<a href="fr_deconnexion.php">Se déconnecter.</a>
<?php
}
/*---------------------------------------------------------------------------------*/
// pas de session, on a cliqué sur OK mais un ou deux champs sont vides 
else if ((isset ($_POST['login']) AND isset($_POST['mdp'])) AND (empty($_POST['login']) OR empty($_POST['mdp'])))
{
	echo "<br>Nom d'utilisateur et / ou mot de passe manquant <br>";
	include("fr_login.php");		
}
 
/*---------------------------------------------------------------------------------*/
// pas de session, on a cliqué sur OK et les deux champs sont remplis
else if ((isset ($_POST['login']) AND ($_POST['mdp'])) AND (!empty($_POST['login']) AND !empty($_POST['mdp']))) 
{
	//  Connexion à la base de données 
	include("fr_connexion_bdd_online.php");
 
	//Sécurisation :
	$login = mySQL_real_escape_string($_POST['login']);
	$mdp = mySQL_real_escape_string($_POST['mdp']);
 
	//Requête : récupération et vérification de l'authentification
	$requete=mySQL_query
	("SELECT 
		pseudo
		, email
		, mdp1
		, compte_actif
	FROM Client 
	WHERE email='".$login."' 
	OR pseudo='".$login."' 
	AND mdp1='"./*md5($_POST['mdp'])*/$_POST['mdp']."'
	");
 
	$donnees = mysql_fetch_array($requete);
 
	/*---------------------------------------------------------------------------------*/
	// si pas de correspondance
	if ($donnees == null ) 
	{
		echo "<br>Nom d'utilisateur et / ou mot de passe incorrect <br>";
		include("fr_login.php");		
	} 
 
	/*---------------------------------------------------------------------------------*/
	// sinon correspondance trouvé, compte actif ? 
	else 
	{
		if($donnees['compte_actif']==0)
		{
			echo("Compte existant mais inactif, veuillez consulter vos e-mails.");
			include("fr_login.php");
		}
		// auth OK, on souhaite la bienvenue, le "panneau client" s'affiche
		else
		{
			$_SESSION['pseudo']=$donnees['pseudo'];
			$_SESSION['login']=$donnees['email'];			
			$_SESSION['mdp']=$donnees['mdp1'];
			echo "<br>Bonjour " . " " . $_SESSION['pseudo'];
?>
			<br><a href="fr_mon_compte.php"> Mon compte </a><br>
			<a href="fr_deconnexion.php">Se déconnecter.</a>
<?php
		}
	}
}
 
/*---------------------------------------------------------------------------------*/
// première page, première visite, pas de session, on n'a pas cliqué sur OK, on affiche la page login
else 
{
	include("fr_login.php");
}
?>
Enfin Page pour activer le compte
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
 
<?php
  // Vérifie que de bonnes valeurs sont passées en paramètres
    if(!ereg("^[0-9]+$", $_GET["id"]) || !ereg("^[a-f0-9]{8}$", strtolower($_GET["clef"])))
    {
        header("Location: index.php");
    }
    else
    {
 
        // Connexion à la base de données
        include("fr_connexion_bdd_online.php");
 
        // Sélection de l'utilisateur concerné
        $result = mysql_query("
            SELECT idclient
                , compte_actif
                , code_activation
            FROM client
            WHERE idclient = '" . $_GET["id"] . "'
            AND code_activation = '" . strtolower($_GET["clef"]) . "'
        ");
 
        // Si une erreur survient
        if(!$result)
        {
            echo("Une erreur est survenue lors de l'activation de votre compte utilisateur");
        }
        else
        {
 
            // Si aucun enregistrement n'est trouvé
            if(mysql_num_rows($result) == 0)
            {
                header("Location: index.php");
            }
            else
            {
 
                // Récupération du tableau de données retourné
                $row = mysql_fetch_array($result);
 
                // Vérification que le compte ne soit pas déjà activé
                if($row["Compte_Actif"] != 0)
                {
                    echo("Votre compte utilisateur a déjà été activé");
                }
                else
                {
 
                    // Activation du compte utilisateur
                    $result = mysql_query
						("
						UPDATE client
						SET Compte_Actif = '1'
                        WHERE idclient = '" . $_GET["id"] . "'
                        AND code_activation = '" . strtolower($_GET["clef"]) . "'
                        ");
 
                    // Si une erreur survient
                    if(!$result)
                    {
                       echo("Une erreur est survenue lors de l'activation de votre compte utilisateur");
					}
                    else
					{
						echo("Votre compte utilisateur a correctement été activé \n");
                    }
                }    
            }   
        }
	}
?>
Voilà, je pense que vous avez toutes les armes en main pour me fouetter, enfin m'aider je veux dire.

En espérant ne pas avoir fait trop de bourdes, de suis plutôt débutant dans cette discipline.

D'avance merci mesdemoiselles mesdames et messieurs. (slurrrrrrrrrp )