Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/10/2012, 14h01   #1
thebarbarius
Inactif
 
Inscription : octobre 2008
Messages : 826
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 826
Points : 128
Points : 128
Par défaut requete SQL qui bug

Bonjours,

Je rencontre une nouvelle erreur.

Voici le code :
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
 
public function login($pseudo, $password) {
echo $pseudo . '<br />';
echo $password;
$dbh = mysql::getInstance();
$sql = "SELECT count(*) AS nombreUser
FROM account
WHERE playername = '".$pseudo."'
AND password = '".$password."'";
$requete = $dbh->prepare($sql);
$requete->execute();
$nombreUser = $requete->fetch(PDO::FETCH_ASSOC);
 
if (empty($pseudo) && empty($password) || !isset($pseudo) && !isset($password)) {
echo "Erreur : Toutes les donnés ne sont pas fournis !";
return FALSE;
}
else {
if ($nombreUser['nombreUser'] < 1) {
echo "Erreur : Compte innexistant !";
return FALSE;
}
if ($nombreUser['nombreUser'] > 0) {
echo "Felicitation : Connecter avec succes !";
$this->retour = TRUE;
 
$_SESSION['user']['pseudo'] = $prenom;
$_SESSION['user']['password'] = $password;
return TRUE;
}
}
}
Sa me met met que le compte inexistant alors qu'il existe dans la BDD

Merci

PS : ne clôturer pas le topic il est important.

Merci
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 14h15   #2
andry.aime
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 6 368
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 6 368
Points : 9 996
Points : 9 996
Bonjour,

1- Tu utilise PDO prepare or que tu mets directement les valeurs dans la requête. C'est pas bon, regarde un exemple sur le manuel php.

2- C'est après que tu as exécuté la requête que tu as testé si les données existent ou non.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 14h20   #3
thebarbarius
Inactif
 
Inscription : octobre 2008
Messages : 826
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 826
Points : 128
Points : 128
Et bien vs script fonctionne très bien sur mon autre script.

Essaye ma fonction et si tu trouve la solution ce sera un miracle.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 14h35   #4
thebarbarius
Inactif
 
Inscription : octobre 2008
Messages : 826
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 826
Points : 128
Points : 128
J'ai trouvé une erreur j'ai oublié le s a account (table).

Mais sa marche pas quand meme.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 14h55   #5
andry.aime
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 6 368
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 6 368
Points : 9 996
Points : 9 996
1- Tu ne dois pas mettre en dur les valeurs dans la requête mais les mettre en paramètre de la fonction execute.
2- Tu as testés l’existence de variable "(empty($pseudo) && empty($password)" après avoir exécuté la requête, or que tu devrais le faire avant la requête.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 14h59   #6
thebarbarius
Inactif
 
Inscription : octobre 2008
Messages : 826
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 826
Points : 128
Points : 128
Oui j'ai testé ces valeurs.

Sa retourne ce qu'il faut.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 15h09   #7
andry.aime
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 6 368
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 6 368
Points : 9 996
Points : 9 996
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
 
public function login($pseudo, $password) {
echo $pseudo . '<br />';
echo $password;
$dbh = mysql::getInstance();
$sql = "SELECT count(*) AS nombreUser
FROM account
WHERE playername = '".$pseudo."'  // Tu ne dois pas mettre ces valeurs directement dans la requête
AND password = '".$password."'";
$requete = $dbh->prepare($sql); 
$requete->execute(); // Tu dois mettre en paramètre de cette fonction les valeurs que tu as mis dans $sql
$nombreUser = $requete->fetch(PDO::FETCH_ASSOC);
 
if (empty($pseudo) && empty($password) || !isset($pseudo) && !isset($password)) {  // C'est avant de lancer la requête que tu dois tester ça
echo "Erreur : Toutes les donnés ne sont pas fournis !";
return FALSE;
}
else {
if ($nombreUser['nombreUser'] < 1) {
echo "Erreur : Compte innexistant !";
return FALSE;
}
if ($nombreUser['nombreUser'] > 0) {
echo "Felicitation : Connecter avec succes !";
$this->retour = TRUE;
 
$_SESSION['user']['pseudo'] = $prenom;
$_SESSION['user']['password'] = $password;
return TRUE;
}
}
}
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 15h19   #8
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 599
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 599
Points : 6 116
Points : 6 116
Envoyer un message via Skype™ à rawsrc
A savoir que empty() englobe isset().
C'est un pléonasme que d'utiliser les deux simultanément.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 16h04   #9
thebarbarius
Inactif
 
Inscription : octobre 2008
Messages : 826
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 826
Points : 128
Points : 128
S'il vous plait aider moi.

Voici le sql :
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
 
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Ven 05 Octobre 2012 à 14:03
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.5
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- Base de données: `darkminevqs4`
--
 
-- --------------------------------------------------------
 
--
-- Structure de la table `accounts`
--
 
CREATE TABLE IF NOT EXISTS `accounts` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `playername` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `pwtype` tinyint(2) unsigned NOT NULL DEFAULT '0',
  `email` varchar(100) NOT NULL,
  `registerdate` date NOT NULL,
  `registerip` char(45) NOT NULL,
  `lastlogindate` datetime NOT NULL,
  `lastloginip` char(45) NOT NULL,
  `active` tinyint(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
 
--
-- Contenu de la table `accounts`
--
 
INSERT INTO `accounts` (`id`, `playername`, `password`, `pwtype`, `email`, `registerdate`, `registerip`, `lastlogindate`, `lastloginip`, `active`) VALUES
(6, 'anju', 'anju', 0, 'anju', '2012-10-05', '', '0000-00-00 00:00:00', '', 0);
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 16h17   #10
andry.aime
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 6 368
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 6 368
Points : 9 996
Points : 9 996
Citation:
Envoyé par thebarbarius Voir le message
S'il vous plait aider moi.
On ne t'aide pas là ?
N'attend pas qu'on va coder à ta place.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 16h49   #11
thebarbarius
Inactif
 
Inscription : octobre 2008
Messages : 826
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 826
Points : 128
Points : 128
J'ai trouvé l'erreur et je vous remercie.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h13.


 
 
 
 
Partenaires

Hébergement Web