Page 1 sur 2

Pb de remplacement de variable sur template

Posté : 13 juil. 2005, 14:11
par dark
Bonjour,
J'utilise une requete SELECT dont le résultat est > 10 :

Code : Tout sélectionner

<? $res=mysql_query("SELECT * FROM table ORDER BY ID"); while($row=mysql_fetch_array($res)){ define ("ID",$row['ID']); include (tableau.html); } ?>
dans mon fichier tableau.html (templates) je veux afficher mon tableau comportant les champs 'ID';

Code : Tout sélectionner

<table><tr> <td><?=ID;?></td> </tr></table>
Je pense que la fonction 'define' n'est pas appropriée puisque le champs ID devient identique dans le résultat du tableau !!!
Mais je ne sais pas comment faire !!
Merci par avance de votre aide ;)

Modération de mere-teresa : ET youp ! Dans le forum "Base de données"

Posté : 13 juil. 2005, 14:20
par guilt92
tu dois absolument le faire dans deux fichiers séparés ?

tu ne peux pas faire un .php ou tu executes ta requete, tu définis ton tableau et tu le complete au fur et a mesure ?

Si cette solution t interesse tiens moi au courant si t as des problemes pour la mise en place...

Posté : 13 juil. 2005, 14:22
par mere-teresa
tu dois absolument le faire dans deux fichiers séparés
Mais c'est bien de faire deux fichiers séparés ! Au moins, il ne mélange pas tout (et puis le développeur peut développer et le graphiste peut designer...)

Et pour ton souci consulte le tutorial suivant : http://www.phpfrance.com/tutoriaux/inde ... l-avec-php notamment à partir de "4-Affichage des données"

Posté : 13 juil. 2005, 14:23
par guilt92
je suis d accord dans le principe mais selon le but ca peut compliquer la tache pour rien, non :wink: ?

Pas possible !!

Posté : 13 juil. 2005, 14:25
par dark
tu dois absolument le faire dans deux fichiers séparés ?
Ouije suis obligé d'avoir 2 fichiers séparés !!!
Un pour la requete et un pour la templates HTML
:(

Posté : 13 juil. 2005, 14:25
par mere-teresa
je suis d accord dans le principe mais selon le but ca peut compliquer la tache pour rien, non :wink: ?
JE fais des fichiers séparés et ne supporte pas la critique :)

Bon plus sérieusement, le but de faire des fichiers séparés (surtout quand on débute) c'est de comprendre par où passent les données.
Et qui te dit qu'il ne fait pas un include à la fin ?

Posté : 13 juil. 2005, 14:29
par guilt92
C est pour ca que je posai la question :o tu as transformé ma citation en excluant le ? :
tu dois absolument le faire dans deux fichiers séparés ?
Mais bon le fait est que c'est toujours mieux et que en plus la tu n'as pas l'air d'avoir le choix donc je reconnais (non sans peine) que mere-teresa a peut etre raison

petit oubli !!

Posté : 13 juil. 2005, 14:30
par dark
Dans mon problème, il faut absolument que les variables qui apparaissent dans le fichier HTML ne comporte pas de code PHP genre strtipslashes

Code : Tout sélectionner

(strtoupper($row['ID']))
j'ai besoin d'uriliser des variable définie.
Voilà .. j'espere avoir été clair !!
Merci ;)

Posté : 13 juil. 2005, 14:32
par mere-teresa
Et pour ton souci consulte le tutorial suivant : http://www.phpfrance.com/tutoriaux/inde ... l-avec-php notamment à partir de "4-Affichage des données"[/color]

<calimero>Personne ne m'écoute jamais.</calimero>

Faut traiter le résultat de ta requête mon grand et le mettre dans une variable....

Posté : 13 juil. 2005, 14:33
par fggdm
Salut,

"ET youp ! Dans le forum "Base de données" "
Exit Dark Va Dehors ! :lol:

Si j'ai bien compris Dark tu cherches à séparer le traitement de la vue ?

Il va falloir passer par les sessions et y "stocker" les données à afficher sous forme de tableaux ou d'objets. La vue ne fera que récupérer les données pour les afficher. Les constantes ne sont pas la bonne méthode.

Note : ça peut marcher biensûr avec des inclusions mais pour moi c'est une fausse séparation traitements / vues. Une vraie séparation imposerait une redirection à la fin du traitement. J'ai vu que cette solution était proposée dans PHP|Architect comme en Java par exemple (enfin on peut faire des trucs crados en Java aussi :lol: , tout ça ne dépend que du développeur).
Quand on travaille avec ce modèle en tête on ne recherche pas la performance rapidité / mémoire mais la performance évolutivité / maintenabilité et à séparer les différentes couches. La redirection apporte un confort et répond aux critères sans perte de vitesse / mémoire si importante.

Je reformule !!

Posté : 13 juil. 2005, 14:36
par dark
Je vais reformuler ma question plus simplement :)
Peux-ton supprimer une variable définie comme ça:

Code : Tout sélectionner

define ("ID",$row['ID']);
pour pouvoir la réutiliser dans la meme page
Merci ;)

Re: Pb de remplacement de variable sur template

Posté : 13 juil. 2005, 14:46
par Axel
Salut
pour ton problème, je pense que la solution serait de mettre l'ensemble de tes valeurs dans une variable tableau.
ensuite tu sors ton include de la boucle
et tu fais une toute petite boucle dans ton tableau.html.
ce qui donnerait ceci:
<?
$res=mysql_query("SELECT * FROM table ORDER BY ID");
$ID = array();
while($row=mysql_fetch_array($res)){
     $ID[] = $row['ID'];
}
include (tableau.php);
?>
et le fichier tableau.html qui devient tableau.php
<table>
   <?php 
    for ($i=0, $i< count($ID) , $i++){
      echo "<tr><td>".$ID[$i]."</td></tr>";
    } 
    ?>
</table>
Je pense que ce sera mieux que la solution avec l'include dans le "WHILE" car là tu crées autant de table que de d'ID contenus dans ta requète.
A moins que je n'est rien compris et que c'est ce que tu voulais faire?!?

La solution de séparer les 2 fichiers est bonne et je rejoinds mère Thérésa mais il assez difficile de supprimer tout le code dans un fichier template.

Posté : 13 juil. 2005, 14:47
par mere-teresa
Sans toucher à ta structure : à chaque tour de boucle while il faudrait fabriquer une ligne de tableau...en fait
<?
$res=mysql_query("SELECT * FROM table ORDER BY ID");
while($row=mysql_fetch_array($res)){
$une_cellule = "<td>" . $row['ID'] . "</td>";//on crée la cellule
     define ("ID",$une_cellule);
     include (tableau.html);
}
?>

Et tu enlèves les <td> dans le HTML

Code : Tout sélectionner

<table><tr> <?=ID;?> </tr></table>

Posté : 13 juil. 2005, 14:53
par dark
Si on utilise ça :

Code : Tout sélectionner

<? $res=mysql_query("SELECT * FROM table ORDER BY ID"); while($row=mysql_fetch_array($res)){ $une_cellule = "<td>" . $row['ID'] . "</td>";//on crée la cellule define ("ID",$une_cellule); include (tableau.html); } ?>
et si le résultat de la requete est > 10 enregistrements la constante ID reste invariable avec la valeur du 1er enregistrement !! :(

Posté : 13 juil. 2005, 15:01
par Axel
Si on utilise ça :

Code : Tout sélectionner

<? $res=mysql_query("SELECT * FROM table ORDER BY ID"); while($row=mysql_fetch_array($res)){ $une_cellule = "<td>" . $row['ID'] . "</td>";//on crée la cellule define ("ID",$une_cellule); include (tableau.html); } ?>
et si le résultat de la requete est > 10 enregistrements la constante ID reste invariable avec la valeur du 1er enregistrement !! :(
Il a raison et en plus si on veut modifier le style pour la cellule on est obligé de le faire dans le fichier d'origine.
Du coup il devient difficile de travailler sur le style avec seulement le fichier "tableau.html"