Page 1 sur 1

Un array modulable?... aidez moi svp!

Posté : 17 avr. 2007, 18:43
par jed
Bonjour, j'ai décidé de procéder d'une manière complètement différente à mes habitudes pour externaliser le visuel du code pour mon prochain site et je rencontre quelques difficultés: je souhaite passer mes variables dans mon "template" via une fonction prenant pour paramètre un tableau associatif. J'aimerai pouvoir ajouter des index au tableau au fur et à mesure de mon code, mais il me renvoit l'erreur suivante:
Parse error: syntax error, unexpected T_DOUBLE_ARROW in G:\web\test\index.php on line 21
Voici mon code:

Code : Tout sélectionner

<?php include "templates/style.php"; $data = array(); if (isset ($_GET['page'])) { $page = $_GET['page']; if (!empty ($page)) { switch ($page) { case 'skins': break; case 'tools': break; case 'links': break; default: $data("pagetitle" => "index"); } } else $data("pagetitle" => "index"); } else $data("pagetitle" => "index"); $header = header ($data);

Code : Tout sélectionner

<?php function header($data=array()) { echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Create to Play | '.$data['pagetitle'].'</title> <link rel="stylesheet" type="text/css" href="style/style.css" /> <head> <body>'.body($data); }
Bon j'en suis au tout début alors forcément le code n'est pas complété mais je me concentre d'abord sur ce problème. Auriez vous une idée?

Posté : 17 avr. 2007, 21:57
par @rthur
Bonjour,
syntax error, [...] on line 21
Quelle est la ligne 21?


De plus, je ne connais pas cette notation:

Code : Tout sélectionner

$data("pagetitle" => "index");
ça permet de faire quoi?

Posté : 17 avr. 2007, 22:02
par jed
- Ligne 21, celle-ci:

Code : Tout sélectionner

else $data("pagetitle" => "index");
- et bien cette notation je pense est celle qui permet d'ajouter la valeur "index" à l'indice "pagetitle" du tableau... c'est faux?

Posté : 18 avr. 2007, 08:30
par Ryle
Vi elle n'est pas bonne ta syntaxe :) On ne l'utilise que pour initialiser un tableau. Lorsque le tableau est défini, il faut faire appel aux index entre crochets pour les définir comme pour les modifier :
// déclaration d'un tableau indéxé initialisé
$data = array(
  'index_1' => 'valeur_1',
  'index_2' => 'valeur_2'
);

// déclaration d'un nouvel index (ou affectation d'un index) dans un tableau existant :
$data['nouvel_index'] = 'valeur';

Posté : 18 avr. 2007, 09:18
par jed
Arf c'est bien dont ce j'avais peur, je suis obligé alors de déclarer un maximum d'indices même si j'en ai jamais besoin de tous à la fois... je croyais que c'était possible d'en rajouter au fur et à mesure du code. Bon ben tant pis et merci pour la réponse. :wink:

Posté : 18 avr. 2007, 10:10
par Ryle
Euh.... ben non.... je viens de te montrer qu'on pouvait les déclarer à la volée n'importe quand, en utilisant la syntaxe d'affectation :-s

Posté : 18 avr. 2007, 10:15
par jed
Ah oui pfff j'ai vraiment la tête dans le *** ce matin désolé... j'en profite pour poser une autre question pour ne pas squatter un nouveau sujet: comment intègre t'on une boucle dans une variable?

Voici mon code:

Code : Tout sélectionner

$temp = mysql_query ('SELECT * FROM *** ORDER BY id DESC LIMIT 0,5'); $body = '<table width="80%" align="center">',while ($result = mysql_fetch_assoc ($temp)) { ,'<tr> <td width="100%" align="left" bgcolor="#ababab">',$result["titre"],'</td> </tr> <tr> <td align="justify" bgcolor="#ababab">',$result["contenu"],'</td> </tr>',};
Ce qui me renvoit l'erreur parse error sur la ligne

Code : Tout sélectionner

$body = '<table width="80%" align="center">',while ($result = mysql_fetch_assoc ($temp)) {

Posté : 18 avr. 2007, 10:33
par jojolapine
Que fait un while dans une affectation de variable ? :shock:

Posté : 18 avr. 2007, 11:11
par jed
je te joins le code en entier, tu vas comprendre:

Code : Tout sélectionner

<?php if (isset ($_GET['page'])) { $page = $_GET['page']; if (!empty ($page)) { switch ($page) { case 'skins': $pagetitle = "skins pour moh"; $menu = '<br /><a href="index.php" class="normal">Accueil</a><br /> <br /><b>Skins MoH</b><br /> <br /><a href="index.php?page=tools" class="normal">Outils pour MoH</a><br /> <br /><a href="index.php?page=links" class="normal">Liens</a><br /><br />'; $menu_right = ''; $body = ''; break; case 'tools': $pagetitle = "outils"; $menu = '<br /><a href="index.php" class="normal">Accueil</a><br /> <br /><a href="index.php?page=skins" class="normal">Skins MoH</a><br /> <br /><b>Outils pour MoH</b><br /> <br /><a href="index.php?page=links" class="normal">Liens</a><br /><br />'; $menu_right = ''; $body = ''; break; case 'links': $pagetitle = "liens"; $menu = '<br /><a href="index.php" class="normal">Accueil</a><br /> <br /><a href="index.php?page=skins" class="normal">Skins MoH</a><br /> <br /><a href="index.php?page=tools" class="normal">Outils pour MoH</a><br /> <br /><b>Liens</b><br /><br />'; $menu_right = ''; $body = ''; break; default: $pagetitle = "index"; $body = ''; $menu = '<br /><b>Accueil</b><br /> <br /><a href="index.php?page=skins" class="normal">Skins MoH</a><br /> <br /><a href="index.php?page=tools" class="normal">Outils pour MoH</a><br /> <br /><a href="index.php?page=links" class="normal">Liens</a><br /><br />'; } } else { $pagetitle = "index"; $body = ''; $menu = '<br /><b>Accueil</b><br /> <br /><a href="index.php?page=skins" class="normal">Skins MoH</a><br /> <br /><a href="index.php?page=tools" class="normal">Outils pour MoH</a><br /> <br /><a href="index.php?page=links" class="normal">Liens</a><br /><br />'; $menu_right = ''; } } else { $pagetitle = "index"; $body = ''; $menu = '<br /><b>Accueil</b><br /> <br /><a href="index.php?page=skins" class="normal">Skins MoH</a><br /> <br /><a href="index.php?page=tools" class="normal">Outils pour MoH</a><br /> <br /><a href="index.php?page=links" class="normal">Liens</a><br /><br />'; $menu_right = ''; mysql_connect ('****, '****', '****') or die ('erreur de connexion au serveur!'); mysql_select_db ('****') or die ('erreur de connexion à la base de données!'); $temp = mysql_query ('SELECT * FROM **** ORDER BY id_news DESC LIMIT 0,5'); $body = '<table width="80%" align="center">',while ($result = mysql_fetch_assoc ($temp)) { ,'<tr> <td width="100%" align="left" bgcolor="#ababab">',$result["titre"],'</td> </tr> <tr> <td align="justify" bgcolor="#ababab">',$result["contenu"],'</td> </tr>',;}; } echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>'.$pagetitle.'</title> <link rel="stylesheet" type="text/css" href="style.css" /> <head> <body bgcolor="#808080"> <table width="80%" align="center"> <tr> <td width="100%" colspan=3 align="center" bgcolor="#ababab"> <img src="images/logo.gif" /> </td> </tr> <tr> <td width="20%" valign="top" align="center" bgcolor="#ababab"><span class="normal">'.$menu.'</span></td> <td width="60%" valign="top" align="center" bgcolor="#808080">'.$body.'</td> <td witdh="20%" valign="top" align="center" bgcolor="#ababab">'.$menu_right.'</td> </tr>'; ?>

Posté : 18 avr. 2007, 12:05
par Ryle
En fait on ne met pas de while, de boucle ou de choses farfelues dans une variable.. on y met uniquement des valeurs :)

En revanche, dans une boucle, on peut très bien mettre à jour une variable, en la concaténant par exemple avec d'autres chaines :
$body = '<table width="80%" align="center">'; 

while ($result = mysql_fetch_assoc ($temp))  { 
  $body .= '<tr> 
         <td width="100%" align="left" bgcolor="#ababab">',$result["titre"],'</td> 
      </tr> 
      <tr> 
         <td align="justify" bgcolor="#ababab">',$result["contenu"],'</td> 
      </tr>';
}
L'opérateur " .= " effectue une concaténation. Cela revient au même que si j'avais écrit $body = $body . 'blabla', mais en plus court :)

Posté : 18 avr. 2007, 12:22
par jed
Excellent! C'est ce qu'il me faut! Merci! 8-)

Posté : 18 avr. 2007, 13:49
par Ryle
Modération :
jed, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet ;)