Bonjour,
$req="SELECT nomutilisateur,motdepasse FROM identification WHERE nomutilisateur='".mysqli_real_escape_string($nombase,htmlentities($nomutilisateur_poste))."'
AND motdepasse='".md5(mysqli_real_escape_string($bdd,htmlentities($motdepasse_poste)))."'";
pour remplacer:
$req="SELECT nomutilisateur,motdepasse FROM identification";
qui lui marche, ne fonctionne pas.
Le but du remplacement étant de pouvoir se passer de extract
Je voudrais m'occuper du problème avec extract.
Je rappelle ce que je cherche à faire:
je veux comparer nom d'utilisateur posté + mot de passe posté avec
nom d'utilisateur dans bdd + mot de passe dans bdd.
Si pareil => l'utilisateur rentre dans sa session.
Sinon => il ne peut pas avoir accès à la session.
C'est du classique de chez classique.
Mon programme j'arrive à le faire mais je ne peux pas me passer de extract,
ce qui pose un problème car je ressors de la bdd des variables en plus
du nom d'utilisateur et du mot de passe concernés.
Cela représente une faille de sécurité car les variables ressorties inutilement
peuvent être profitable à un pirate d'une manière ou d'une autre.
J'ai conçu la récupération du nom d'utilisateur et du mot de passe en bdd concernés de la manière suivante:
Je ressors toutes mes données de ma table d'identification
(nom d'utilisteur et mot de passe concerné ainsi que les autres noms d'utilisateurs et les autres mots de passe dont je n'ai pas besoin)
et je compare ainsi avec les données postées:
if ($nomutilisateur_poste == $nomutilisateur && $motdepasse_poste == $motdepasse){
et je laisse le serveur comparer et prendre une décision en fonction du résultat.
Mais avec mon code initial, le serveur cherche d'abord parmi tous les $nomutilisateur
que j'ai sorti s'il y en a un dont la valeur est égale à la valeur du nom d'utilisateur postée,
et si parmi tous les $motdepasse que j'ai sorti il y en a un qui correspond à la valeur
du mot de passe posté.
Il y a donc un travail de recherche ligne par ligne.
Avec le code de xTG qui cible le nom de l'utilisateur et son mot de passe par rapport aux valeurs postées, et ce directement à travers le code SQL:
$req="SELECT nomutilisateur,motdepasse FROM identification WHERE login='".mysqli_real_escape_string($nombase,htmlentities($nomutilisateur_poste))."'
AND motdepasse='".md5(mysqli_real_escape_string($bdd,htmlentities($motdepasse_poste)))."'";
j'ai l'impression que le travail ligne par ligne dont je parle un peu plus haut n'est pas exécuté.
El pour analyser les problèmes si je remplace:
if ($nomutilisateur_poste == $nomutilisateur && $motdepasse_poste == $motdepasse){
par
if (isset($nomutilisateur) && isset($motdepasse)){
// je regarde si le nom d'utilisateur et le mot de passe correspondant dans ma bdd
//existent tous les deux et ont tous les deux une valeur non nulle (les variable ne sont pas vides)
j'observe à l'indentification sur le site que le test est négatif:
donc soient les variables n'existent pas, soient elles existent mais sont vides.
Si je remplace maintenant par:
if (empty($nomutilisateur) && empty($motdepasse)){
le test est positif,
c'est-à-dire que les deux variables existent mais sont vides.
Je recoupe les résultats du test de isset et de celui de empty et j'en conclu
que mes deux variables existent mais sont vides.
a. Le raisonnement tient-il la route déjà jusque là?
Si le code de xTG me fait effectivement ressortir les variables vides,
b. Pourquoi cela?
Je me demande si c'est pas parce-que le serveur ou peut-être plutôt le SGBD n'est pas programmé
pour faire automatiquement une recherche de correspondance
ligne par ligne à partir de code SQL, mais je crains aussi de faire là une conclusion farfelue.
Mais je crois en fait que je me retrouve avec un problème de conception au niveau
de ce petit bout de programmation.
En effet, pour récapituler mon utilisateur a posté des valeurs.
J'ai donc deux tâches à réaliser en vu de mes comparaisons:
- identifier dans ma table ma ligne concernée.
Avec les deux valeurs concernées du nom d'utilisateur et du mot de passe je pourrai comparer.
- comparer avec les valeurs postées.
xTG me dit donc, plutôt que tout récupérer, ce qui m'oblige à utiliser la fonction extract,
et ensuite regarder avec toutes les lignes de la table s'il y en a une dont les valeurs correspondent
aux valeurs postées, je me vois proposer d'identifier d'abord dans la table la lignes concernée
dont les valeurs doivent être comparées aux valeurs postées pour ensuite faire mes comparaisons
avec uniquement des valeurs réellement concernées par la comparaison.
Et cette identification se fait d'après xTG de la manière suivante:
$req="SELECT nomutilisateur,motdepasse FROM identification WHERE nomutilisateur='".mysqli_real_escape_string($nombase,htmlentities($nomutilisateur_poste))."'
AND motdepasse='".md5(mysqli_real_escape_string($bdd,htmlentities($motdepasse_poste)))."'";
ce qui sous-entend qu'on laisse le soin aux machines de comprendre qu'il faut faire une recherche dans toute la table
pour trouver parmi toutes les lignes celle où une valeur de $nomutilisateur correspond à $nomutilisateur_poste
et celle où une valeur de $motdepasse correspond à $motdepasse_poste.
c. Mais est-ce évident de comprendre ça via le code SQL ci-dessus pour les machines?
d. Si la réponse est oui, pourquoi à votre avis ça ne fonctionne pas?
Si la réponse est non, comment verriez-vous la conception de la recherche ligne par ligne
dans la table de la ligne appropriée pour que la comparaison entre des variables à comparer ensemble puisse être faite?
Je dois dire ne pas comprendre pourquoi cette petite fonction et ce petit bout de programmation me causent
autant de tracas
Ce que je fais semble pourtant être très simple en programmation.
Quel mal de tête
