stockage de requête

Invité
Invité n'ayant pas de compte PHPfrance

08 juil. 2005, 10:43

Bonjour,

J'ai creer un formulaire qui permet de faire des requete parametré à l 'aide de menu deroulant. On me demande à partir de se formulaire de faire un truc qui permette de garder en memoire certaine requete faite à partir de ce formulaire.
Et de pouvoir avoir la liste de ses requete sous forme de tableau dans un autre formulaire.
Donc ce que j'ai penser c'est creer une table requete dans mon 1er formulaire avec un numero,un nom et la requete ensuite.
Et dans le 2eme formulaire, creer un tableau a partir de cette table et dans chaque ligne mettre un bouton radio comme cela j excuterai que la requete selectionner .
Est faisable ?
Si je stock ma requete dans ma base (select * .....),le champs qui va contenir ma requete devra etre de type varchar ??

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 10:51

oui c'est faisable et ça semble être une bonne solution

- tu récupères les infos de ton premier formulaire
- tu construis la chaine de requête correspondante
- tu la stockes dans la table dont tu as parlé, avec un identifiant et un nom éventuellement pour les différencier plus facilement (tu peux aussi regarder si le code SQL correspondant n'est pas déjà présent)

- puis tu listes simplement ces codes et tu exécutes celui sélectionné avec ton système de bouton radio

pour le type du champ qui va contenir le code, à toi de voir. Varchar est limité à 255 caractères, est-ce suffisant pour ce que sera enregistré ?

Invité
Invité n'ayant pas de compte PHPfrance

08 juil. 2005, 10:54

j'ai essayer avec un varchar(300) et c est trop petit pour stocker ma requete.
Je vais utiliser un varchar (500) mais je pensai qu'il existait un type genre bloc note ou tu peux stocker pas mal de chose je reve ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 juil. 2005, 10:59

Tu peut stocker dans un champ de type TEXT

Ce type accepte des chaines jusqu'a 65536 caractères.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 11:00

il y a plusieurs types de champs pour du texte, ils sont présentés ici :
http://dev.mysql.com/doc/mysql/fr/string-types.html

si varchar ne suffit pas, regarde du coté de tinytext, mediumtext... suivant tes besoins

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 11:01

Ce type accepte des chaines jusqu'a 65536 caractères.
et là, ça fait déjà une sacrée requête !! :lol:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 juil. 2005, 11:03

Quand même

Mais le gros avantage que je trouve à ce champ, c'est qu'il réserve de la place dynamiquement.

Je veux dire par là qu'il ne réserve pas 65536 octets mais qu'il réserve une place proportionnelle à la chaine qu'il contient
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 11:06

Quand même

Mais le gros avantage que je trouve à ce champ, c'est qu'il réserve de la place dynamiquement.

Je veux dire par là qu'il ne réserve pas 65536 octets mais qu'il réserve une place proportionnelle à la chaine qu'il contient
j'imaginais juste une requête SQL de 65000 caractères :-&
c'était pas un commentaire sur le type ou autre :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 juil. 2005, 11:09

Je sais bien, mon "Quand même" était une suite :wink:

Mais j'ai profiter de ton intérêt pour expliquer mon choix

Remarque, imagine une requête d'insertion de 500 lignes dans une table de 200 champs ... :shock: :afraid:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 11:30

Remarque, imagine une requête d'insertion de 500 lignes dans une table de 200 champs ... :shock: :afraid:
ce serait fun :lol:

Invité
Invité n'ayant pas de compte PHPfrance

08 juil. 2005, 11:46

Merci
c est le type ideal
mais ce qui se passe c'est que certaine requete vont afficher par exemple le nom,prenom,age,adresse
et d'autre le numero de serie,l article, la reference...

et moi ensuite j execute ma requete ainsi
$sql="select requete from requete where numrequete=".$_POST['numero'];
$result=pg_query($sql);
$list=pg_fetch_array($result);
$sql2=".$list['requete'].";
$result2=pg_query($sql2);
while($list2=pg_fetch_array($result2))
{


}
et comment je vais faire pour pouvoir afficher les bon champs car dans le while je suis obliger de mettre $list2['nom'],$list2['prenom'].Et certaine requete ne contienne que 4 champs à afficher et d autre en contienne 10....
Je sais pas si j'ai été clair ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 11:53

utilise les fonctions pour connaitre le nombre de champs renvoyés et y accéder ensuite par leur index par exemple.

ou avec mysql_fetch_array, tu pourras récupérer un tableau indexé numériquement, tu auras la taille du tableau, et chaque valeur dans une cellule.

=> http://fr.php.net/manual/fr/ref.mysql.php

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 juil. 2005, 11:55

Ca sert à quoi cette ligne ?
$sql2=".$list['requete']."; 
Si tu tiens à mettre un point de chaque coté, je te conseille TRES vivement de sortir ton tableau de ta chaine
$sql2=".".$list['requete']."."; 
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

08 juil. 2005, 14:08

ok je vais voir ce que je trouve ua niveau fonction
mais la j'ai une petite erreur et je comprends pas d'ou cela viens
Dans mon premier formulaire je souhaite recupere la requete faite dans une variable de session et ensuite je la stocke dans ma table je fais cela

Code : Tout sélectionner

$sql="insert into requete (nom,requete) values ('essai1','".$_SESSION['sql']."')"; echo "<b>".$sql."</b>"; $result=pg_query($sql);
et il met un message d erreur
Warning: pg_query(): Query failed: ERROR: syntax error at or near "31" at character 640
et en faite sa viens des guillemet.
Postgres n accepte que les ' et comme dans ma requete j ai des ' ,il ne sait pas comment faire et si je met des " ,sa ne passe pas car il considere que c est une colonne d une table

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 14:10

si c'est un problème de quotes, échappe les avec addSlashes()
=> http://fr.php.net/manual/fr/function.addslashes.php

tu peux aussi afficher la requête qui est générée ($sql) et voir à quoi elle ressemble pour situer els erreurs