Gestion de liens

Eléphanteau du PHP | 18 Messages

13 sept. 2007, 00:08

Bonsoir a tou(te)s

Je suis en train de plancher sur un script de gestion de liens. C'est une application personnelle que je suis en train de créer pour me faire une liste de mes liens favoris en page de démarrage.

J'ai crée deux tables:
- une table "bureau" qui gère les liens
Table Create Table
------ --------------------------------------------------------------------------------------
bureau CREATE TABLE `bureau` (
`id` int(11) NOT NULL auto_increment,
`lien` varchar(100) default NULL,
`url` varchar(250) default NULL,
`favicon` varchar(250) default NULL,
`cat` int(11) default '1',
`online` enum('Y','N') default 'Y',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
- une table "bureau_cat" qui gère les catégories
Table Create Table
---------- ---------------------------------------------
bureau_cat CREATE TABLE `bureau_cat` (
`id` smallint(8) NOT NULL auto_increment,
`nom` varchar(100) default NULL,
`cat` smallint(8) default NULL,
`online` enum('Y','N') default 'Y',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Je voudrais afficher dans une balise <h1> le nom de chaque catégorie
et dans une liste de type <ul> chaque lien correspondant à cette catégorie. Ce qui donnerait à l'affichage quelque chose du type :

Nom de la catégorie
-----------------------
- lien 1
- lien 2
- ...

Voici la fonction ce que j'ai pour le moment et qui n'affiche pas le résultat voulu
##### connection à la base de données ####
function connect(){
  $link = @mysql_connect('***', '***', '***');
  if (!$link) {
     die('Connexion impossible : ' . @mysql_error());
  }
  $db_selected = @mysql_select_db('***', $link);
  if (!$db_selected) {
     die ('Impossible de sélectionner la base de données : ' . @mysql_error());
  }
}


### affiche les catégories de favoris et les liens ###
function affichage_des_categories() {
  $sql = "SELECT *
	     FROM bureau_cat
	     INNER JOIN bureau
	     ON bureau.cat = bureau_cat.cat
	     WHERE bureau.online = 'Y' AND bureau_cat.online = 'Y' ";
  $query = @mysql_query($sql);
  while ($row = @mysql_fetch_assoc($query)) {
    echo "
    <div class=\"cat\">
      <h1>".$row[nom]."</h1>
      <ul>
        <li><img src=\"".$row[favicon]."\" /><a href=\"".$row[url]."\">".$row[lien]."</a></li>
      </ul>
    </div>
    ";
  }
  @mysql_free_result($query);
}
Quelqu'un pourrait t'il m'expliquer comment bien faire la relation entre mes deux tables et afficher le résultat voulu.
Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 sept. 2007, 01:04

1 - tester la requête directement dans phpmyadmin, et voir si elle marche, avant de l'intégrer dans le script
2 - enlever les @ devant les fonctions : lesmessages d'erreurs servent à indiquer les erreurs (!), pourquoi les cacher et se compliquer la vie ?
3 - expliciter "n'affiche pas le résultat voulu"

Tu peux t'aider de ceci en règle générale: http://www.phpfrance.com/forums/voir_sujet-19378.php

Eléphanteau du PHP | 18 Messages

13 sept. 2007, 01:26

Autant pour moi :

J'ai testé la requête sql, elle fonctionne parfaitement
Le "n'affiche pas le résultat voulu" en fait m'affiche ceci :

catégorie 1 catégorie 1 catégorie 1
------------ ------------- ------------
lien 1 lien 2 lien 3

alors que je voudrais ce genre de d'affichage :

catégorie 1 catégorie 2
------------ -------------
lien 1 lien 1
lien 2 lien 2

Pour le @ je le mets systématiquement, peut être une mauvaise habitude, je suis un cancre ^^
Cancre du php, celui au fond de la salle près de la fenêtre et du radiateur....

d0m
Mammouth du PHP | 1141 Messages

13 sept. 2007, 08:22

Premièrement tu devrais utiliser un tableau pour afficher au lieu d'une liste puisque tu as plusieurs lignes et plusieurs colonnes.
Ensuite, utiliser des quotes pour les chaines de caractères.
row['nom']
Ensuite avant d'afficher, il faut arranger les résultat de ta requête.
Pour cela, il faut trier les liens suivant leur catégorie puisque tu veux afficher en colonne les liens de chaque catégorie.
Tu peux pour cela utiliser un tableau associatif php (array) avec les noms des catégories en clé et comme valeur un tableau contenant tous les liens de la catégorie.

Code : Tout sélectionner

array( 'catégorie 1' => array(0 => 'lien 1', 1 => 'lien 2',...) , 'catégorie 2' => array(0 => 'lien 3', 1 => 'lien 4',...), )
tu parcours donc les résultats de ta requête et tu construis ton tableau.

Finalement tu n'as plus qu'à parcourir ton tableau de manière à écrire ligne par ligne dans les différentes catégories.

Eléphanteau du PHP | 18 Messages

17 sept. 2007, 22:14

Merci dOm, j'ai suivi ton conseil et voici ce que j'ai réussi à faire
function affichage_des_categories() {
//requete
$result = mysql_query("select lien, url, nom 
                                   from bureau_cat 
                                   inner join bureau 
                                  on bureau.cat = bureau_cat.cat 
                                  where bureau.online = 'Y' and bureau_cat.online='Y'");

// stockage des données
$arr = array();
while( list( $lien , $url, $nom ) = mysql_fetch_array( $result ) ) {
  $arr[$nom][] = array( $lien => $url);
}

//affichage
foreach ( $arr as $nom => $cat ){
  echo '<div class=\'cat\'>';
  echo '<h1>'.$nom.'</h1>';
    foreach ( $arr[$nom] as $lien => $cat ){
      echo '<ul><li><a href='.$nom.'>'.$lien.'</a></li></ul>';
    }
   echo '</div>';
}

Mon souci c'est que je n'affiche pas correctement les champs lien et url dans le 2e foreach de la partie affichage.
Est ce que quelqu'un pourrait venir à mon secours?
merci
Cancre du php, celui au fond de la salle près de la fenêtre et du radiateur....

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 sept. 2007, 22:24

je n'affiche pas correctement les champs lien et url
C'est à dire.... ? :roll:

Eléphanteau du PHP | 18 Messages

17 sept. 2007, 22:37

En fait, à la place du champ lien, j'ai une lise d'id et à la place du champ url, j'ai l'url de la page en cours....

J'ai testé mon tableau avec un print_r() les résultat est celui que je veux, c'est juste l'affichage de mon tableau qui est problématique
Cancre du php, celui au fond de la salle près de la fenêtre et du radiateur....

Eléphanteau du PHP | 18 Messages

21 sept. 2007, 17:09

Un petit up, car le sujet n'est toujours pas résolu...

Je vous met un lien vers une page de test pour avoir une meilleure vision du résultat : voir ici
Et voici mon code actuel
function affichage_des_categories() {
  //requete
  $result = mysql_query("select lien, url, favicon, nom from bureau_cat inner join bureau on bureau.cat = bureau_cat.cat where bureau.online = 'Y' and bureau_cat.online='Y'");

  // stoquage des données
  $arr = array();

  while( list( $lien , $url, $favicon, $nom ) = mysql_fetch_array( $result ) ) {
    $arr[$nom][] = array( $lien => $url );
  }
  
  //affichage
  foreach ( $arr as $nom => $cat )
  {
    echo '<div class=\'cat\'>';
    echo '<h1>'.$nom.'</h1>';
    foreach ( $arr[$nom] as $lien => $url )
    {
      echo '<ul><li><img src=\''.$favicon.'\'/><a href='.$url.'>'.$lien.'</a></li></ul>';
    }
    echo '</div>';
  }

  //print_r du array
  echo '<div style=\'clear:both;\'></div><pre>';
  echo print_r($arr);
  echo '</pre>';
  
}
Je ne vois pas comment procéder pour afficher correctement mes champs liens et url depuis ma base... Voilà si quelqu'un pouvait venir a mon secours ca serait le pied.
Cancre du php, celui au fond de la salle près de la fenêtre et du radiateur....