Pb de remplacement de variable sur template

dark
Invité n'ayant pas de compte PHPfrance

13 juil. 2005, 14:11

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"

Mammouth du PHP | 1353 Messages

13 juil. 2005, 14:20

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...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juil. 2005, 14:22

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"
Modifié en dernier par mere-teresa le 13 juil. 2005, 14:24, modifié 1 fois.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mammouth du PHP | 1353 Messages

13 juil. 2005, 14:23

je suis d accord dans le principe mais selon le but ca peut compliquer la tache pour rien, non :wink: ?

dark
Invité n'ayant pas de compte PHPfrance

13 juil. 2005, 14:25

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
:(

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juil. 2005, 14:25

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 ?

Mammouth du PHP | 1353 Messages

13 juil. 2005, 14:29

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

dark
Invité n'ayant pas de compte PHPfrance

13 juil. 2005, 14:30

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 ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juil. 2005, 14:32

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....
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 104 Messages

13 juil. 2005, 14:33

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.

dark
Invité n'ayant pas de compte PHPfrance

13 juil. 2005, 14:36

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 ;)

Eléphant du PHP | 138 Messages

13 juil. 2005, 14:46

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.
Il y a des gens qui ont une bibliothèque comme des eunuques ont un harem (V. Hugo)

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juil. 2005, 14:47

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>
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

dark
Invité n'ayant pas de compte PHPfrance

13 juil. 2005, 14:53

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 !! :(

Eléphant du PHP | 138 Messages

13 juil. 2005, 15:01

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"
Il y a des gens qui ont une bibliothèque comme des eunuques ont un harem (V. Hugo)