Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2516 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  375  376  377  ..  486  487  488  489  490  491
Auteur Sujet :

les développeurs de forums, les 3/4 des forums sont down /o\

n°1376154
soulmanto
Chat Noir replica
Posté le 28-05-2006 à 11:50:40  profilanswer
 

Reprise du message précédent :
Ce sont des requêtes paramétrées. Le principal intérêt étant qu'on prépare une fois pour toutes la requête lors de l'exécution d'un script, et qu'à chaque exécution de la requête on se contente de fournir les paramètres, rendant le tout beaucoup plus rapide...

mood
Publicité
Posté le 28-05-2006 à 11:50:40  profilanswer
 

n°1376155
gizmo
Posté le 28-05-2006 à 11:51:23  profilanswer
 

C'est un état intermédiaire entre le SQL intreprété et le SQL emabrqué. En gros, tu donnes une query avec des variables, la query est préprocessée autant que possible et ensuite tu lui demandes de s'éxécuter en donnant des valeurs à ces variables. En général c'est plus rapide que le SQL intreprété et ça a l'avantage de pouvoir répéter plusieur fois la query en ne changeant que les valeurs des variables.

n°1376156
Tristou
Keep calm and hack cookies
Posté le 28-05-2006 à 12:04:15  profilanswer
 

Et ça empèche les injections SQL ta soluce ? En fait le must, ça serait une requête (ou une fonction) qui permette d'éviter une bonne fois pour toute les injections parce qu'avec le is_numeric(), faut la mettre à chaque endroit où on veut éviter qu'il y en ait je suppose


---------------
"About your cat Mr. Schrödinger : I have good news and bad news"
n°1376160
ooterreuro​o
'You could drift this car while reading a book'
Posté le 28-05-2006 à 12:08:58  profilanswer
 

0x90 a écrit :

Ce qui veut dire que si on force un utilisateur a aller sur une url avec un GET "offensif" (par exemple avec une tinyurl balancé sur le forum, ou un lien dont le nom n'est pas l'url :ange:) on peut le forcer à se faire fermer son compte à son insu, un peu désagréable non ? :p


 
en effet  :whistle:


---------------
204 - No Content
n°1376161
gizmo
Posté le 28-05-2006 à 12:09:16  profilanswer
 

oui, ça les empèche. Et puis y a aussi les PDO qui fonctionnent bien.

n°1376163
Tristou
Keep calm and hack cookies
Posté le 28-05-2006 à 12:12:08  profilanswer
 

gizmo a écrit :

oui, ça les empèche. Et puis y a aussi les PDO qui fonctionnent bien.


 
Bon en même temps je débute donc je peux optimiser le code au fur et à mesure ;)  
 
PDO, kézako  :heink: ?


---------------
"About your cat Mr. Schrödinger : I have good news and bad news"
n°1376164
gizmo
Posté le 28-05-2006 à 12:12:40  profilanswer
 

T'as déjà lu la doc de php? :heink:

n°1376165
Tristou
Keep calm and hack cookies
Posté le 28-05-2006 à 12:14:40  profilanswer
 

:( A vrai dire non, j'ai appris le PHP en lisant des bouquins et modifiant les exemples qu'on y donne...


---------------
"About your cat Mr. Schrödinger : I have good news and bad news"
n°1376173
masklinn
í dag viðrar vel til loftárása
Posté le 28-05-2006 à 13:01:15  profilanswer
 

gizmo a écrit :

Utilise les prepared statement et la fonction mysql_real_escape_string plutôt...


OU [:aloy]  
 
Le but des prepared statements est justement de se débarasser de ces fonctions d'escaping manuelles à la con [:pingouino]

gizmo a écrit :

oui, ça les empèche. Et puis y a aussi les PDO qui fonctionnent bien.


C'est l'interface DB-agnostic avec prepared statements de PHP 5.1 ça non [:petrus dei]
 
Celle où on est obligé de binder chaque argument manuellement au prepared statement [:grinking]  :whistle:


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1376195
gizmo
Posté le 28-05-2006 à 14:47:17  profilanswer
 

masklinn a écrit :

OU [:aloy]  
C'est l'interface DB-agnostic avec prepared statements de PHP 5.1 ça non [:petrus dei]
 
Celle où on est obligé de binder chaque argument manuellement au prepared statement [:grinking]  :whistle:


oui, c'est celle-la. Par contre, je ne vois pas bien comment tu voudrais faire pour que le truc devine comment tu veux faire ton binding. :??:

mood
Publicité
Posté le 28-05-2006 à 14:47:17  profilanswer
 

n°1376225
art_dupond
je suis neuneu... oui oui !!
Posté le 28-05-2006 à 16:08:39  profilanswer
 

gizmo a écrit :

C'est un état intermédiaire entre le SQL intreprété et le SQL emabrqué. En gros, tu donnes une query avec des variables, la query est préprocessée autant que possible et ensuite tu lui demandes de s'éxécuter en donnant des valeurs à ces variables. En général c'est plus rapide que le SQL intreprété et ça a l'avantage de pouvoir répéter plusieur fois la query en ne changeant que les valeurs des variables.


youp,
 
Je ne comprends pas trop à quel moment ca se met en place. Comment demande-t-on à la query de se préprocesser ?
En gros, ca marche comment concrètement (le principe je pense avoir pigé :p) ?
 
Sinon la question qui tue : c'est quoi SQL interprété et SQL embarqué ? ce sont les requêtes et les "fonctions" internes ?
 
 
 
Désolé de ma neuneunitude :o


---------------
oui oui
n°1376227
gizmo
Posté le 28-05-2006 à 16:17:55  profilanswer
 

Le SQL intreprété, c'est ce que tu as quand tu fais un truc comme mysql_query(requète). C'est un one-shot, tout est interprété au run-time. Le SQL embarqué, c'est le contraire, c'est une requète que tu compiles et que tu ajoutes, généralement sous forme de fonction,directement à ton serveur SQL. Au milieu, tu as les prepared statement (et les strored procédure).  
Quand tu demandes de faire un prepared statement, il est envoyé au serveur et celui-ci peut déjà calculer les valeurs acceptables pour les variables te comment organiser ses jointures ou utiliser ses index. Ensuite, quand tu envoies les variables, il fait tourner directement le bouzin, ce qui fait que c'est généralement plus rapide.

n°1376230
Tristou
Keep calm and hack cookies
Posté le 28-05-2006 à 16:19:54  profilanswer
 

Et moins risqué alors ? ;)


---------------
"About your cat Mr. Schrödinger : I have good news and bad news"
n°1376231
joce
Architecte / Développeur principal
"BugHunter"
Posté le 28-05-2006 à 16:21:05  profilanswer
 

0x90 a écrit :

à la limite définir des constantes c'est bien l'un des rares trucs que les expressions d'IE peuvent faire sans tout péter ;)
 
Sinon étant donné que dans de nombreux cas la css est servie pas un serveur capable de servir du code dynamique, on peut se créer un ptit langage à utiliser dans la css pour définir/employer des constantes pour les couleurs/tailles et le serveur fait le remplacement plutot que le client
(disons qu'en mode super-pauvre on peut rajouter un #!/usr/bin/env cpp au début du fichier, et appeller la css comme un cgi, le préprocesseur du C sera utilisé, il est pas super élégant mais il fait ce qu'on veut dans ce cas la) On peut évidement utiliser aussi le php pour faire ca, c'est c'est pas forcément lui le plus adapté/rapide cela dit ...


perso j'utilise PHP + mise en cache

n°1376233
gizmo
Posté le 28-05-2006 à 16:26:04  profilanswer
 

Tristou a écrit :

Et moins risqué alors ? ;)


Bah oui. Par exemple si tu mets fais une query comme cela:
 
SELECT * FROM table WHERE champ = ?
 
et que champ est du type texte, tout ce que tu injecteras comme contenu dans la variable qui lui sera assigné sera formatté comme tel. Ainsi, si tu essaies de mettre "valeur' OR 1=1", ce sera automatiquement tranformé en "'valeur'' OR 1=1'", et plus de risque d'injection.

n°1376234
Cyrius-c
Posté le 28-05-2006 à 16:34:09  profilanswer
 

Euh, dites-moi, pour selectionner tous les sujets en affichant aussi les drapeaux je dois utiliser LEFT JOIN?
 
C'est ce que j'ai fait, j'ai fait un truc du genre
SELECT  *
 FROM sujet LEFT JOIN drapeaux ON sujet.id=drapeaux.id_post
 
Mais ca me met une erreur :d
La syntaxe est correcte?

n°1376241
soulmanto
Chat Noir replica
Posté le 28-05-2006 à 16:51:42  profilanswer
 

Ca m'a pas l'air bon ça... Moi j'aurais plutôt fait ça:
 

Code :
  1. SELECT  s.*,d.* (enfin, si tu veux tout récupérer)
  2. FROM sujet s LEFT JOIN drapeaux d
  3. ON d.id_post = s.id_post


 
Si le champ a le même nom dans les deux tables, faut aliaser les tables utilisées. Et même sans ça, c'est toujours mieux de le faire quand on utilise plusieurs tables, ça évite de s'emmêler les pinceaux! ;)


Message édité par soulmanto le 28-05-2006 à 16:54:31
n°1376243
Cyrius-c
Posté le 28-05-2006 à 17:00:29  profilanswer
 

Je voudrais éviter de faire des s d . etc...
Avce les vrais noms ca ne fonctionnerait pas?
Edit: Dsl je suis embetant  :whistle:


Message édité par Cyrius-c le 28-05-2006 à 17:05:35
n°1376250
Cyrius-c
Posté le 28-05-2006 à 17:50:22  profilanswer
 

Ca marche, mais je voudrais faire un peu plus compliqué.
 Je voudrais selectionner que
-les drapeaux ayant un membre=$_SESSION[login]  
-les sujets ayant le champ id_categorie=$idcat
Je sais pas trop où placer ca ...

n°1376252
gizmo
Posté le 28-05-2006 à 18:06:03  profilanswer
 

simplement dans la clause WHERE.

n°1376259
Cyrius-c
Posté le 28-05-2006 à 18:15:44  profilanswer
 

SELECT  s.*,d.*  
      FROM sujet s   LEFT JOIN drapeaux d ON d.id_post = s.id  WHERE d.membre="'.$_SESSION[login].'" AND s.id_categorie="'.$cid.'"'
?
 
On dirait que ca m'affiche bien ce que je veux, mais ca m'affiche seulement les champs sujets qui ont une occurence avec le champ drapeau

Message cité 2 fois
Message édité par Cyrius-c le 28-05-2006 à 18:20:58
n°1376266
art_dupond
je suis neuneu... oui oui !!
Posté le 28-05-2006 à 18:35:50  profilanswer
 

gizmo a écrit :

Le SQL intreprété, c'est ce que tu as quand tu fais un truc comme mysql_query(requète). C'est un one-shot, tout est interprété au run-time. Le SQL embarqué, c'est le contraire, c'est une requète que tu compiles et que tu ajoutes, généralement sous forme de fonction,directement à ton serveur SQL. Au milieu, tu as les prepared statement (et les strored procédure).  
Quand tu demandes de faire un prepared statement, il est envoyé au serveur et celui-ci peut déjà calculer les valeurs acceptables pour les variables te comment organiser ses jointures ou utiliser ses index. Ensuite, quand tu envoies les variables, il fait tourner directement le bouzin, ce qui fait que c'est généralement plus rapide.


merci :jap:


---------------
oui oui
n°1376272
Multinickn​ame
Ah bon...
Posté le 28-05-2006 à 18:51:28  profilanswer
 

Cyrius-c a écrit :

SELECT  s.*,d.*  
      FROM sujet s   LEFT JOIN drapeaux d ON d.id_post = s.id  WHERE d.membre="'.$_SESSION[login].'" AND s.id_categorie="'.$cid.'"'
?
 
On dirait que ca m'affiche bien ce que je veux, mais ca m'affiche seulement les champs sujets qui ont une occurence avec le champ drapeau


 
Et en utilisant LEFT OUTER JOIN au lieu de LEFT JOIN?


---------------
Feaks Forum
n°1376273
xman
branleur
Posté le 28-05-2006 à 18:52:03  profilanswer
 

Un lien qui explique le fonctionnement des prepared statements :
http://maximilian.developpez.com/m [...] tatements/

n°1376277
Cyrius-c
Posté le 28-05-2006 à 19:01:40  profilanswer
 

Multinickname a écrit :

Et en utilisant LEFT OUTER JOIN au lieu de LEFT JOIN?


LEFT JOIN

n°1376280
Multinickn​ame
Ah bon...
Posté le 28-05-2006 à 19:04:10  profilanswer
 


 
:heink:
 
Je te demande si en utilisant LEFT OUTER JOIN au lieu de LEFT JOIN ca te sélectionne tous les topics?


---------------
Feaks Forum
n°1376284
anthomicro
Posté le 28-05-2006 à 19:21:41  profilanswer
 

gizmo a écrit :

Utilise les prepared statement et la fonction mysql_real_escape_string plutôt...


 
Je connaissais pas, je vais aller voir ça, m'enfin bon faire tout ça pour une simple requête de sélection, y'a de l'enculage de mouches inside :whistle:
 
Edit après une rapide lecture : en effet, ça ne sert à rien dans le cas présent  ;)

Message cité 1 fois
Message édité par anthomicro le 28-05-2006 à 19:23:26
n°1376292
Tristou
Keep calm and hack cookies
Posté le 28-05-2006 à 19:38:34  profilanswer
 

xman a écrit :

Un lien qui explique le fonctionnement des prepared statements :
http://maximilian.developpez.com/m [...] tatements/


 
:jap:
 

anthomicro a écrit :

Je connaissais pas, je vais aller voir ça, m'enfin bon faire tout ça pour une simple requête de sélection, y'a de l'enculage de mouches inside :whistle:
 
Edit après une rapide lecture : en effet, ça ne sert à rien dans le cas présent  ;)


 
 
Ouais mais si l'utilisateur a à rentrer des choses plusieurs fois de suite ? (genre un texte à saisir par-ci, quelquechose à uploader par là), autant fixer la forme des requêtes une fois pour toute non ?
 
Surtout que :

Citation :

Les prepared statements sont un dispositif permettant de mettre en place (" préparer " ) une requête une fois pour toutes, puis de l'exécuter plusieurs fois avec des paramètres différents.



---------------
"About your cat Mr. Schrödinger : I have good news and bad news"
n°1376296
Cyrius-c
Posté le 28-05-2006 à 19:48:31  profilanswer
 

Multinickname a écrit :

Et en utilisant LEFT OUTER JOIN au lieu de LEFT JOIN?


Left OUTER JOIN ca ne m'affiche rien. Il doit y avoir un problème d'ardre dans la clause where, ou de position de la clause where

n°1376357
anthomicro
Posté le 28-05-2006 à 21:40:31  profilanswer
 

Tristou a écrit :

:jap:
 
Ouais mais si l'utilisateur a à rentrer des choses plusieurs fois de suite ? (genre un texte à saisir par-ci, quelquechose à uploader par là), autant fixer la forme des requêtes une fois pour toute non ?


 
On parlait bien d'un forum avec une requête SELECT là non  :whistle:

n°1376362
Tristou
Keep calm and hack cookies
Posté le 28-05-2006 à 21:51:29  profilanswer
 

anthomicro a écrit :

On parlait bien d'un forum avec une requête SELECT là non  :whistle:


 
Oui oui, j'ai confondu :D


---------------
"About your cat Mr. Schrödinger : I have good news and bad news"
n°1376368
anthomicro
Posté le 28-05-2006 à 22:08:52  profilanswer
 

ok :D je me disais aussi ^^

n°1376378
masklinn
í dag viðrar vel til loftárása
Posté le 28-05-2006 à 22:45:48  profilanswer
 

gizmo a écrit :

oui, c'est celle-la. Par contre, je ne vois pas bien comment tu voudrais faire pour que le truc devine comment tu veux faire ton binding. :??:


Ben en Python avec une interface compatible DBAPI 2 on peut faire

Code :
  1. cur.execute("INSERT INTO foo (bar, baz, buzz) VALUES (?,?,?)", (bar, baz, buzz))


Ou même

Code :
  1. cur.execute("INSERT INTO foo (bar, baz, buzz) VALUES (%d,%s,%s)", (bar, baz, buzz))


(qui effectue une vérif des types depuis la couche Python)
Ou encore

Code :
  1. values = {"bar":3, "baz": "jeanclod", "buzz": "pouet", "gnii": gnou, "frubs": 3}
  2. cur.execute("INSERT INTO foo (bar, baz, buzz) VALUES (%(bar)d,%(baz)s,%(buzz)s)", values)


 
Et si tu veux exécuter plusieurs fois la même requête en changeant les valeurs, il y a un Cursor.executemany() qui fonctionne comme execute sauf que son 2e argument est une liste d'arguments à la query.

Tristou a écrit :

Surtout que :

Citation :

Les prepared statements sont un dispositif permettant de mettre en place (" préparer " ) une requête une fois pour toutes, puis de l'exécuter plusieurs fois avec des paramètres différents.



La définition est fausse, le but des prepared statements c'est de préparer les paramètres pour leur injection sécurisée dans la query, le fait de stocker la query et de pouvoir l'exécuter à répétition avec des arguments différents est un effet de bord et dépend de l'implémentation

Message cité 2 fois
Message édité par masklinn le 28-05-2006 à 22:48:17
n°1376398
gizmo
Posté le 29-05-2006 à 00:02:26  profilanswer
 

masklinn a écrit :

Ben en Python avec une interface compatible DBAPI 2 on peut faire

Code :
  1. cur.execute("INSERT INTO foo (bar, baz, buzz) VALUES (?,?,?)", (bar, baz, buzz))


Ou même

Code :
  1. cur.execute("INSERT INTO foo (bar, baz, buzz) VALUES (%d,%s,%s)", (bar, baz, buzz))


(qui effectue une vérif des types depuis la couche Python)
Ou encore

Code :
  1. values = {"bar":3, "baz": "jeanclod", "buzz": "pouet", "gnii": gnou, "frubs": 3}
  2. cur.execute("INSERT INTO foo (bar, baz, buzz) VALUES (%(bar)d,%(baz)s,%(buzz)s)", values)


 
Et si tu veux exécuter plusieurs fois la même requête en changeant les valeurs, il y a un Cursor.executemany() qui fonctionne comme execute sauf que son 2e argument est une liste d'arguments à la query.


 
Bah en php c'est pareil, si ce n'est que ça se fait en deux lignes, je vois pas vraiment la différence.
 

masklinn a écrit :

La définition est fausse, le but des prepared statements c'est de préparer les paramètres pour leur injection sécurisée dans la query, le fait de stocker la query et de pouvoir l'exécuter à répétition avec des arguments différents est un effet de bord et dépend de l'implémentation


Non. Un prepared statement ne doit d'ailleurs pas obligatoirement contenir de paramètre. D'ailleurs, dans le fonctionnement normal d'un prepared statement, il est d'abord envoyé au serveur et ce n'est qu'après que les éventuels paramètres sont ajoutés. Je n'ai pas vérifié comment fonctionne les drivers mysql, mais je sais qu'au début de leur support, ils faisaient les manip côté client, ce qui en réduisait l'intérêt.

n°1376409
masklinn
í dag viðrar vel til loftárása
Posté le 29-05-2006 à 00:46:40  profilanswer
 

gizmo a écrit :

Bah en php c'est pareil, si ce n'est que ça se fait en deux lignes, je vois pas vraiment la différence.


La dernière fois que j'ai regardé PDO et mysqli ça donnait une ligne pour la requête à préparer + une ligne pour chaque paramètre (un $bouzin->bind) + une ligne d'exec [:pingouino]
 
Ca fait un peu plus de deux lignes, sur l'exemple que j'ai donné ça en fait déjà 5 [:pingouino]

n°1376444
soulmanto
Chat Noir replica
Posté le 29-05-2006 à 09:46:20  profilanswer
 

Une ligne pour chaque paramètre, c'est en mode objet. En mode procédural, tu peux utiliser :
 

Code :
  1. mysqli_bind_param( par1, par2, par3, par4 [...]);

n°1376485
joce
Architecte / Développeur principal
"BugHunter"
Posté le 29-05-2006 à 10:46:08  profilanswer
 

Cyrius-c a écrit :

SELECT  s.*,d.*  
      FROM sujet s   LEFT JOIN drapeaux d ON d.id_post = s.id  WHERE d.membre="'.$_SESSION[login].'" AND s.id_categorie="'.$cid.'"'
?
 
On dirait que ca m'affiche bien ce que je veux, mais ca m'affiche seulement les champs sujets qui ont une occurence avec le champ drapeau


normal, t'as un WHERE sur d.membre.
 
SELECT  s.*,d.*  
      FROM sujet s   LEFT JOIN drapeaux d ON (d.id_post = s.id AND d.membre="'.$_SESSION[login].'" ) WHERE s.id_categorie="'.$cid.'"

n°1376609
FlorentG
Posté le 29-05-2006 à 12:49:31  profilanswer
 

masklinn a écrit :

Ou encore

Code :
  1. values = {"bar":3, "baz": "jeanclod", "buzz": "pouet", "gnii": gnou, "frubs": 3}
  2. cur.execute("INSERT INTO foo (bar, baz, buzz) VALUES (%(bar)d,%(baz)s,%(buzz)s)", values)



J'ai fait un truc dans ce style, tiens... Ca s'utilise comme ça :

$query = new Data_MysqlQuery(
   'INSERT INTO @id(`parent`, `order`, `title`, `child`, `path`) '
 . 'VALUES(@int, @int, @string, @string, @string)', $this->mysql);
 
$query->executeNoResult($this->tableName, $data['parent'], $order, $data['title'], $data['child'], $path);


 
Au départ, j'avais utilisé la première syntaxe (avec les ?), sauf que l'escape ne se fait pas de la même manière si c'est un identifier (utilisation de backquotes), un nombre (pas de quotes), ou une string....

n°1376610
masklinn
í dag viðrar vel til loftárása
Posté le 29-05-2006 à 12:51:19  profilanswer
 

T'aurais pu utiliser la syntaxe de printf [:petrus75]
 
Et un execute qui renvoie null (ou l'équivalent en PHP) quand ya pas de résultats, comme ça t'as pas besoin de faire 15 fonctions différentes pour la même chose [:petrus75]
 
Et ce que t'as fait ne fait absolument pas la même chose que ce que tu as quoté, l'équivalent ce serait de filer un array clé=>valeur à l'execute, toi t'as codé l'équivalent de la syntaxe 2.


Message édité par masklinn le 29-05-2006 à 12:53:05

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1376611
FlorentG
Posté le 29-05-2006 à 12:53:15  profilanswer
 

Ouais, j'pourrais faire ça... [:johneh]

n°1376612
FlorentG
Posté le 29-05-2006 à 12:53:28  profilanswer
 

Et ouais, j'ai quoté le mauvais passage [:johneh]

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  375  376  377  ..  486  487  488  489  490  491

Aller à :
Ajouter une réponse
 

Sujets relatifs
question avec les forums phpbb2[php] trouver la premier place ou inserer un enregistrement (résolu)
Forums phpBBQui connait l'algo du Passticket et sa mise en place en VB ?
[Merise] Mise en place d'un MCDFocus mal placé....
[Blabla/Prog] Les développeurs foromeurs sont-ils des feignasses?Mise en place d'un formulaire CGI
forums création de site internetJava - Mise en place d'une api (Servlet)
Plus de sujets relatifs à : les développeurs de forums, les 3/4 des forums sont down /o\


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)