Php/Sql, connexion pour espace membre
Fermé
Babriehead
Messages postés
63
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
12 janvier 2017
-
29 sept. 2016 à 15:14
Babriehead Messages postés 63 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 12 janvier 2017 - 10 oct. 2016 à 15:30
Babriehead Messages postés 63 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 12 janvier 2017 - 10 oct. 2016 à 15:30
A voir également:
- Php/Sql, connexion pour espace membre
- Espace insécable word - Guide
- Gmail connexion - Guide
- Hotmail connexion - Guide
- Comment liberer de l'espace sur gmail - Guide
- Membre indisponible vinted - Guide
3 réponses
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
29 sept. 2016 à 16:16
29 sept. 2016 à 16:16
Salut,
Un jeton dans la requête préparée n'est lié à aucune données :
- jeton "pass" dans la requête
- clé "password" dans la méthode execute
Il faut simplement utiliser le même identifiant pour ton jeton dans la méthode execute.
Bonne journée,
Un jeton dans la requête préparée n'est lié à aucune données :
- jeton "pass" dans la requête
- clé "password" dans la méthode execute
Il faut simplement utiliser le même identifiant pour ton jeton dans la méthode execute.
Bonne journée,
gardiendelanuit
Messages postés
1770
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
19 novembre 2016
264
Modifié par gardiendelanuit le 29/09/2016 à 17:10
Modifié par gardiendelanuit le 29/09/2016 à 17:10
Bonjour,
Il y a deux choses dans ton code:
Comme le fait remarquer Pitet, le jeton pass ne correspond pas à celui déclaré dans execute.
De plus, tes jetons doivent être déclarés avec les ':' tout comme dans la requête.
Ainsi on a:
Merci de mettre "Résolu" quand le problème est réglé!
La connaissance c'est comme la confiture: moins on en a et plus on l'étale.
Il y a deux choses dans ton code:
Comme le fait remarquer Pitet, le jeton pass ne correspond pas à celui déclaré dans execute.
De plus, tes jetons doivent être déclarés avec les ':' tout comme dans la requête.
Ainsi on a:
$req->execute(array( ':login' => $_POST['login'], ':pass' => $_POST['password'] ));
Merci de mettre "Résolu" quand le problème est réglé!
La connaissance c'est comme la confiture: moins on en a et plus on l'étale.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
29 sept. 2016 à 17:15
29 sept. 2016 à 17:15
Non plus, les ':' sont optionnels dans le tableau passé à la méthode execute :
https://www.php.net/manual/fr/pdostatement.execute.php#Hcom71929
https://www.php.net/manual/fr/pdostatement.execute.php#Hcom71929
gardiendelanuit
Messages postés
1770
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
19 novembre 2016
264
Modifié par gardiendelanuit le 29/09/2016 à 17:55
Modifié par gardiendelanuit le 29/09/2016 à 17:55
En effet! Autant pour moi.
La seule différence sera alors une exécution très légèrement plus rapide :D
Selon le code source de PDO:
Source: https://github.com/php/php-src/blob/master/ext/pdo/pdo_stmt.c#L363</i>
La seule différence sera alors une exécution très légèrement plus rapide :D
Selon le code source de PDO:
if (param->name) { if (is_param && ZSTR_VAL(param->name)[0] != ':') { zend_string *temp = zend_string_alloc(ZSTR_LEN(param->name) + 1, 0); ZSTR_VAL(temp)[0] = ':'; memmove(ZSTR_VAL(temp) + 1, ZSTR_VAL(param->name), ZSTR_LEN(param->name) + 1); param->name = temp; } else { param->name = zend_string_init(ZSTR_VAL(param->name), ZSTR_LEN(param->name), 0); } }
Source: https://github.com/php/php-src/blob/master/ext/pdo/pdo_stmt.c#L363</i>
jordane45
Messages postés
38320
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 novembre 2024
4 707
Modifié par jordane45 le 29/09/2016 à 17:24
Modifié par jordane45 le 29/09/2016 à 17:24
Bonjour,
En complément de la solution donnée plus haut ...
1 - Prend l'habitude de placer le code de connexion à ta BDD dans un fichier à part que tu n'auras plus qu'à inclure dans tes pages. (au lieu de copier/coller ce bout de code à chaque fois que tu as besoin de faire une requête dans ta bdd...)
Pour la connexion... je te propose de l'écrire comme ceci :
nb: tu noteras la présence du charset utf8 ... pour la prise en charge correcte des caractères accentués. (pour tout mettre au carré.. il faut aussi définir l'utf8 dans le header de tes pages html et dans tes fichiers php. Pour cela, je t'invite à lire ceci : https://j-willette.developpez.com/tutoriels/web/encoder-son-site-en-utf8/
2 - Prend l'habitude de récupérer PROPREMENT tes variables AVANT de les utiliser.
Pour cela.. on utilise l'écriture TERNAIRE (voir ici les explications : https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index )
3 - Pour finir.. prend l'habitude de séparer, des instructions pdo prepare et execute, les variables.
Avec tout ça ton code devient :
Cordialement,
Jordane
En complément de la solution donnée plus haut ...
1 - Prend l'habitude de placer le code de connexion à ta BDD dans un fichier à part que tu n'auras plus qu'à inclure dans tes pages. (au lieu de copier/coller ce bout de code à chaque fois que tu as besoin de faire une requête dans ta bdd...)
Pour la connexion... je te propose de l'écrire comme ceci :
<?php // Fichier de connexion à la bdd : cnxBdd.php try{ $bdd =new PDO('mysql:host=localhost; dbname=mabdd; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); }
nb: tu noteras la présence du charset utf8 ... pour la prise en charge correcte des caractères accentués. (pour tout mettre au carré.. il faut aussi définir l'utf8 dans le header de tes pages html et dans tes fichiers php. Pour cela, je t'invite à lire ceci : https://j-willette.developpez.com/tutoriels/web/encoder-son-site-en-utf8/
2 - Prend l'habitude de récupérer PROPREMENT tes variables AVANT de les utiliser.
Pour cela.. on utilise l'écriture TERNAIRE (voir ici les explications : https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index )
3 - Pour finir.. prend l'habitude de séparer, des instructions pdo prepare et execute, les variables.
Avec tout ça ton code devient :
<?php //affichage des erreurs php error_reporting(E_ALL); //connexion à la Bdd require_once "cnxBdd.php"; //récupération PROPRE des variables : $login = !empty($_POST['login']) ? $_POST['login'] : NULL; $password= !empty($_POST['password']) ? $_POST['password'] : NULL; if($login && $password ){ //préparation de la requête et des variables $sql = "SELECT * FROM membre WHERE login = :login AND pass = :pass"; $datas = array(':login'=>$login, ':pass'=>$password); //Execution de la requete try{ $requete = $bdd->prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } }
Cordialement,
Jordane
Babriehead
Messages postés
63
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
12 janvier 2017
4
10 oct. 2016 à 15:26
10 oct. 2016 à 15:26
Bonjour, désolé pour le rétard !
Merci pour votre réponse, je vais étudier tout ça dans l'aprés-midi, j'éspére mieux comprendre grace a vous tous !
Merci pour votre réponse, je vais étudier tout ça dans l'aprés-midi, j'éspére mieux comprendre grace a vous tous !
Babriehead
Messages postés
63
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
12 janvier 2017
4
10 oct. 2016 à 15:30
10 oct. 2016 à 15:30
Ok merci, j'avoue que mon code est vraiment sale, des bouts récupéré, assemblé !
Merci pour la correction, je vais pouvoir m'en servir comme modéle de base !
Merci pour la correction, je vais pouvoir m'en servir comme modéle de base !
10 oct. 2016 à 15:27
Oui en effet, ceci est une erreur vraiment bête !
Merci !