CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Requête préparée: paramètre inconnu

Fire_Storm
Fire_Storm
Niveau 10
20 juillet 2011 à 16:35:02

Salut,

j'essaye actuellement de me construire un petit framework basé sur un autre plus gros.

J'ai décidé bien qu'un peu réticent au début à utiliser PDO, surtout pour l'abstraction du SGBD (pas prévu pour le moment de quitter MySQL mais on ne sait jamais, bref autant prévoir à l'avance).

Mais j'ai un petit soucis; en gros j'ai ce que j'apelle des "medias" avec des descriptions (un media peut avoir 40 descriptions (une langue par description quoi)).

J'ai tout un système qui au final me renvoit du XML (info du media, les champs de la description avec les valeurs etc).

Bref au début j'ai fait mes classes avec des méthodes tels que getDescription qui prend l'ID de la description à rechercher.

Jusque là aucun soucis, seulement voilà voulant effectuer quelques conditions supplémentaires car j'en aurais forcément besoin un moment ou l'autre, la requête n'était plus du tout adaptée. La solution (qui est d'ailleurs en gros celle du framework original, enfin c'est un peu plus compliqué puisqu'ils ont "inventé" un langage...) est donc de passer la requete SQL comme paramètre (au quel cas je peux donc faire mes manipulations et obtenir le résultat souhaité).

Ca marche c'est sur, mais c'est pas sécurisé du tout ! (vive les injections).

Tout ça pour en venir au soucis; les requêtes préparées, en fait comme j'ignore ce que contiendra ma requête, je ne peux pas faire mon execute correctement.

Alors je sais que ne suis pas obligé de les utiliser mais vu que ça peut amener plus d'avantages que d'inconvénients, c'est un peu con de les laisser tomber.

Perso je ne vois que 2 solutions possibles mais si vous avez une solution plus convenable je prends:

- Ou bien je fais comme pour les fonctions mysql_, c'est à dire me faire une fonction (méthode ici puisque objet) secureString prenant en paramètre la string à parser, et y appliquer l'option quote de PDO.

- Ou bien passer 2 paramètres: la requête SQL avec les marqueurs, et le tableau à mettre dans l'execute, c'est un paramètre en plus mais le problème serait régler et je pourrais utiliser ces requêtes préparées.

PS: Tant que j'y suis, j'avais l'habitude de faire un htmlspecialchars en même temps que le mysql_real_escape_string, mais vaut il mieux le faire en même temps ou seulement s'en occuper lors de l'affichage puisque le problème ne se pose qu'a l'affichage (faille XSS, pas SQL) (et possible en XSLT ? Le résultat étant du XML geré par du XSL, PHP ne s'occupe pas de l'affichage dans ce framework !)

Bref, j'ai plusieurs "solutions" problème mais j'aimerai trouver une convenable (c'est deja assez "lourd" de devoir faire toutes ces transformations alors si je peux éviter de rajouter une couche inutile).

Merci d'avance en tout cas.

deepblue
deepblue
Niveau 16
20 juillet 2011 à 20:25:05

Tu devrais utiliser symfony avec propel et les criteria :
1- tu oublis l'idée qu'on puisse te faire des injections
2- tu as une vraie bonne gestion de tes données objets
3- tu as une putain de bonne couche d'abstraction pour faire du requêtage qui est tellement bien foutue que ça me fait pleurer d'écrire du SQL maintenant
4- tu as du PDO en dessous du bordel donc tu peux la jouer à l'ancienne au cas ou
5 - symfony, dans tout ça, te donne les outils nécessaires pour bien faire joujou avec propel et le reste

Pour les injections : ça dépend de l'entête de ton fichier (text/plain, text/xml, text/html, etc).

Remarque : utiliser un moteur de template, après un peu de recul, je trouve ça useless. Php n'a pas besoin d'une couche supplémentaire pour faire de l'affichage, surtout quand ça ressemble à smarty.

Je le redis sincérement, tournes-toi vers du symfony, c'est une excellent solution framework php pour aller vite, faire des choses complexes simplement et bien (si on suit les règles).

Fire_Storm
Fire_Storm
Niveau 10
20 juillet 2011 à 21:47:35

Et pour la question ? xP

Symfony je connais de nom mais j'avoue n'y avoir jamais jeté un coup d'oeil. Le truc c'est que j'ai le sale tic d'aller voir sous le capot, et qu'avec le framework actuel je comprends justement son principe de fonctionnement (et puis il se rapproche aussi de ma façon de penser et le fait d'avoir un prof particulier, ça aide pas mal ^^).

Je ne cherche pas à ne pas écrire de SQL, ça il faudra au moins taper une requête (bah oui le module va pas se sélectionner tout seul xP).

M'enfin entre 5 lignes et j'ai toute ma structure, ou je modifie ce que je veux sans devoir intervenir à chaque fois sur la BDD ou le code, et actuellement les pages que je me tape à la main y a une différence quand même, fin là surtout j'ai envie de voir si je peux me faire un "fork" maison (car j'ai le framework original mais encore une fois je peux pas m'empêcher de mettre les mains dedans), c'est plus pour le fun qu'autre chose et pourquoi pas à terme si le projet avance bien l'utiliser vraiment en production.

Pour le fichier bah à vrai dire ça peut être tout ça, mais ça sera principalement du HTML (bah oui il en faut quand même), le XML est utilisé justement car on peut choisir soi même le format de sortie en partant du même code.

Pour l'abstraction c'est un choix sinon j'aurai utilisé mysqli comme d'hab. Comme dis je n'utilise que MySQL MAIS si plus tard je me retrouve face à ce problème autant prendre de l'avance (les requêtes de plus restent très simples en soi, et possédant toujours la même structure elles ne changeront pas trop).

Fin je crois que je vais tenter la deuxième solution (la requête et le tableau concernant execute dans un autre paramètre) c'est la seule solution potable que j'aie en tête pour le moment.

deepblue
deepblue
Niveau 16
20 juillet 2011 à 22:20:22

@flowrhent, il faut surtout avoir un niveau correct pour lire de la documentation :-)

@Fire_Storm, dis moi ce que tu veux exactement faire et j'te démontre que tu t'emmerdes la vie avec ton fork de framework :p)

Dans ton les cas, que tu donnes un nombre ou une chaine, tu fous des quotes autour et tu échapes tout les caractères suceptibles de modifier ta requête. A partir de là, tu ne risqueras rien.

Fire_Storm
Fire_Storm
Niveau 10
20 juillet 2011 à 22:28:54

Je viens de tester et ouais ça fonctionne niquel donc je vais faire comme ça pour le moment.

Je sais bien qu'il y a moyen de le faire avec Symfony, je ne remet pas en doute l'efficacité du truc hein ^^ mais c'est juste que chaque framework à sa logique, sa manière de travailler et que j'accroche moins ou du moins j'ai l'impression de me retrouver devant une usine à gaz.

Ici c'est un concept qui me plaît vraiment, et aussi un peu original avouons le, voilà pourquoi je m'y accroche.

Mais encore une fois je ne crache pas sur Symfony, ça serait idiot de ma part de le faire. :-)))

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment