[PHP] exploiter un array indéterminé [resolu]

Si un admin acceptait de claquer mon topic dans le forum progra ce serait sympa. :riva:

Salut à tous. Je recquiert (encore ?) votre aide.

Bon je vous explique la situation. Je suis en train de refair emon site de a à z et je compte mettre toutes mes pages sur MySQL. Donc index.php?page=x affiche la page portant l’id x dans ma table MySQL. Bon jusque là rien de bien compliqué mais je compte faire un petit plus.

Je compte faire une autre table sur MySQL dans laquelle je vais stocker "des dossiers". En effet, sur mon site il y a des tutoriaux et des dossiers comprenant plusieurs pages. De cette manière, je pourrais afficher sur la droite de la page des liens vers les différentes pages du site.

Bon bref. Je vous explique rapidement le début du code :

Lors de l’affichage d’une page :

  • On va chercher son contenu sur MySQL
  • On regarde si le champ dossier contient un nombre
    Si le champ dossier contient un nombre
  • On va chercher les infos sur le dossier sur MySQL
  • On récupère alors une chaine du type
    25;48;75;125;126;
    Ces nombres représentent l’id de chaque page du dossier.

Or maintenant je blqoue pour faire les liens.
J’ai commencé par faire un explode du ma chaine pour obtenir tous les numéros dans un array. Puis ensuite je compte combien j’ai d’entrées dans mon array avec count. On obtient donc ceci :

if ($page_donnees['dossier'] == 0) {
	// la page n'est pas dans un dossier (code pas fini)
} else {
	$dossier_retour = mysql_query("SELECT * FROM site_dossiers WHERE id='" . mysql_real_escape_string($page_donnees['dossier']) . "'");
	if (mysql_num_rows($dossier_retour) == 1) {
  $dossier_pages = explode(';', $dossier_retour['pages']);
  $dossier_pages_nbr = count($dossier_pages);

Bon arrivé ici je voulais fair eune boucle mais je sais pas comment. On a donc la liste des pages dans $dossier_pages[‘x’] avec pour x de 0 à $dossier_pages_nbr - 1.
Mais maintenant comment je fais ma boucle ?
:pfff:

J’ai entendu parler des variables variables mais j’en sais pas plus que ça. Alors peut être que si quelqu’un sait comment ça marche…

pourquoi ne mets tu tout simplement pas le nom de tes fichiers dans ta base Mysql ?

y a quelques temps j’avais fais un menu entièrement dynamique. Le webmaster créé via une interface d’administration les menus et il pouvait décider que tel ou tel utilisateurs ait accès. Je me suis pris comme toi …

Dans ma table, j’avais le champs : haut, bas, gauche, droit et page …

et j’apellais ma page comme toi : index.php?page=x. En allant sur cette url, ca faisait une recherche dans le champs page, et une fois que je trouvais x, j’afficher ma page avec les noms des fichiers (haut, bas, gauche, droit) correspondant à x

j’espere que je me suis bien comprendre. Je pense que tu n’as pas besoin d’ID.

Bien je crois que tu n’a pas parfaitement compris le principe.

Lorsque je vais chercher le contenu d’une page sur SQL, je récupère éventuellement dans un champ l’id d’un dossier.
SI cet id existe, je vais chercher les infos du dossiers sur SQL. Ces infos me retournent une suite de nombres séparés par des points virgules.

Mon problème est que je na’rrive pas à isoler des nombres dans une boucle pour faire les liens.

En gros si j’ai

$chaine = '12;13;17;18;19;22';

J’isole chaque nombre dans un array :

$array1 = explode(';', $chaine);

Ce qui nous donen un array de ce genre :
0 => 12
1 => 13
2 => 17 …

Après cela je veux faire une boucle pour faire mes liens :

while ( ??? ) {
echo '<a href="' . $truc . '">Blabla</a>';
}

Mais je ne sais aps comment faire ma boucle en fait.

et bien tu conte le nombre de sub string ‘;’ dans $chaine


$nb=substr_count($chaine,';');

for ($i=0;i<=nb;i++)
   echo '<a href="' . $truc . '">Blabla</a>';

et comme ça ?

for ( $i=0; $i < count($array1); $i++)
echo "<a href=\"".$array[$i]."\">truc n°".$array[$i]."</a>";

Bon désolé j’ai eu quelques problèmes avec le script.

Bon alors j’ai essayé la solution de faire $donnees[$i] mais je n’obtiens pas grand chose. Voyez donc le code :

  $dossier_pages = explode(';', $dossier_retour['pages']);
  $dossier_pages_nbr = count($dossier_pages) - 1;
  $dossier_liens .= '	<ul>';
  for ($i=0; $i <= $dossier_pages_nbr; $i++) {
  	$dossier_currentpage = mysql_fetch_array(mysql_query("SELECT titre FROM site_pages WHERE `id` = '" . $dossier_pages['$i'] . "'"));
  	$dossier_liens .= '  <li><a href="' . $dossier_pages['$i'] . '">' . $dossier_currentpage['titre'] . '</a></li>
';
  }
  $dossier_liens .= '	</ul>';

J’ai créé un dossier de 2 pages dans MySQL et résultat :

<ul><li><a href=""></a></li></ul>

Je vais rééxaminer le code pour voir ce qui pourrait éventuellement clocher…

Je viens de tomber sur 4 fonctions intéressantes sur php.net :

  • current() qui donne une ligne de l’array
  • nect() qui fait avancer la position de l’array
  • prev() qui fait reculer la position de l’array
  • reset() qui met la position de l’array à zéro

Je vais me tenter une petite boucle avec ça…

Bon avec les 4 fonctions citées précédement, j’ai fait ça :

  $dossier_pages = explode(';', $dossier_retour['pages']);
  $dossier_pages_nbr = count($dossier_pages) - 1;
  reset($dossier_pages);
  $dossier_liens .= '  <ul>
';
  for ($i = 0; $i < $dossier_pages_nbr; $i++) {
  	$dossier_currentpage = mysql_fetch_array(mysql_query("SELECT titre FROM site_pages WHERE `id` = '" . current($dossier_pages) . "'"));
  	$dossier_liens .= '  	<li><a href="' . current($dossier_pages) . '">' . $dossier_currentpage['titre'] . '</a></li>
';
  	next($dossier_pages);
  }
  $dossier_liens .= '  </ul>

Mais ça ne donne rien du tout lol :sweet:

<ul></ul>

:grrr: :grrr: A l’aide ! :grrr: :grrr:

sinon d’un autre coté, cela n’a rien a avoir avec le forum Internet, c’est peut etre pour ca …

c’est la premiere fois que tu utilise un forum ?

Non lol c’est que sur clubic ya forum progra et forum internet.
Sur le coup j’avais oublié cette diversité et posté dans internet ^^