Php/Sql, connexion pour espace membre
Babriehead
Messages postés
63
Date d'inscription
Statut
Membre
Dernière intervention
-
Babriehead Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
Babriehead Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai enfin réussi a inscrire des données entrée par l'U grace a un formulaire.
Sur une page de connexion, l'U entre son login et mot de passe, et la ça coince, je n'arrive pas a comparer les donnée entre-elle.
Je suis débutant en Php, voici le code :
J'ai enfin réussi a inscrire des données entrée par l'U grace a un formulaire.
Sur une page de connexion, l'U entre son login et mot de passe, et la ça coince, je n'arrive pas a comparer les donnée entre-elle.
Je suis débutant en Php, voici le code :
<?php try { $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=ae', 'root', '', $pdo_options); $req = $bdd->prepare('SELECT * FROM membre WHERE login = :login AND pass = :pass'); $req->execute(array( 'login' => $_POST['login'], 'password' => $_POST['password'], )); header('Location: inscription.php'); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?>
A voir également:
- Php/Sql, connexion pour espace membre
- Gmail connexion - Guide
- Espace insécable - Guide
- Espace de stockage gmail plein - Guide
- Membre indisponible vinted - Guide
- Connexion chromecast - Guide
3 réponses
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,
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.
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
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>
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
Oui en effet, ceci est une erreur vraiment bête !
Merci !