Problème Log In

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème Log In

Re: Problème Log In

par moogli » 12 août 2011, 15:04

Aucun point de la doc php ne déprécie l'extension mysql.
http://www.php.net/manual/fr/intro.mysql.php
Pour une présentation générale de la base de données MySQL, voyez Introduction.
envoie sur => http://www.php.net/manual/fr/mysqli.overview.php <= note bien le i
http://www.php.net/manual/fr/mysql.installation.php
Bien que cette extension MySQL soit compatible avec MySQL 4.1.0 et supérieur, elle ne supporte pas les fonctionnalités supplémentaires que cette version fournit. Pour cela, utilisez plutôt l'extension MySQLi.
et si tu lit http://www.php.net/manual/fr/mysqli.overview.php tu verra que l'extension est en "maintenance" seulement. bref on corrige au mieux, mysqli permet de "mieux" tirer partie des dernière version de mysql. Mais c'est vrai ce n'est pas indiqué explicitement dans la doc de php.

si tu veux faire de l'utf-8 il existe utf_encode et permettre de garder les chaines originelles dans la table.
htmlentities — Convertit tous les caractères éligibles en entités HTML
donc pour l'édition c'est le brin ;)

dans parler du fait que si derrière tu souhaite faire autre chose que du html t'est dans la merde ;)

@+

Re: Problème Log In

par sirakawa » 12 août 2011, 14:14

Je n'ai jamais dit que htmlentities sert à protéger une requête (et contre quoi?). en revanche:
elle permet d'obtenir une chaine dont les caractères sont transformés en Unicode et les quotes correctement transformées....
ne semble pas que quote() fasse mieux, bien au contraire
Aucun point de la doc php ne déprécie l'extension mysql.

Re: Problème Log In

par moogli » 11 août 2011, 23:19

NON !!!!!!

htmlentities ne SERT PAS a "sécuriser" une requête SQL !!!!!! au mieux a l'affichage !

si tu ne sais pas a quoi sert "quote" regarde la doc ;) => http://www.php.net/manual/fr/pdo.quote.php

d'ailleurs ton code utilise l'extension mysql qui est dépréciée au profit de mysqli ou mieux de PDO et c'est cette dernière qui est utilisée ici.

De plus avec l'extension mysql tu utiliserais mysql_real_escape_string en lieu et place de quote dans mon code !

je t'invite a lire quelque tuto sur PDO !


@+

Re: Problème Log In

par sirakawa » 11 août 2011, 22:43

Questions avariées
1) cette profusion de quotes simples ou doubles, de points de concaténation?
2) $connexion->quote($_POST['pseudo']) et $connexion->quote($_POST['pass'])
3) à quoi sert la fonction quote()?
4)l'emploi de extract se justifie-t-il?

$sql  = "SELECT * ".
        "FROM user ".
        "WHERE pseudo='". $connexion->quote($_POST['pseudo']) ."' ".
        "AND pass='". $connexion->quote($_POST['pass']) ."'";
me semble qu'on gagnerait en simplicité avec
$pseudo = htmlentities ($_POST['pseudo'], ENT_QUOTES, 'UTF-8');
$passe = htmlentities ($_POST['pass'], ENT_QUOTES, 'UTF-8');
$sql  = "SELECT * FROM `user` WHERE (`pseudo` ='$pseudo' AND `pass` = '$passe')"; // ` autour des noms de champs et ' autour des valeurs
print "$requete";
$req = mysql_query($sql);
....

Re: Problème Log In

par maxgeek » 11 août 2011, 22:11

ça fonctionne :D Merci beaucoup de m'avoir aidé aussi rapidemment et efficacement. Bye merci !

Re: Problème Log In

par moogli » 09 août 2011, 16:26

pour le message d'erreur c'est parce qu'il te manque le fetch

$data->fetch();
if ( ($req->rowCount() > 0) && ($pass == $data->pass)) LIGNE 41

ceci parce que tard je l'ai oublié.

Par contre il serait bon que tu comprenne comment fonctionne PDO.

pour la requête préparée, ce n'est pas utile dans ce cas ;)

@+
Il sort d'où le $data ?
Oui je crois que je vais revoir le PDO --' #-o

en fait j'ai merdé c'est $data = $req->fetch(); :/

mais bon revoir le fonctionnement de PDO est une bonne idée (comme tu la remarqué quand on l'utilise pas souvent c'est pas toujours trivial ^^ )

@+

Re: Problème Log In

par maxgeek » 09 août 2011, 12:00

Il sort d'où le $data ?
Oui je crois que je vais revoir le PDO --' #-o

Re: Problème Log In

par moogli » 09 août 2011, 00:21

pour le message d'erreur c'est parce qu'il te manque le fetch

$data->fetch();
if ( ($req->rowCount() > 0) && ($pass == $data->pass)) LIGNE 41

ceci parce que tard je l'ai oublié.

Par contre il serait bon que tu comprenne comment fonctionne PDO.

pour la requête préparée, ce n'est pas utile dans ce cas ;)

@+

Re: Problème Log In

par maxgeek » 08 août 2011, 23:55

moogli, j'avait deja essayé ça avant, je l'ai refait et ça me redit les mêmes erreurs qu'avec la requette prep, :
( ! ) Notice: Undefined property: PDOStatement::$pass in C:\wamp\www\Code\pages\connect.php on line 48
Call Stack
# Time Memory Function Location
1 0.0073 384184 {main}( ) ..\connect.php:0
avec toujours mon $_SESSION['id'] qui ne fonctionne pas (cf mon précédent message) et toujours la connexion qui n'est pas établie, malgrès que j'ai indiqué un bon pseudo et un bon mot de passe.

Donc que ça soit avec cette requette préparée :
$req = $connexion->prepare('SELECT * FROM user WHERE pseudo = :pseudo AND pass = :pass');
$req->execute(array(':pseudo' => $pseudo, ':pass' => $pass));
ou celle-ci :
$sql  = 'SELECT * '.
         'FROM user '.
         'WHERE pseudo='.$connexion->quote($_POST['pseudo']).' '.
         'and pass='.$connexion->quote($_POST['pass']).' ';
$req = $connexion->query($sql); 

les erreurs sont les mêmes ...

Re: Problème Log In

par moogli » 08 août 2011, 23:39

Avec de la requête préparée la question ne se poserait pas, mais ce n'est pas le cas ici ;)
non
Exemple #1 Protection d'une chaîne normale
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');

/* Chaîne simple */
$string = 'Nice';
print "Chaîne non échappée : $string\n";
print "Chaîne échappée : " . $conn->quote($string) . "\n";
?>
L'exemple ci-dessus va afficher :
Chaîne non échappée : Nice
Chaîne échappée: 'Nice'
note bien les ' ajoutées

j'ai donc, par acquis de conscience, fait un test perso
<?php
$sgbdCon = [
    'db_type'  => 'mysql',
    'db_host'  => 'localhost',
    'db_user'  => 'root',
    'db_pwd'   => 'yyRu2TKEvyYpzFLK',
    'db_name' => 'test'
];

$pdo = new pdo('mysql:host=localhost;dbname=test', $sgbdCon['db_user'], $sgbdCon['db_pwd']);
/* Chaîne simple */
$_POST = ['pseudo'=>'chaine truc machin','pass'=>"azedscxvfrertr"];
$sql  = 'SELECT * '.
        'FROM user '.
        'WHERE pseudo='.$pdo->quote($_POST['pseudo']).' '.
        'and pass='.$pdo->quote($_POST['pass']).' ';

var_dump($sql);
?>
résultat : string(79) "SELECT * FROM user WHERE pseudo='chaine truc machin' and pass='azedscxvfrertr' "

donc tous va bien j'me goure pas :)

edit : la syntaxe des tableaux est bonne (test alpha php5.4 ^^), ça ne change rien au test

@+

Re: Problème Log In

par maxgeek » 08 août 2011, 23:30

J'ai rajouté :
		 $pass = $_POST['pass'];
		 $pseudo = $_POST['pseudo'];
avant la requette préparée, mais toujours cette meme erreur :
( ! ) Notice: Undefined property: PDOStatement::$pass in C:\wamp\www\Code\pages\connect.php on line 43
Call Stack
# Time Memory Function Location
1 0.0014 381992 {main}( ) ..\connect.php:0

pour le $id, je me suis trompé, je souhaite enregistré un id dans $_SESSION['id'] que j'ai auparavent récupéré avec la requette préparée, mais
$_SESSION['id'] = $req->id;
ne fonctionne pas ... et m'affiche comme message d'erreur :
( ! ) Notice: Undefined index: id in C:\wamp\www\Code\pages\connect.php on line 86
Call Stack
# Time Memory Function Location
1 0.0029 382624 {main}( ) ..\connect.php:0

De plus, il ne veut meme plus reconnaitre mes identifiants et me connecter, il m'affiche "echec de connexion, mauvais pseudo et/ou mauvais mot de passe" :cry:

Re: Problème Log In

par Cyrano » 08 août 2011, 22:49

Ben là... :shock: Tu utilises une variable $pass qui n'est jamais initialisée nulle part, il est normal que ça te retourne une erreur.

Quant à ton index id non défini, ça se passe dans ta gestion de session et là, au lieu de faire $_SESSION['id'] = $id quoique là non plus $id n'est définie nulle part, tu initialises $id avec un $_SESSION['id'] non défini au préalable à moins que ce ne soit dans une page précédente ?

Re: Problème Log In

par maxgeek » 08 août 2011, 22:41

Toujours les mêmes erreurs avec :
$req = $connexion->prepare('SELECT * FROM user WHERE pseudo = :pseudo AND pass = :pass');
$req->execute(array(':pseudo' => $_POST['pseudo'], ':pass' => $_POST['pass']));

Re: Problème Log In

par Cyrano » 08 août 2011, 22:34

Pour les erreurs avec la requête préparée, c'est normal : dans la requête, tu indiques par exemple un paramètre « :pass » mais dans l'envoi du prepare() tu indiques « pass » : et le « : » ?

Re: Problème Log In

par Cyrano » 08 août 2011, 22:32

À ce compte là si ce n'est pas plus compliqué pour toi, je te recommande plutôt les requêtes préparées, c'est bien moins de soucis à terme. :)