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 06/02/2011, 00h57   #1
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
Par défaut Système de confirmation

Bonsoir,

Voilà j'ai réussi a installer un système de confirmation par e-mailsuivant mon post :
http://www.developpez.net/forums/d10...mation-e-mail/

Mais le problème vien d'ici :

(je mes le tout en images) :

Voilà le problème que j'ai :



Voilà donc mon code et se que j'ai mi a la ligne "34" :



J'ai aussi essayer avec INSERT a la place de UPDATE .

J'utilise navicat en BDD.

Pouvez-vous m'aider s'il vous plaît ?

ps : si vous avez besoins d'autre choses n'esiter pas a me le demander.

Cordialement,
fafe93

PS2: c'est très urgent s'il vous plaît :s .
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 01h44   #2
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
Slt,
As tu instancier ton objet $dbh, du genre $dbh = new PDO(...) ?
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 03h01   #3
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
Euhhh J'ai pas compris la :^) .
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 03h35   #4
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
dans ton code plus haut as tu cette ligne de code :
Code php :
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
avec les paramètres de connexions de ta base de données ?
apparemment tu appelles une fonction sur une variable qui n'est pas un objet...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 19h02   #5
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
Je te passe tout mon code je pense que se sera plus simple ^^ ( c'est dans la pages 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
 
<?php
/**
 *		MT2-CMS
 *	@author JigSaw <jigsaw-mt2@laposte.net>
 *	@license http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 *	@version b1.002 24/04/2010
 *	@link http://mt2cms.free.fr
 *
 *		[inscription.php]
 *	Page d'inscription. C'est grâce à cette page que vos membres pourrons s'inscrire sur votre site.
 *	
 *
 **/
 
//Si on envoie le formulaire et que l'inscription est activé
if(isset($_POST['login']) and isset($_POST['mail']) and isset($_POST['mdp']) and $CONFIG['inscription'] == 1) 
{
	$tpl->assign('envoie_form', '1');
 
	//Sécurité : On protège les varriables.
 
	$pseudo=mysql_real_escape_string($_POST['login']);        
	$mdp=mysql_real_escape_string($_POST['mdp']);
	$mail=mysql_real_escape_string($_POST['mail']);
 
	// Récupération des variables nécessaires au mail de confirmation
    $email = $_POST['email'];
    $login = $_POST['login'];
 
	// Génération aléatoire d'une clé
    $cle = md5(microtime(TRUE)*100000);
 
	// Insertion de la clé dans la base de données (à adapter en INSERT si besoin)
    $stmt = $dbh->prepare("UPDATE account SET cle=:cle WHERE login like :login");
    $stmt->bindParam(':cle', $cle);
    $stmt->bindParam(':login', $login);
    $stmt->execute();
 
	// Préparation du mail contenant le lien d'activation
    $destinataire = $email;
    $sujet = "Activer votre compte" ;
    $entete = "From: : inscription@wheelingmt2.com" ;
 
	// Le lien d'activation est composé du login(log) et de la clé(cle)
   $message = 'Bienvenue sur WheelingMT2,
   Pour activer votre compte, veuillez cliquer sur le lien ci dessous
   ou copier/coller dans votre navigateur internet.
   http://www.wheelingmt2.fr/activation.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
 
	$errors = '';
 
	//Si le mail est valide
	if(preg_match('#^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$#', $mail))
	{
		//Si le pseudo est supérieur à* 4 caractères et inférieur à* 17 caractères.
		if (strlen(trim($pseudo)) > 4 && strlen(trim($pseudo)) < 17)
		{
			//Si le mot de passe est supérieur à* 4 caractères et inférieur à* 17 caractères.
			if (strlen(trim($mdp)) > 4 && strlen(trim($mdp)) < 17)
			{
				//On vérifie que le pseudo n'existe pas.
				mysql_select_db("account");
				$sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM `account` WHERE login='$pseudo'");
				if (mysql_result($sql, 0, 'nb_pseudo') == 0)
				{
					$date = date("Y-m-d H:i:s");
 
					//Insertion dans la base de donnée
					$sql="INSERT INTO account (login, password, email, create_time, cash, rang) VALUES ('$pseudo', password ('$mdp'), '$mail', '$date', '0', '1')";
					mysql_query($sql) or die (mysql_error());
 
				}
				else { $errors =5; }//5: Ce pseudo est déjà utilisé.
			}
			else { $errors =4; }//4: Le mot de passe doit être compris entre 5 et 16 caractères.
		}
		else { $errors =3; }//3:Le pseudo doit être compris entre 5 et 16 caractères.
	}
	else { $errors =2; }//2: Votre email est invalide.
 
 
if($errors == '') //Si l'inscription a fonctioné
{ $tpl->assign('valid_form', '1'); }
else //Sinon on charge les erreurs
{ $tpl->assign('valid_form', $errors); }
 
}
//Si on envoie pas le formulaire, on l'affiche
else 
{
	$tpl->assign('envoie_form', '0');
 
	if($CONFIG['inscription'] == 0) {$tpl->assign('conf_inscription', '0');} //Inscription Désactivé
	else {$tpl->assign('conf_inscription', '1');} //Inscription Activé 
}
$tpl -> parse('public/inscription.tpl');
?>

Et dans une pages que j'ai créer (appeller activation) :

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
 
<?php
/**
 *		MT2-CMS
 *	@author JigSaw <jigsaw-mt2@laposte.net>
 *	@license http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 *	@version b1.002 24/04/2010
 *	@link http://mt2cms.free.fr
 *
 *		[inscription.php]
 *	Page d'inscription. C'est grâce à cette page que vos membres pourrons s'inscrire sur votre site.
 *	
 *
 **/
 <?
 
 <?php
 
     // 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
     $stmt = $dbh->prepare("SELECT cle,actif FROM membres WHERE login like :login ");
     if($stmt->execute(array(':login' => $login)) && $row = $stmt->fetch())
     }  
     $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
          $stmt = $dbh->prepare("UPDATE membres SET actif = 1 WHERE login like :login ");
          $stmt->bindParam(':login', $login);
          $stmt->execute();
{       
     else // Si les deux clés sont différentes on provoque une erreur...
}       
          echo "Erreur ! Votre compte ne peut être activé...";
{       
{  
 
   <?

Sachant que ma base de donner "membres" s'appelle "account".
Sachant que dans ma base "account" j'ai créer 2 tables appeller "cle" et "login".

Voilà merci de votre aide.
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 19h11   #6
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
si c'est tout ton code, il manque bien :

Code php :
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

pour établir une connexion avec ta base de données, tu peux le faire juste avant le code qui insère les données dans ta base, tu remplace localhost par l'adresse de ton serveur de bdd, test par le nom de ta base, $user par ton nom d'utilisateur et $pass par ton mot de passe si tu en as un...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 19h48   #7
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
D'accord et je met sa juste avant sa ? :

Code :
1
2
3
4
5
6
 
	// Insertion de la clé dans la base de données (à adapter en INSERT si besoin)
    $stmt = $dbh->prepare("UPDATE account SET cle=:cle WHERE login like :login");
    $stmt->bindParam(':cle', $cle);
    $stmt->bindParam(':login', $login);
    $stmt->execute();
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 19h52   #8
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
yep, en gros c'est la première chose que tu dois faire avant de pouvoir exécuter des requêtes...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/02/2011, 20h43   #9
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
Voici se que j'ai mi :

Code :
1
2
3
 
	// Connection a la base de donnée
	$dbh = new PDO('mysql:host=(adresse de connection);dbname=account', $user, $pass);
et voilà se que sa me fait :



je tien a dire que j'ai placer le code juste pile au dessus de l'autre code mis tout a l'heure.
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 21h36   #10
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
a la place de $user as tu mis ton nom d'utilisateur et ton mot de passe pour $pass ?
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 21h46   #11
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
Donc sa devrai faire comme sa ?:

Code :
1
2
3
 
// Connection a la base de donnée
	$dbh = new PDO('mysql:host=(adresse de connection);dbname=account', 'exemple', 'exemple2');
exemple = identifient
exemple2 = mots de passe
sans rien autour juste les id et mdp mis comme sa?
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 22h06   #12
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
voila c'est bien ca...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 22h39   #13
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
Après avoir placer se code la :

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
 
<?php
/**
 *		MT2-CMS
 *	@author JigSaw <jigsaw-mt2@laposte.net>
 *	@license http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 *	@version b1.002 24/04/2010
 *	@link http://mt2cms.free.fr
 *
 *		[inscription.php]
 *	Page d'inscription. C'est grâce à cette page que vos membres pourrons s'inscrire sur votre site.
 *	
 *
 **/
 
//Si on envoie le formulaire et que l'inscription est activé
if(isset($_POST['login']) and isset($_POST['mail']) and isset($_POST['mdp']) and $CONFIG['inscription'] == 1) 
{
	$tpl->assign('envoie_form', '1');
 
	//Sécurité : On protège les varriables.
 
	$pseudo=mysql_real_escape_string($_POST['login']);        
	$mdp=mysql_real_escape_string($_POST['mdp']);
	$mail=mysql_real_escape_string($_POST['mail']);
 
	// Récupération des variables nécessaires au mail de confirmation
    $email = $_POST['email'];
    $login = $_POST['login'];
 
	// Génération aléatoire d'une clé
    $cle = md5(microtime(TRUE)*100000);
 
	// Connection a la base de donnée
	$dbh = new PDO('mysql:host=192.168.0.14;dbname=account', '(id)', '(code)');
 
    // Insertion de la clé dans la base de données (à adapter en INSERT si besoin)
    $stmt = $dbh->prepare("INSERT account SET cle=:cle WHERE login like :login");
    $stmt->bindParam(':cle', $cle);
    $stmt->bindParam(':login', $login);
    $stmt->execute();
 
	// Préparation du mail contenant le lien d'activation
    $destinataire = $email;
    $sujet = "Activer votre compte" ;
    $entete = "From: : inscription@wheelingmt2.com" ;
 
	// Le lien d'activation est composé du login(log) et de la clé(cle)
   $message = 'Bienvenue sur WheelingMT2,
   Pour activer votre compte, veuillez cliquer sur le lien ci dessous
   ou copier/coller dans votre navigateur internet.
   http://www.wheelingmt2.fr/activation.php?log='.urlencode($login).'&cle=5a2Bc-5.E'.urlencode($cle).'
                      ---------------
   Ceci est un mail automatique, Merci de ne pas y répondre.';
   mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
 
	$errors = '';
 
	//Si le mail est valide
	if(preg_match('#^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$#', $mail))
	{
		//Si le pseudo est supérieur à* 4 caractères et inférieur à* 17 caractères.
		if (strlen(trim($pseudo)) > 4 && strlen(trim($pseudo)) < 17)
		{
			//Si le mot de passe est supérieur à* 4 caractères et inférieur à* 17 caractères.
			if (strlen(trim($mdp)) > 4 && strlen(trim($mdp)) < 17)
			{
				//On vérifie que le pseudo n'existe pas.
				mysql_select_db("account");
				$sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM `account` WHERE login='$pseudo'");
				if (mysql_result($sql, 0, 'nb_pseudo') == 0)
				{
					$date = date("Y-m-d H:i:s");
 
					//Insertion dans la base de donnée
					$sql="INSERT INTO account (login, password, email, create_time, cash, rang) VALUES ('$pseudo', password ('$mdp'), '$mail', '$date', '0', '1')";
					mysql_query($sql) or die (mysql_error());
 
				}
				else { $errors =5; }//5: Ce pseudo est déjà utilisé.
			}
			else { $errors =4; }//4: Le mot de passe doit être compris entre 5 et 16 caractères.
		}
		else { $errors =3; }//3:Le pseudo doit être compris entre 5 et 16 caractères.
	}
	else { $errors =2; }//2: Votre email est invalide.
 
 
if($errors == '') //Si l'inscription a fonctioné
{ $tpl->assign('valid_form', '1'); }
else //Sinon on charge les erreurs
{ $tpl->assign('valid_form', $errors); }
 
}
//Si on envoie pas le formulaire, on l'affiche
else 
{
	$tpl->assign('envoie_form', '0');
 
	if($CONFIG['inscription'] == 0) {$tpl->assign('conf_inscription', '0');} //Inscription Désactivé
	else {$tpl->assign('conf_inscription', '1');} //Inscription Activé 
}
$tpl -> parse('public/inscription.tpl');
?>
Voilà sa que sa me marque :



Je vois vraiment personnellement pas d'ou vien le problème :s.
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 22h40   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
que soit c'est pas la bonne adresse, soit ton serveur MySQL n'est pas démarrer
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 23h06   #15
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
MySQL est démarrer et c'est la bonne adresse
(adresse utiliser pour se connecter a MySQL)
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 23h10   #16
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
ton serveur est en local ou c'est un serveur distant?
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 23h11   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par fafe93 Voir le message
MySQL est demarer et ses la bonne adresse
(adresse utiliser pour se connecter a MySQL)
visiblement non.
fait un localhost à la place
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 23h17   #18
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
C'est à dire ?
que dans le code je met localhost a la place de l'adresse ?
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 23h18   #19
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par fafe93 Voir le message
C'est à dire ?
que dans le code je met localhost a la place de l'adresse ?
dans le DSN de la connexion pour le host
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 23h29   #20
 
Inscription : décembre 2010
Messages : 70
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 70
Points : -1
Points : -1
Je ne suis pas très fort en ça je vous explique :

Je fait un serveur d'un jeu et j'utilise Virtual PC mon serveur marche sous no-ip donc je ne peut pas changer d'adresse ip.

mon site se connecte biensur directement a la base de donnée (navicat)
localhost ne fonctionne pas dans navicat.

je ne sais pas se que sais le DSN .
fafe93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web