Dissocier le PHP du HTML : votre avis?

WRInaute passionné
Bonjour,

Habituellement je fais appel à mes variables directement au seins de la boucle while() mais la je veux les utiliser en dehors de celle-ci afin de dissocier un maximum le code php du html de façon à pouvoir modifier facilement la structure d'un site (html/css). Comme je ne comprend kedal au moteur de template je me suis dis que j'allais "caser" mes variables dans des tableaux pour les ressortirent au sein d'une boucle for() mais je me demande si ma façon de procéder n'est pas trop "zarbi", si il y des risques, etc...

Code:
<?php
	$result = mysql_query("SELECT id,nom,prenom FROM table ORDER BY id ASC");
	$compte = mysql_num_rows($result);
	while($affiche = mysql_fetch_array($result))
	{
		$id[] = $affiche['id'];
		$nom[] = $affiche['nom'];
		$prnom[] = $affiche['prenom'];
	}
?>

Code:
<?php
	for($i=0;$i<$compte;$i++;){?>
	
	<span class="aa"><?php echo $id[$i];?></span>
	<span class="bb"><?php echo $nom[$i];?></span>
	<span class="cc"><?php echo $prenom[$i];?></span>
	
<?php } ?>

Qu'en pensez-vous?

Merci
 
WRInaute impliqué
Le mot crade correspond. C'est fonctionnel, dépendant de ce que tu veux faire ça ira surement parfaitement, mais c'est pas joli joli.

Après, c'est plus niveau développeur qu'autre chose.

L'internaute lui il s'en fou il verra pas la différence ( ou si peu ).
 
Nouveau WRInaute
Ouep, voilà désolé de pas être rentré dans le détail. Mais je parlais bien d'utiliser un modèle MVC.

C'est des méthodes de travail essentiel si tu veux travailler sur des projets maintenable.

En gros il faut que tu sépares ton projet en différentes couche. ( Présententation (HTML), Code (php) , Accès aux données (sql) ).

Le mot crade était peut être un peu "fort" , et pas très sympa. Mais ça me semble essentiel de ne pas tout mélanger au niveau de ton projet.

Après voilà, un site peu très bien être fonctionnel , même si tu écris tes pages en dûr en HTML aussi :mrgreen:

Donc je t'invite à te renseigner sur des moteurs de recherche tel que smarty (il en existe d'autres). Ne pas hésiter à t'informer sur la POO aussi. Et utiliser l'api mysqli. (Pour eviter des problème d'injection sql dans tes applications par exemple (je parle en règle général hein , pas par rapport à la requête sql que t'a écris précisement)).

Enfin voilà, c'est juste mon point de vue qui je l'espère sera constructif pour toi :wink:
 
WRInaute accro
tryan a dit:
je me suis dis que j'allais "caser" mes variables dans des tableaux pour les ressortirent au sein d'une boucle for()
Je passe sur le concept "architecture logiciel" qui dépasse le cadre de ta question et peut être pour l'instant de ton projet pour revenir sur les fondamentaux de ta question.

Caser tes variables "dans un tableau". Quand tu fait une requête comme tu la présente ici, $result est déjà un tableau quand tu le parcours avec ton while pour initialiser différent micro tableaux par type (tu as oublié de les indicer dans ton assignation) tu ne fait que créer d'autres tableau a partir d'un tableau. Est ce utile ? surement que non.

Concernant le parcours d'un tableau avec "for(){...}", non ce n'est pas bien car c'est trop basique et a réserver a des boucles bornées dont on maitrise parfaitement le nombre. "While(){...}" et encore mieux "foreach(){...}" sont beaucoup plus adaptés a ce genre de travail tout en étant plus élégants dans le code.

Ta volonté de dissocier présentation code applicatif etc est louable mais ton exemple ne montre pas cette façon de faire même a bas niveau.
Code:
<?php
   $result = mysql_query("SELECT id,nom,prenom FROM table ORDER BY id ASC");
   $compte = mysql_num_rows($result);

devrait être :
$requete = "SELECT id,nom,prenom FROM ${table} ORDER BY id ASC";
$compte = data_query($requete);

où :
$table serait le nom d'une table contenu dans une variable provenant d'un fichier de config
data_query() une fonction définie dans une bibliothèque interne de ton système mais pourrait aussi être sous la forme d'un appel de fonction membre (méthode) d'un objet du genre :
$connexion_donnees = new sgbd(); // instanciation d'un objet
$compte = $connexion_donnees->query($requete); // obtention d'un resultset

En procédant ainsi tu centralise le code chargé de la communication avec l’entrepôt de données donc :

tu rationalise le code.
tu te met en position d'appliquer un ou des traitements a toutes les requêtes.
tu te donne le choix de travailler sur une base X ou Y en changeant une ligne ou deux.
tu améliore la maintenance car un changement peut se faire sur une fonction ou méthode a un seul point du code.

si on étend l'idée a l'affichage tu devrais être en mesure d'appliquer un format d'affichage a partir d'un résultat de requête sans te préoccuper du quoi et du combien donc ton code de présentation devrait fournir une fonction (ou une méthode membre d'un objet) qui traite la chose toute seule :

script_presentation.php

Code:
<?php
   function aff_tableau($in){
      foreach($in as $data){   
         echo '<span class="aa">'$data[0].'</span>';
         echo '<span class="bb">'$data[1].'</span>';
         echo '<span class="bb">'$data[2].'</span>';
      }
   }

   function truc($in){
      ....
   }

   function machin($in){
      ...
   }
?>

Bon après c'est très généraliste c'est difficile de te dire si c'est bien ou pas quand on n'a pas la vision de tout le code dans la mesure ou cela peut être un cas isolé ou une pratique régulière.
 
WRInaute accro
duchnoun38 a dit:
Ouep, voilà désolé de pas être rentré dans le détail. Mais je parlais bien d'utiliser un modèle MVC.
déjà, au niveau du web, qu'appelle-t-on Vue ? est-ce le code html produit ? dans ce cas, le code pour produire ce html n'est plus considéré comme étant une Vue, mais plutôt un Modèle ou un Controleur, dans lesquels le code est "autorisé".
De toutes façons, les moteurs de template n'ont pas la partie html exempte de code, exempte de php soit, mais si c'est pour rajouter une couche de complexité avec du pseudo code, quelle est la différence et, surtout, quel en est l'intérêt ?
 
WRInaute impliqué
Code:
 function aff_tableau($in){
      foreach($in as $data){
Le mini soucis, si je puis dire, c'est qu'il faut être sûr à 100% que $in est un tableau, sinon foreach va renvoyer une erreur, et @ ne fonctionne pas pour foreach.
 
WRInaute occasionnel
C'est un bon début mais tu vas réinventer la roue.
Je conseille le moteur d'objets de xoops avec le moteur de template smarty, un peu dur au début mais terriblement efficace ensuite.
 
WRInaute passionné
Je vous remercie de vos réponses :D mais je dois avouer être dépassé..

J'ai survolé ce qui était moteur de template et MVC pour en comprendre l'utilisation et ce qui me chagrine c'est qu'il faut toujours ajouté "des couches" et multiplier les fichiers pour obtenir le même résultat (visuellement). J'aime la simplicité et la logique mais la j'ai du mal à mi retrouver d'autant plus que je suis resté à l'ancienne version de mysql. A vous lire, il faut pour ainsi dire tout caser dans des fonctions, utiliser X fichiers pour en faire tourner un seul, etc... ne peut on pas simplement séparer le code (php/sql) du html d'une autre façon du genre (php/traitement/requête) d'un côté et affichage de l'autre et le tout appelé par une simple include? Il doit bien exister un moyen simple d'utiliser des variables en dehors d'une boucle while()..non?
 
WRInaute discret
je vais jeter une poussière dans la flaque et me faire l'avocat de l'ange...

Et pourquoi développer un projet de manière crade ne permettrait-il pas de s'assurer que dans 10 ans à sa revente, on ne pourra plus se passer de l'auteur...
 
WRInaute accro
nervusdm a dit:
Le mini soucis, si je puis dire, c'est qu'il faut être sûr à 100% que $in est un tableau
Tu peux aussi donner a manger des bananes a un nourrisson de 3 mois mais faut être a côté de la plaque pour essayer.
tryan a dit:
vous lire, il faut pour ainsi dire tout caser dans des fonctions, utiliser X fichiers pour en faire tourner un seul
Non il faut pas tout caser dans des fonctions, il faut avoir des fonctions qui répondent a un maximum de cas utiles.
Après les design patterns sont très adaptés a des projets comprenant plusieurs personnes beaucoup moins a un projet individuel don tu assure seul le suivi. Dans les faits si tu vend un logiciel difficile a maintenir et bien tant pis pour les suivants c'est leur problème et si ils ont jamais fait du reverse et bien ils auront qu'à réapprendre les classiques.

Tu dois toi même définir les limites de ton code. Soit tu te moque de te prendre la tête et répéter toujours les même séquences de code dans chaque script que tu voudra réaliser soit tu décide de te faire des outils qui répondent a ses nécessités et tu monte une bibliothèque large.
Tu peut aussi faire appel a un code existant mais il faudra faire du reverse sur ce code pour le comprendre et vraiment le maitriser.
Tu as le choix de travailler en objet ou en procédural ... c'est toi qui décide.

Après si tu veux réutiliser sans structuration tu fera toujours les mêmes choses et tu ne réutilisera jamais ton code pour aller plus loin sur tes bases.

Ce qu'il faut que tu retienne du pattern MVC c'est qu'il est bon de dissocier les couches par fonctions.
 
WRInaute passionné
Bon .. et bien je suis dans le "kk" jusqu'aux narines ^^!
Je m'étais confectionné un petit CMS maison qui fonctionne plutôt bien (à mon gout) mais comme je suis resté sur l'ancienne version de MYSQL, celui-ci ne devrait pas tourner très longtemps..je n'ai plus qu'à tout recommencer et ré-apprendre les nouvelles fonctions sql :( .

Comme je suis largué de chez largué, je ne sais pas vers quoi me tourner, Style orienté objet ou Style procédural :?:

Je reviendrais plus tard pour la séparation du code (d'ici la je me serais grillé le peut de neurones qui me reste :mrgreen:) .
 
WRInaute impliqué
tryan, fait attention, ne t'affole pas trop.

J'ai l'impression que vous confondez la séparation du HTML du code métier avec l'utilisation d'un moteur de template.
Quand on regarde Zend Framework, on fait un développement MVC sans utiliser un seul moteur de template.

tryan ne semble pas vouloir se lancer dans quelque chose de super compliqué. Ce qui importe le plus, surtout si tu es le développeur unique, c'est que tu sois à l'aise avec ton code.

Je ne connais pas la structure de ton site, mais si tu veux dissocier tes requêtes du code HTML, le principe du "je met le PHP en haut" marche bien. Exemple :

PHP:
<span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br /><br />$result </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SELECT id,nom,prenom FROM table ORDER BY id ASC"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$compte </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_num_rows</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$result</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$donnesTable </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">();<br />while(</span><span class="syntaxdefault">false </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> $affiche </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_fetch_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$result</span><span class="syntaxkeyword">))<br />{<br /></span><span class="syntaxdefault">    $donnesTable</span><span class="syntaxkeyword">[]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $affiche</span><span class="syntaxkeyword">;<br />}<br /><br /></span><span class="syntaxcomment">// autre truc à faire ...<br /></span><span class="syntaxdefault">?><br /></span><html><br />    ...<br />    <body><br />        <span class="syntaxdefault"><?php foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$donnesTable AS $donnee</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">:</span><span class="syntaxdefault"> ?><br /></span>        <span class="aa"><span class="syntaxdefault"><?php echo $donnee</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"id"</span><span class="syntaxkeyword">];</span><span class="syntaxdefault">?></span></span><br />        <span class="bb"><span class="syntaxdefault"><?php echo $donnee</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"nom"</span><span class="syntaxkeyword">];</span><span class="syntaxdefault">?></span></span><br />        <span class="cc"><span class="syntaxdefault"><?php echo $donnee</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"prenom"</span><span class="syntaxkeyword">];</span><span class="syntaxdefault">?></span></span><br />        <span class="syntaxdefault"><?php endforeach</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> ?><br /></span>    </body><br /></html><br /></span>

Pour le coté affichage, il faut penser au htmlspecialchars.
Avec cette pratique, tu as un code HTML maintenable.
 
WRInaute passionné
Bha si justement, je m'affole tellement que je me demande même si je dois continuer sur le web ou lâcher l'affaire!
Je ne suis pas développeur, tout juste un bidouilleur autodidacte dépassé suite aux nouvelles versions de MYSQL, HTML5, CSS3..
tryan ne semble pas vouloir se lancer dans quelque chose de super compliqué. Ce qui importe le plus, surtout si tu es le développeur unique, c'est que tu sois à l'aise avec ton code.
Je suis "à l'aise" avec mon code mais ma façon de faire et le langage que j'utilise semble être d'un autre temps. Quand j'effectue une recherche sur php.net, je tombe systématiquement sur :
Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur.
..ça en dit long sur ma façon de coder :( .
Comme je le disais dans ce topic, je me suis créé un "CMS maison" que je pensais partager mais comme je n'ai pas dissocier le PHP du HTML, il serait alors difficile pour l'utilisateur de modifier facilement la structure HTML et CSS du site d'ou ma question initiale. Suite aux réponses données, je suis forcé de constater que je code comme un manche avec en plus une base obsolète.

@zeb ma dit :
Quand tu fait une requête comme tu la présente ici, $result est déjà un tableau quand tu le parcours avec ton while pour initialiser différent micro tableaux par type (tu as oublié de les indicer dans ton assignation) tu ne fait que créer d'autres tableau a partir d'un tableau. Est ce utile ? surement que non.

Ce n'est pas ce que fait ton code également?

Merci pour vos réponses :D .
 
WRInaute accro
Bah non, j'ai pas spécialement détaillé mais je ne fait pas de tableaux a partir d'un tableau.
 
WRInaute passionné
Quand je dis que je suis à la ramasse ...
Pour moi, qui dit boucle while() dit tableau et quand je vois des crochets à une variable ($donnesTable[]), je me dis encore tableau d'ou mon interrogation.

Par apport à ton code et s j'ai besoin d'effectuer des comparaisons, je ne peut pas le faire en dehors de la boucle foreach()?
 
WRInaute impliqué
Blount a dit:
Je ne connais pas la structure de ton site, mais si tu veux dissocier tes requêtes du code HTML, le principe du "je met le PHP en haut" marche bien.

Dans ce cas, on est dans du procédural pure...

Je rebondis sur ce sujet car je ne comprends pas la remarque "crade" sur un code qui intégrerait du PHP mélangé à du HTML.

Tout dépend avant tout du projet. Développer un "petit" site (OK l'appellation petit site peut-être sujette à interprétation) ne nécessite pas forcément le développement d'un MVC.
Quelques classes le cas échéant, quelques fichiers d'inclusion pour les fonctions répétitives et ça devrait faire l'affaire sans avoir besoin de passer par un MVC et encore moins un moteur de template... Le procédural comme définit plus haut doit parfaitement faire l'affaire.

En outre, à mon sens, un moteur de template ne me semble pas toujours approprié, loin de là. Zend n'en a pas par exemple. J'utilise SMARTY dans le framework sur le projet où je travaille actuellement, et il n'a été prit principalement que pour des raisons de traduction (SMARTY est très appréciable dans ce cas).
Ce projet sur lequel je suis est une refonte d'un ERP multilingue qui a été développé depuis plus de 10 ans en PHP et qui était en procédural. Alors là oui c'était devenu un monstre... et le but est justement d'intégrer un MVC avec moteur de template SMARTY pour lui donner une architecture plus... conviviale dirons-nous...
 
WRInaute impliqué
franckM a dit:
Blount a dit:
Je ne connais pas la structure de ton site, mais si tu veux dissocier tes requêtes du code HTML, le principe du "je met le PHP en haut" marche bien.

Dans ce cas, on est dans du procédural pure...

Bin, le MVC n'implique pas forcément l'orienté objet. On peut faire du MVC en procédural.

Chacun sa façon de développer.
 
WRInaute accro
franckM a dit:
Tout dépend avant tout du projet. Développer un "petit" site (OK l'appellation petit site peut-être sujette à interprétation) ne nécessite pas forcément le développement d'un MVC.
Quelques classes le cas échéant, quelques fichiers d'inclusion pour les fonctions répétitives et ça devrait faire l'affaire sans avoir besoin de passer par un MVC et encore moins un moteur de template... Le procédural comme définit plus haut doit parfaitement faire l'affaire.
Je partage pas mal ton avis d'autant que le "procédural" inspiré des design patterns a de nombreux avantages. C'est pour ça que je parle de retenir les concept mais pas forcement de les mettre en œuvre.
 
WRInaute impliqué
Blount a dit:
Bin, le MVC n'implique pas forcément l'orienté objet. On peut faire du MVC en procédural.

Je me suis exprimé de manière incorrecte. Par procédural, j'entendais plus PHP en haut- html en bas même avec des objets (de toute façon à mon sens en nombre limité sinon on doit au moins partir sur une architecture 3-tiers).
 
WRInaute accro
nervusdm a dit:
Code:
 function aff_tableau($in){
      foreach($in as $data){
Le mini soucis, si je puis dire, c'est qu'il faut être sûr à 100% que $in est un tableau, sinon foreach va renvoyer une erreur, et @ ne fonctionne pas pour foreach.
il te suffit d'ajouter un
Code:
 if (!is_array($in)) return FALSE;
en haut de la fonction
FINIELS a dit:
Et pourquoi développer un projet de manière crade ne permettrait-il pas de s'assurer que dans 10 ans à sa revente, on ne pourra plus se passer de l'auteur...
ça, ça tendrait à faire croire qu'un projet soit disant MVC est bien développé. En me plongeant dans le code de projets développés en objet je serais plutôt de l'avis contraire.
zeb a dit:
Tu as le choix de travailler en objet ou en procédural ... c'est toi qui décide.
qu'est-ce qu'une fonction d'un objet, si ce n'est du procédural ?
 
WRInaute accro
Leonick a dit:
qu'est-ce qu'une fonction d'un objet, si ce n'est du procédural ?
J'arrête pas de le dire a tous les cacou que je croise en jury d'exam mais quand les "jeunes" ont l'objet dans la tête ils ont plus rien d'autre dans la culotte ... et je parle même pas des débordements mémoire que peuvent facilement causer les objets dans la mesure ou on a moins le nez sur les datas qu'on manipule ...
 
WRInaute impliqué
Tu peux aussi donner a manger des bananes a un nourrisson de 3 mois mais faut être a côté de la plaque pour essayer.
C'était très drôle.
Non je plaisante, tu es pathétique et puant.


if (!is_array($in)) return FALSE;
Exactement. Mais autant ne pas donner de fonction si elles sont mal foutue.
 
WRInaute occasionnel
Tu fais une v0, un v1, une v2, à la v2 tu reliras ce thread en rigolant bien. Tu as en tout cas assez de points de départ pour une vie de code.
 
WRInaute accro
nervusdm a dit:
if (!is_array($in)) return FALSE;
Exactement. Mais autant ne pas donner de fonction si elles sont mal foutue.
pourquoi mal foutue ? normalement, tu es sensé vérifier les données que tu passes en entrée à une fonction. Tu ajoutes une autre vérification à l'intérieur et c'est ok.
Sinon, j'ai du mal à voir l'intérêt des try/catch et, encore pire, des debugger dans les plateforme de développement :wink:
 
WRInaute accro
@nervusdm > Moi aussi je t'aime :lol:
Tu aurait été tout aussi bien inspiré de signaler a Tryan que les lignes function truc($in){ .... } ne fonctionnent pas.
 
WRInaute passionné
J'ai regardé les vidéos mentionnées par @spout dans le poste https://www.webrankinfo.com/forum/t/dissocier-le-php-du-html-votre-avis.163834/#p1432629 ... vous codez vraiment tous comme ça?

@Blount : je fais des testes à partir de ta portion de code et je reste plus ou moins dans la même situation car dans la boucle foreach je suis obligé d'effectué certaines conditions permettant de construire des url, ce qui fait que je me retrouve avec une bonne plâtré de PHP au seins de cette boucle.
 
WRInaute impliqué
tryan a dit:
@Blount : je fais des testes à partir de ta portion de code et je reste plus ou moins dans la même situation car dans la boucle foreach je suis obligé d'effectué certaines conditions permettant de construire des url, ce qui fait que je me retrouve avec une bonne plâtré de PHP au seins de cette boucle.

Rien ne t'empêche d'ajouter des choses lors de la création du tableau dans la boucle while :
PHP:
<span class="syntaxdefault"><br />$result </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SELECT id,nom,prenom FROM table ORDER BY id ASC"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$compte </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_num_rows</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$result</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$donnesTable </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">();<br />while(</span><span class="syntaxdefault">false </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> $affiche </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_fetch_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$result</span><span class="syntaxkeyword">))<br />{<br /></span><span class="syntaxdefault">    $affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"url"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"http://..."</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"autre"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"truc bidule chouette"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $donnesTable</span><span class="syntaxkeyword">[]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $affiche</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault"> </span>
 
WRInaute accro
Je code avec des frameworks, pour pas réinventer TOUTE la roue et avoir une base solide de démarrage.
CakePHP pr mes projets depuis 2007.
Zend Framemerde pr mon employeur.
Et Django depuis 2 mois.
 
WRInaute passionné
Le problème reste le même car je ne vois pas comment afficher les données hors de la boucle while ?

Pour bien comprendre, voici un extrait de mon code d'origine :
Code:
	while($affiche = mysql_fetch_array($result)){ 
		echo '<div class="article"><span class="date">Le '.convertit_date($affiche['date']).'</span><h2>';
		//Rewriting activé (titre)
		if($rewrite == true){
			//on créer des variables pour les différents liens de la page
			$url_categorie = '/'.$affiche['id_categorie'].'-'.OptimiseUrl($affiche['nom_categorie']).'/';
			$url_sous_categorie = ''.$affiche['id_sous_categorie'].'-'.OptimiseUrl($affiche['titre_sous_categorie']).'/';
			$url_article = ''.OptimiseUrl($affiche['titre']).'-'.$affiche['idcontenu'].'';			
			
			echo '<a title="'.clean($affiche['titre']).'" href="'.$url_index.$url_categorie.$url_sous_categorie.$url_article.'">'.$affiche['titre'].'</a>';
		}
		//Rewriting non activé (titre)
		else{
			echo '<a title="'.clean($affiche['titre']).'" href="'.$url_index.'/page.php?id='.$affiche['idcontenu'].'">'.$affiche['titre'].'</a>';
		}
		echo '</h2><div class="contenu-article">';
		if(!empty($affiche['image'])){
			echo '<img style="margin:5px;" align="left" alt="'.clean($affiche['titre']).'" src="'.$affiche['image'].'"/>';
		}
		echo ''.nl2br($affiche['description']).'</div>';
		//Rewriting activé (catégories + sous-catégorie)
		if($rewrite == true){
			echo '<span class="date">
			<a title="'.clean($affiche['nom_categorie']).'" href="'.$url_index.$url_categorie.'">'.$affiche['nom_categorie'].'</a> » 
			<a title="'.clean($affiche['titre_sous_categorie']).'" href="'.$url_index.$url_categorie.$url_sous_categorie.'">'.$affiche['titre_sous_categorie'].'</a>
			</span>';
		}
		//Rewriting non activé (catégories + sous-catégories)
		else{
			echo '<span class="date">
			<a title="'.clean($affiche['nom_categorie']).'" href="'.$url_index.'/categorie.php?id='.$affiche['id_categorie'].'">'.$affiche['nom_categorie'].'</a> » 
			<a title="'.clean($affiche['titre_sous_categorie']).'" href="'.$url_index.'/sous-categorie.php?id='.$affiche['id_sous_categorie'].'">'.$affiche['titre_sous_categorie'].'</a>
			</span>';
		}
		echo '</div>';
	}

Quand je tente d'adapter ton code pour dissocier le php du html je me retrouve pour le moment avec ça :
Dans l'entête du document avant le DOCTYPE se trouve l'ensemble de mes requêtes
Code:
<?php
//fonctions, connexions, etc...
	$donnesTable = array();
	//On boucle
	while(false !== $affiche = mysql_fetch_array($result)){
		$donnesTable[] = $affiche;
	}
?>

Dans le corp de la page
Code:
<?php
	foreach ($donnesTable AS $donnee ):
	//Rewriting activé (titre)
	if($rewrite == true){
		//on créer des variables pour les différents liens de la page
		$url_categorie = '/'.$donnee['id_categorie'].'-'.OptimiseUrl($donnee['nom_categorie']).'/';
		$url_sous_categorie = ''.$donnee['id_sous_categorie'].'-'.OptimiseUrl($donnee['titre_sous_categorie']).'/';
		$url_article = ''.OptimiseUrl($donnee['titre']).'-'.$donnee['idcontenu'].'';			
		
		$url ='<a title="'.clean($donnee['titre']).'" href="'.$url_index.$url_categorie.$url_sous_categorie.$url_article.'">'.$donnee['titre'].'</a>';
	}
	//Rewriting non activé (titre)
	else{
		$url = '<a title="'.clean($donnee['titre']).'" href="'.$url_index.'/page.php?id='.$donnee['idcontenu'].'">'.$donnee['titre'].'</a>';
	}					
	if(!empty($donnee['image'])){
		$url_image = '<img style="margin:5px;" align="left" alt="'.clean($donnee['titre']).'" src="'.$donnee['image'].'"/>';
	}
	$description = nl2br($donnee['description']);
	//Rewriting activé (catégories + sous-catégorie)
	if($rewrite == true){
		$url_ariane = '
		<a title="'.clean($donnee['nom_categorie']).'" href="'.$url_index.$url_categorie.'">'.$donnee['nom_categorie'].'</a> » 
		<a title="'.clean($donnee['titre_sous_categorie']).'" href="'.$url_index.$url_categorie.$url_sous_categorie.'">'.$donnee['titre_sous_categorie'].'</a>
		';
	}
	//Rewriting non activé (catégories + sous-catégories)
	else{
		$url_ariane = '
		<a title="'.clean($donnee['nom_categorie']).'" href="'.$url_index.'/categorie.php?id='.$donnee['id_categorie'].'">'.$donnee['nom_categorie'].'</a> » 
		<a title="'.clean($donnee['titre_sous_categorie']).'" href="'.$url_index.'/sous-categorie.php?id='.$donnee['id_sous_categorie'].'">'.$donnee['titre_sous_categorie'].'</a>
		';
	}							
?>

<div class="article">
	<span class="date">
		<?php echo convertit_date($donnee['date']);?>
	</span>
	<h2><?php echo $url;?></h2>
	<div class="contenu-article">
		<?php echo $url_image.$description;?>
	</div>
	<span class="date">
		<?php echo $url_ariane;?>
	</span>
</div>
<?php endforeach; ?>

Je ne vois pas comment intégrer mes "if($rewrite == true){" et Cie dans le while() pour sortir le résultat dans un simple echo au sein de la boucle foreach?

Mon objectif final étant d'obtenir dans le corps de la page un code facilement modifiable du genre :
Code:
<?php
foreach ($donnesTable AS $donnee ): ?>

<div class="article">
	<span class="date">
		<?php echo convertit_date($donnee['date']);?>
	</span>
	<h2><?php echo $url;?></h2>
	<div class="contenu-article">
		<?php echo $url_image.$description;?>
	</div>
	<span class="date">
		<?php echo $url_ariane;?>
	</span>
</div>

<?php endforeach; ?>
 
WRInaute impliqué
Bah, au lieu d'utiliser echo, tu fais de l'assignation de variable.

PHP:
<span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br />$result </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SELECT id,nom,prenom FROM table ORDER BY id ASC"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$compte </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_num_rows</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$result</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$donnesTable </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">();<br />while(</span><span class="syntaxdefault">false </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> $affiche </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_fetch_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$result</span><span class="syntaxkeyword">))<br />{<br /></span><span class="syntaxdefault">    if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$rewrite</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        $affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"url"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $url_index</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'id_categorie'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'-'</span><span class="syntaxkeyword">.<br /></span><span class="syntaxdefault">            OptimiseUrl</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'nom_categorie'</span><span class="syntaxkeyword">]).</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'id_sous_categorie'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'-'</span><span class="syntaxkeyword">.<br /></span><span class="syntaxdefault">            OptimiseUrl</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'titre_sous_categorie'</span><span class="syntaxkeyword">]).</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">.<br /></span><span class="syntaxdefault">            OptimiseUrl</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'titre'</span><span class="syntaxkeyword">]).</span><span class="syntaxstring">'-'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'idcontenu'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        $affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"url"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $url_index</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'/page.php?id='</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'idcontenu'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'">'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'titre'</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    $affiche</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"autre"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"truc bidule chouette"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $donnesTable</span><span class="syntaxkeyword">[]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $affiche</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault">?><br /></span>[...]<br /><span class="syntaxdefault"><?php foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$donnesTable AS $donnee</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">:</span><span class="syntaxdefault"> ?><br /></span><div class="article"><br />   <span class="date"><br />      <span class="syntaxdefault"><?php echo convertit_date</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$donnee</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'date'</span><span class="syntaxkeyword">]);</span><span class="syntaxdefault">?><br /></span>   </span><br />   <h2><span class="syntaxdefault"><?php echo $donnee</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'url'</span><span class="syntaxkeyword">];</span><span class="syntaxdefault">?></span></h2><br />   <div class="contenu-article"><br />      <span class="syntaxdefault"><?php echo $url_image</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$description</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">?><br /></span>   </div><br />   <span class="date"><br />      <span class="syntaxdefault"><?php echo $url_ariane</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">?><br /></span>   </span><br /></div><br /><span class="syntaxdefault"><?php endforeach</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> ?><br /></span>[...]<br /> </span>

Tu fais pareil pour le reste.
 
WRInaute passionné
Tient, je t'aime toi :mrgreen: ça fonctionne.
Du coup, j'ai assigné toute mes variables dans la boucle while ce qui fait que toute la partie php se trouve avant le "doctype" et pour le reste de la page, j'ai juste des "echo" et la boucle foreach. Du coup et sauf si vous me dites que ce n'est pas correcte, je vais scinder la page en 2 pour dissocier le traitement de l'affichage.
Haaa, je suis content (pour l'instant :D ).

Merci
 
Discussions similaires
Haut