tiris
Messages postés6Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention12 octobre 2005
-
10 oct. 2005 à 20:07
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 2015
-
12 oct. 2005 à 19:11
Bonjour
Je finit mon année d'étude bientôt et suis en stage. Je découvre php sur mon sujet de stage :(
J'ai une classe de stats qui me construit des tableaux. Pour l'instant, 3 tableaux y sont calculés pour construire au final le tableau à afficher.
Pour l'instancier, je passe des bouts de requêtes. Deux fonctionnent bien mais la troisième est imbriquée dans une boucle avec une variable qui bouge sur chaque tour. Mon problème est de savoir comment passer un nom de variable en paramètre (et non la valeur).
Par exemple:$monArray array( monChamp , maTable , Year $annee AND month = $moisDepart)
$monTableau = new newStat( $monArray );
Bien sur ce code ne marche pas, php cherche à interpréter $annee et $moisDepart à l'appel.
tiris
Messages postés6Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention12 octobre 2005 11 oct. 2005 à 01:48
Tu dois avoir raison la faisabilité du truc.
Le "Year...." est une partie de la clause WHERE qui doit être reconstitué dans la classe (en requête complète donc).
C'est bien sur interprété avant l'appel et part en string dans ma requête.
Ce que je voudrais c'est des requêtes interprétées (dans la classe) comme ça:
for ($i=0;$i<$periode;$i++){
$sql="SELECT monchamp
FROM matable
WHERE year = $annee";
$mysql -> execute($sql);
bla bla...;
$annee++;
}
ou comme ça
for ($i=0;$i<$countMontype;$i++){
$sql="SELECT monchamp
FROM matable
WHERE type =".$montype[$i];
$mysql -> execute($sql);
bla bla...;
}
il me faut donc des variables dans ces boucles.
A part tout écrire en dur, je vois pas trop..
du coup ça fait pas très classe..
En tout cas merci à tous les deux d'avoir répondu
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 11 oct. 2005 à 09:27
J'a rien compris...!
Mais alors, rien! Lol.
Ou alors je ne vois pas le problème...
Tu peux vien avoir un tableau comme propriété de ta classe, dans lequel
tu stockes tes valeurs, et boucler sur ce tableau. Un peu comme ton 2d
exemple.
Tu peux aussi utiliser des trucs façon func_num_args () pour récupérer
les arguments d'appels d'une méthode. Enfin chais pas, je suis un peu
dans le flou, perso, sur ton problème. Je ne l'ai vraiment pas
franchement saisi ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
L'idée (idiote) première, était d'avoir une requête dynamique dans la classe. Pour être dynamique il faut impérativement que des NOMS de variables apparaissent pour y être intéprétées à chaque tour. Hors à l'appel,
sur $tabRequetDonnee[2], $moisDepart sera automatiquement intéprété, et arrive string dans la classe.
Ce que j'aurais voulu, c'était trouver un moyen de reconstituer des requêtes qui soient interprétées par php dans MA CLASSE comme dans les exemples de mon 2eme post.
Pour l'instant, j'utilise un switch case qui trie mes requêtes en dur.
tiris
Messages postés6Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention12 octobre 2005 11 oct. 2005 à 14:00
argh!!!
ton tableau reconstitué dans la classe donne une requête en string
for ($t=0 ; $t < $periode ; $t++){
$sql = "SELECT bla
FROM bli
WHERE year=2778 "; <------------au tour suivant ça ne peut bouger(sauf si $annee)
$mysql -> execute($sql);
bla bla...;
$ANNEE++; <----------- incremente mon annee sur boucle
}
Ce qu'il me faut c'est ça:
for ($t=0 ; $t < $periode ; $t++){
$sql = "SELECT bla
FROM bli
WHERE year= $ANNEE
$mysql -> execute($sql);
bla bla...;
$ANNEE++;
}
je ne peux pas renseigner toutes les valeurs que peut prendre le champ year à l'appel.
De plus, j'ai 90 graphiques, donc 90 requêtes différentes, et il me faut des variables qui puissent bouger dynamiquement dans cette requête.
comment expliquer quelque chose qui n'est pas possible
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 11 oct. 2005 à 15:14
C'est un peu l'anarchie ton code je trouve dans ta classe :)
public function constructTabDonnee($tabRequetDonnee){
for ($t=0 ; $t < $periode ; $t++){
$sql = "SELECT ".$tabRequetDonnee[0].
"FROM ".$tabRequetDonnee[1].
"WHERE ".$tabRequetDonnee[2];
$mysql -> execute($sql);
bla bla...;
}
}
C'est ta fonction tel quel. Hors :
$tabRequetDonnee provient de l'appel de fonction via le constructeur.
(variable $tabRequetDonnee) qui provient elle même d'un appel de
classe. Hors, quand on sait que $tabRequetDonnee, au final, vaut :
'Year $annee AND month $moisDepart', je comprend pas pourquoi tout
à coup $tabRequetDonnee devient un tableau !
Ce que je comprend encore moins, c'est comment avec un seul argument
dans ton instanciation de classe, tu arrives à avoir 3 arguments au
final ?
Le véritable appel de classe aurait dû etre :
$ma_class new newStat( 'monChamp' , 'maTable' , 'Year $annee AND month = $moisDepart' );
Ensuite, comme je l'ai dit plus haut, y'a des passages de variables d'une methode à une autre qui sont bizarre...
De toute facon, tu as des trucs qui ne changent pas j'imagine. Style
les variables à vérifier dans ta base SQL : Year - Month etc... Ca, ca
doit resté en dur sur ta requète, et laisser les variables en fonction
de ce que tu veux réelement changer.
Parce que moi perso, j'ai un peu de mal à m'y retrouver :)
tiris
Messages postés6Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention12 octobre 2005 12 oct. 2005 à 17:36
ça y est problème résolu.
J'ai réécrit ma classe en séparant mes requêtes de mes traitements sur les tableaux.
Pour le constructeur j'ai lu quelque part qu'il y avait deux écritures possibles, et j'ai donc continué à faire comme j'ai l'habitude en java.
En tout cas merci à ceux qui m'ont aidés, sympa ;)
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 12 oct. 2005 à 19:11
"Pour le constructeur j'ai lu quelque part qu'il y avait deux écritures possibles" Pour 2 versions de PHP différentes, oui.
Hors, si tu utilises les mots clefs "public" - "private" - "protected",
c'est que tu utilises PHP5. Hors, le constructeur dans PHP5 se nomme
bien __construct().
Il faut savoir que soit tu programmes pour une version donnée de PHP, soit pour une autre, mais en aucun cas un mix des 2.