Un array modulable?... aidez moi svp!

jed
Eléphant du PHP | 218 Messages

17 avr. 2007, 18:43

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?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

17 avr. 2007, 21:57

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?
Quand tout le reste a échoué, lisez le mode d'emploi...

jed
Eléphant du PHP | 218 Messages

17 avr. 2007, 22:02

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 avr. 2007, 08:30

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';
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

jed
Eléphant du PHP | 218 Messages

18 avr. 2007, 09:18

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:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 avr. 2007, 10:10

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

jed
Eléphant du PHP | 218 Messages

18 avr. 2007, 10:15

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

ViPHP
ViPHP | 3607 Messages

18 avr. 2007, 10:33

Que fait un while dans une affectation de variable ? :shock:

jed
Eléphant du PHP | 218 Messages

18 avr. 2007, 11:11

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>'; ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 avr. 2007, 12:05

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

jed
Eléphant du PHP | 218 Messages

18 avr. 2007, 12:22

Excellent! C'est ce qu'il me faut! Merci! 8-)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 avr. 2007, 13:49

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...