Bonjour,
Je suis buté à un problème depuis cette apres-midi, j'essai de faire en sorte que les administrateurs du site puisse se connectés via une page admin et un compte (déjà enregistré). Le script sert à comparer les logs tapés et les logs de la BDD.
Voici donc ce que j'ai commencé :
<?php
$dsn = 'mysql:dbname=mysql;host=localhost';
$user = 'masso';
$pass = '0000';
try{
$bdd = new PDO($dsn, $user, $pass);
}catch(PDOException $e) {
echo "Connection échouée : ".$e->getMessage();
}
$login = htmlspecialchars($_POST['login']);
$password = htmlspecialchars($_POST['password']);
$verif_login = $bdd->query("SELECT COUNT(*) FROM user WHERE User= " + $login);
if($verif_login == 0){
header('location:../index.php');
}else{
$result_login = $bdd->query('SELECT Password FROM user WHERE User = '+ $login +' LIMIT 1');
$donnees = $result_login->fetch();
if(!$password == $donnees['password']){
echo "Pas de bol";
}else{
echo "ENFIN !!!!!";
}
$result_login->closeCursor();
}
?>
J'ai constater que le fonction COUNT() de la requete ne renvoi rien alors qu'elle devrait non ? (je precise quand même que les coordonnées de la base de donnée sont correctes).
Quand je remplace le premier header par un print c'est la page blanche.
j'ai essayé plusieurs fonction de PDO et PDOStatement, il n'y en a qu'une qui m'a retourné un résultat mais erroné..
Si vous avez des idées je suis preneur car personnellement je plante ^^.
Ah oui, au tant pour moi.
query renvoie des données qu'il faut "fetcher" avec un $data = $verif_login->fetch();
et c'est $data qu'il faudra exploiter
oui, si vous regarder la doc de fetch ou fetchall, vous pourrez aussi retourner un tableau ou un objet....
Bonsoir.
La concaténation de chaîne se fait par un . et non par +
Le +, c'est en js (^_^)
De plus le "if( !$password == ..." ne va pas
j'ai de toute façon essayé les deux :/
(ps : je crois que dans des requetes SQL l'injection se fait avec '+'.
Mais ce n'est pas ça le soucis il m'aurait retourné une erreur, mais là rien
Pour concaténer des chaînes en php il faut utiliser des . et non des +
$verif_login = $bdd->query("SELECT COUNT(*) FROM user WHERE User=".$login);
Sinon pourquoi ne pas directement faire un select * from user where login = $login and password = $password ?
Et par convention les champs en bdd sont en miniscule :)
j'en ai jamais vu alors de + hormis pour les addictions de table
Vous avez tester directement dans phpmyadmin votre requête ?
@TrimA74 : comme je l'ai dit avant ce n'est de toute façon pas la concaténation qui pose problème.
C'est pour faire des conditions dérière.
@Carouge10 Ok, Oui sur SQL directe la requete marche bien est retourne belle et bien 1
Regarde ce qu'il y a dans $login avant que la requête s'éxécute ou remplace cette variable par une valeur brute
Pour le errorInfo() Trim, il me renvoi ceci :
Array ( [0] => 42S22 [1] => 1054 [2] => Unknown column 'masso' in 'where clause' )
C'est la même erreur que j'obtiens quand je rentre directement la requete sur phpmyadmin sans mettre de ' ' à masso.
J'ai deja remplacé $login par masso et même resultat
$verif_login = $bdd->query("SELECT COUNT(*) FROM user WHERE User='".$login."'");
Et comme ça, cela donne quoi ?
Ok plus d'erreur du coté quote TrimA74 merci.
Par contre il me dit un truc rigolo c'est que les objets de la class PDOStatement ne peuvent pas etre converti en int (en faisait reference à mon if d'apres). Alors que query() n'est pas de cette class ^^
Je n'ai pas compris Carouge, le fait qu'il considere que query() = queryString() qui lui est de Statement ?.
Si non j'ai remplacé COUNT() par seulement et du coup j'ai remplacé le if par == false.
Mais ça revient au même, il me renvoi au else que j'ai rentré le bon nom ou non :/
il me dit rien de spécial :
object(PDOStatement)[2]
public 'queryString' => string 'SELECT * FROM user WHERE User='masso'' (length=37)
(quand j'ecris masso dans le formulaire)
Ha ok Carouge :) Je crois que c'est la bonne voie.
Du coup il me renvoi un tableau avec tous les parametres de l'utilisateur.
Je n'ai plus qu'à selectionner l'element que je veux tester je pense
Super ! Merci à toi en tout cas (vive les couche-tard)
Il y a quelques erreur apres mais c'est normal ^^.
A bientôt.