8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un petit problème avec mon code;
En effet, ma requete ne s’exécute pas comme la voyez ci-dessous et donc affiche le message die(....);


$req = $bdd->query("SELECT * FROM ordre WHERE Escrow_id_fromPHP = '$ordre' AND k1_re = '$cw1' AND k2_re = '$cw2' AND k3_re = '$cw3' AND k4_re = '$cw4' AND k5_re = '$cw5' AND k6_re = '$cw6' AND k7_re = '$cw7' AND k8_re = '$cw8'");


$row = $req->fetch()  or die('<h4><em>No Found</em></h4>');



Je souhaiterai que le code vérifie le champ ordre par rapport au autres champs, si dans la bdd, tout correspond alors php continue le script;
Cependant, dans la requete, si je laisse que le champ ordre, elle fonctionne,.....

Mes questions sont les suivantes :
Il y a-t-il une limite de champs pour 'WHERE' en sql ?
Comment peux-je résoudre cette problématique ?

En vous remerciant,
Bien cordialement,
Modifié par MA8 (24 Nov 2019 - 17:24)
Salut,
Dans ta requête, tu ne demandes pas le champ "Ordre" mais tous les champs de la table "Ordre", ce qui n'est pas pareil... Il faudrait "SELECT ordre FROM nom_de_ta_table WHERE ..."
Ensuite, à ma connaissance, pas de limite sur la quantité de WHERE.
Enfin, utilise les requêtes préparées, c'est vachement mieux Smiley smile

Et si ça ne marche pas, ça veut dire qu'il y a une erreur sur ta requête ou qu'il n'y a aucun résultat. Si c'est une erreur, tu peux faire un var_dump($req->errorInfo()); avant ton fetch, ça te donnera plus d'infos sur le problème.

A+!
Bonjour,
Merci pour votre réponse,

Alors, j'ai du mal m’exprimai, ma table s'appelle 'ordre', je veux, dans cette table, comparer le champs 'Escrow_id_fromPHP' avec les 8 champs 'k1_re', 'k2_re', ... si tout est ok, alors le script continue, un peu à la manière de vérifier un id et password(comme la connection sur ce forum)

Avant le fetch, je fais la requete, comme indiqué, ça me donne :

 :array (size=3)
  0 => string '00000' (length=5)
  1 => null
  2 => null



Merci encore Smiley cligne
MA8 a écrit :
je veux, dans cette table, comparer le champs 'Escrow_id_fromPHP' avec les 8 champs 'k1_re', 'k2_re', ... si tout est ok, alors le script continue, un peu à la manière de vérifier un id et password

Désolé pas compris... Tu veux savoir si escrow_id_fromPHP est égal à une des valeurs k1_re ou k2_re etc?

Sinon le var_dump indique qu'il n'y a pas d'erreur lors de l’exécution de la requête, ça veut donc dire qu'il n'y a pas de problème de syntaxe. Si tu as ton erreur "No found", c'est parce qu'aucune ligne dans ta base ne correspond à ta requête -> donc le fetch ne retourne rien
Merci pour votre réponse,

Je veux dire : après un formulaire rempli par l'utilisateur( un input ordre et 8 input)
Je souhaiterai une fois ce formulaire envoyé, comparer les valeurs entrés par l'utilisateur avec ceux dans la base de données,

Ce me parait bizarre car je prend les données dans la bdd(pour les test)!!!
De plus, quand je fais le test avec que l'ordre(et j’enlève 'k1_re',...) ça fonctionne,....................


Merci
Je suis toujours pas sûr de comprendre... Là tu cherches si une ligne existe avec TOUS tes critères respectés, il faudrait peut-être récupérer uniquement avec "ordre" et ensuite faire les opérations de recherche/comparaison en PHP? Ou utiliser des "OR" au lieu des "AND" dans ta requête?
Du genre
SELECT * FROM ordre WHERE Escrow_id_fromPHP = '$ordre' AND (k1_re = '$cw1' OR k2_re = '$cw2' OR k3_re = '$cw3' OR k4_re = '$cw4' OR k5_re = '$cw5' OR k6_re = '$cw6' OR k7_re = '$cw7' OR k8_re = '$cw8')
Merci pour votre réponse,

Oui, c'est que je cherche,

si les données entrées dans le formulaire sont strictement similaire sur une ligne dans la bdd alors continuer le script!

Je vais essayer et je vous dit,
néanmoins, je ne comprends pas pourquoi ma 'solution' fonctionne pas!
Bonjour,

Alors, pour ce que je voulez faire, ma requête est bonne,
Quand je vous disais que je chercher les données dans la bdd(pour les test), il y avait dans certains des champs 'k4_re', un saut à la ligne qui est très difficilement visible, ....

Donc en enlevant ces saut à la lignes, ça fonctionne,

Merci,
Bonne journée,
Smiley cligne
Meilleure solution
Et là, sans requête préparé, je viens, j'injecte du sql, et je broie ton serveur.... :s
MA8 a écrit :
Bonjour,
Merci pour votre conseil,

Expliquez-moi votre procédure ?

Cordialement,


Yes regarde le lien de Mathieu, mais en gros c'est le fait de sécuriser les variable que t'injecte à tes requêtes SQL