Forum de discussions pour les webmasters et les web developpeurs. (PHP, SQL, XHTML, JavaScript, Référencement, Positionnement,...)
Vous n'êtes pas identifié.
Encore moi
,
Tu voulais du poste, en voilà
!
Bon je me confronte à un petit soucis de boucle successive pour la création d'un menu dynamique.
En gros, mon menu appel dans la 1ere boucle les catégories, dans la seconde boucle les sous catégories, dans la troisième boucle les pages appartenant aux sous catégorie et dans la quatrième boucle des liens appartenant aux différentes sous catégories . Mon soucis vient de la dernière boucle qui m'affiche un lien pour une sous catégorie en double exemplaire ..
L'id de chaque catégorie ou sous catégorie se retrouve enregistré dans chacune de mes tables pour pouvoir faire la concordance plus facilement. Ainsi ,dans ma boucle, je récupère l'id de la sous catégorie à partir de ma 2 ieme boucle ou a partir de la 3 ieme pour pouvoir l'utiliser dans ma dernière boucle ... Sa devrait théoriquement fonctionner ... ma sa veut pas ^^
! (saloperie de php).
Ma requête va chercher si l'id enregistrer dans ma table LIEN correspond à l'id de la sous catégorie pour l'afficher... ce qui est le cas puisque que celui ci s'affiche .. mais en double !
Si tu as comprit ce que je tente d'expliquer, tant mieux ![]()
Merci
Hors ligne
Heu oui mais mon code va t'être aussi abstrait que ma question ![]()
!
Tant pis, tu l'auras voulu
:
<?php
$monidtransmit=$_GET["monid"];
if (isset($_GET["monid"]))
{
include("data_bd.php");
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier data_bd.php.');
//on selection les infos de la catégorie pour afficher les meta
$query1 = mysql_query("SELECT * FROM CATEGORIE WHERE id=$monidtransmit");
while($nomcategorie = mysql_fetch_array($query1))
{
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Language" content="fr" />
<title><?php echo html_entity_decode($nomcategorie['nom_categorie']); ?></title>
<meta name="Description" content="<?php echo html_entity_decode($nomcategorie['description_categorie']); ?>" />
<meta name="Keywords" content="<?php echo html_entity_decode($nomcategorie['motcle_categorie']); ?>" />
<?php
}//onferme la boucle du while
?>
<style type="text/css" media="screen">
@import url( style.css );
</style>
</head>
<body>
<div style="text-align: center;"><?php include("header.php"); ?>
<?php
/*
la fonction de re ecriture est inutile puisque qu'elle est deja utilisé dans le menu
*/
include("data_bd.php");
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier data_bd.php.');
//on selection les catégorie
$query = mysql_query("SELECT * FROM CATEGORIE WHERE id=$monidtransmit");
$id_de_la_categorie="";
$nom_de_la_categorie="";
while($categorie = mysql_fetch_array($query))
{
$id_de_la_categorie = $categorie['id'];
$id_de_la_categorie.="$id";
$nom_de_la_categorie = html_entity_decode($categorie['nom_categorie']);
$nom_de_la_categorie.="$nom_categorie";
//$nom_de_la_categorie = str_replace('é', 'é', $nom_de_la_categorie);
$nom_de_la_categorie = str_replace('é', 'é', $nom_de_la_categorie);
$nom_de_la_categorie = str_replace('Ú', 'è', $nom_de_la_categorie);
$nom_de_la_categorie = str_replace('Ã', 'à', $nom_de_la_categorie);
$nom_de_la_categorie = str_replace('«', '«', $nom_de_la_categorie);
$nom_de_la_categorie = str_replace('»', '»', $nom_de_la_categorie);
$nom_de_la_categorie = str_replace('àª', 'ê', $nom_de_la_categorie);
$nom_de_la_categorie = str_replace('à§', 'ç', $nom_de_la_categorie);
$nom_de_la_categorie = str_replace('à®', 'î', $nom_de_la_categorie);
//on affiche les catégories
echo '<h1>'.$nom_de_la_categorie.'</h1><br/>';
//on ne ferme pas la boucle pour selectionné les sous catégorie
//on selectionne les sous catégories
$query1 = mysql_query("SELECT * FROM SOUS_CATEGORIE WHERE nom_categorie_principal=$id_de_la_categorie");
$id_de_la_categorie_principal="";
$lid_de_la_sous_categorie="";
$nom_de_la_sous_categorie="";
while($souscategorie = mysql_fetch_array($query1))
{
$id_de_la_categorie_principal = $souscategorie['nom_categorie_principal'];
$id_de_la_categorie_principal.="$nom_categorie_principal";
$lid_de_la_sous_categorie = $souscategorie['id'];
$lid_de_la_sous_categorie.="$id";
$nom_de_la_sous_categorie = html_entity_decode($souscategorie['nom_sous_categorie']);
$nom_de_la_sous_categorie.="$nom_sous_categorie";
$nom_de_la_sous_categorie = str_replace('é', 'é', $nom_de_la_sous_categorie);
$nom_de_la_sous_categorie = str_replace('Ú', 'è', $nom_de_la_sous_categorie);
$nom_de_la_sous_categorie = str_replace('Ã', 'à', $nom_de_la_sous_categorie);
$nom_de_la_sous_categorie = str_replace('«', '«', $nom_de_la_sous_categorie);
$nom_de_la_sous_categorie = str_replace('»', '»', $nom_de_la_sous_categorie);
$nom_de_la_sous_categorie = str_replace('àª', 'ê', $nom_de_la_sous_categorie);
$nom_de_la_sous_categorie = str_replace('à§', 'ç', $nom_de_la_sous_categorie);
$nom_de_la_sous_categorie = str_replace('à®', 'î', $nom_de_la_sous_categorie);
//on affiche les sous catégorie
echo '<div class="cadrepub">Sous catégorie: '.$nom_de_la_sous_categorie.'</div>';
//on ne ferme pas la boucle pour selectionné les pages
//on selectionne les pages
$query2 = mysql_query("SELECT * FROM PAGE_DU_SITE WHERE categorie_de_la_page=$lid_de_la_sous_categorie");
$id_categorie_principal="";
$id_sous_categorie="";
$id_de_la_page="";
$titre_page="";
$description_page="";
while($pagedusite = mysql_fetch_array($query2))
{
$id_categorie_principal = $pagedusite['categorie_principal'];
$id_categorie_principal.="$categorie_principal";
$id_sous_categorie = $pagedusite['categorie_de_la_page'];
$id_sous_categorie.="$categorie_de_la_page";
$id_de_la_page = $pagedusite['id'];
$id_de_la_page.="$id";
$titre_page = html_entity_decode($pagedusite['titre_de_la_page']);
$titre_page.="$titre_de_la_page";
$description_page = html_entity_decode($pagedusite['description_de_la_page']);
$description_page.="$description_de_la_page";
//on affiche le titre et l'url des pages
/*echo ' N:<a href="page-site.php?page='.$id_de_la_page.'">'.$titre_page.'</a><br/>*/
$titre_page = str_replace('é', 'é', $titre_page);
$titre_page = str_replace('Ú', 'è', $titre_page);
$titre_page = str_replace('Ã', 'à', $titre_page);
$titre_page = str_replace('«', '«', $titre_page);
$titre_page = str_replace('»', '»', $titre_page);
$titre_page = str_replace('àª', 'ê', $titre_page);
$titre_page = str_replace('à§', 'ç', $titre_page);
$titre_page = str_replace('à®', 'î', $titre_page);
echo '<div style="text-align: left;"><ul>';
echo '<li><strong><a href="'.OptimiseUrl($titre_page).'-'.$id_de_la_page.'.php">'.$titre_page.'</a></strong></li>';
echo '</ul></div>';
/*
$description_page = str_replace('é', 'é', $description_page);
$description_page = str_replace('Ú', 'è', $description_page);
$description_page = str_replace('Ã', 'à', $description_page);
$description_page = str_replace('«', '«', $description_page);
$description_page = str_replace('»', '»', $description_page);
$description_page = str_replace('àª', 'ê', $description_page);
$description_page = str_replace('à§', 'ç', $description_page);
$description_page = str_replace('à®', 'î', $description_page);
echo "<p style=\"text-align: left;\">$description_page </p>";
*/
//on ne ferme pas la boucle pour selectionné les liens
//on selectionne les liens
$query3 = mysql_query("SELECT * FROM LIEN_DU_SITE WHERE sous_categorie_du_lien=$id_sous_categorie ");
$mon_id_du_lien="";
$son_id_du_lien_de_la_sous_categorie="";
$mon_le_titre_du_lien="";
$mon_url_du_lien="";
$ma_description_du_lien="";
while($liendusite = mysql_fetch_array($query3))
{
$mon_id_du_lien = $liendusite['id'];
$mon_id_du_lien.="$id";
$son_id_du_lien_de_la_sous_categorie = $liendusite['sous_categorie_du_lien'];
$son_id_du_lien_de_la_sous_categorie.="$sous_categorie_du_lien";
$mon_le_titre_du_lien = html_entity_decode($liendusite['titre_du_lien']);
$mon_le_titre_du_lien.="$titre_du_lien";
$mon_url_du_lien = html_entity_decode($liendusite['url_du_lien']);
$mon_url_du_lien.="$url_du_lien";
$ma_description_du_lien = html_entity_decode($liendusite['description_du_lien']);
$ma_description_du_lien.="$description_du_lien";
//on affiche les Liens
echo '<h3"><a href="'.$mon_url_du_lien.'">'.$mon_le_titre_du_lien.'</a></h3>';
//echo "<p style=\"text-align: left;\">$ma_description_du_lien</p>";
//on ferme toutes les boucles
}
}
}
}
mysql_close();
?>
</div>
<br />
<p style="text-align: center;"><?php include("includpub.php"); ?></p>
<?php include("footer.php"); ?>
</body>
</html>
<?php
}
?>Les str_replace c'est parce que je suis repassé en charset=iso-8859-1
.
Hors ligne
C'est vrai que c'est pas très compréhensible comme code dans l'état actuel.
Pourquoi ne met tu pas tes str_replace dans une fonction pour commencer?
Si tu pouvez me donner juste la partie du code qui te pose probléme cela m'aiderez beaucoup pour la compréhension ![]()
Hors ligne
Pourquoi pas très compréhensible ?
Le code est détaillé sur quasiment chaque requête
.
Ensuite et dans l'ordre ->je récupère l'id de la catégorie pour effectuer mes requêtes.
1ere requête permet d'afficher les meta de la catégorie.
Ensuite sa va dans l'ordre -> requete pour la catégorie->puis sous catégorie->puis pages associés à la sous catégorie-> puis liens associés à la sous catégorie.
Avant chaque requête je stocke les données dans un tableau pour pouvoir les utiliser par la suite et j'ai casé des str_replace pour chaque variable.
La requête qui m'ennuie:
//on selectionne les liens
$query3 = mysql_query("SELECT * FROM LIEN_DU_SITE WHERE sous_categorie_du_lien=$id_sous_categorie ");
$mon_id_du_lien="";
$son_id_du_lien_de_la_sous_categorie="";
$mon_le_titre_du_lien="";
$mon_url_du_lien="";
$ma_description_du_lien="";
while($liendusite = mysql_fetch_array($query3))
{
$mon_id_du_lien = $liendusite['id'];
$mon_id_du_lien.="$id";
$son_id_du_lien_de_la_sous_categorie = $liendusite['sous_categorie_du_lien'];
$son_id_du_lien_de_la_sous_categorie.="$sous_categorie_du_lien";
$mon_le_titre_du_lien = html_entity_decode($liendusite['titre_du_lien']);
$mon_le_titre_du_lien.="$titre_du_lien";
$mon_url_du_lien = html_entity_decode($liendusite['url_du_lien']);
$mon_url_du_lien.="$url_du_lien";
$ma_description_du_lien = html_entity_decode($liendusite['description_du_lien']);
$ma_description_du_lien.="$description_du_lien";
//on affiche les Liens
echo '<h3"><a href="'.$mon_url_du_lien.'">'.$mon_le_titre_du_lien.'</a></h3>';Le truc, est que si pour une sous catégorie j'enregistre un lien et 3 pages j'ai alors 3 fois le même lien qui s'affiche au lieu d'un seul. Si tu veux voir ce que sa donne, envoie moi un mp ou sur msn.
Pour les str_replace dans une fonction, je ne sais pas comment faire quand on utilise plusieurs variables.
Merci
Dernière modification par c00lman (06-04-2008 18:54:38)
Hors ligne
Tu pourrais peu être utiliser la fonction DISTINCT
de SQL pour ne pas retourner plusieurs enregistrement identique avec tes requêtes.
Si tu pouvez me donner la structure de ta table et un petit extrait de donnée je pourrai surement t'en dire plus ^^
Hors ligne
C'est bon, je viens de trouver ce qui clochait...
J'ai juste fermé la boucle de mes pages avant de boucler sur celle des liens
, I'm happy
.
Je suis quand même dégouté .. plus de 2 jours pour sa --> } , saleté de php ^^.
Hors ligne
Il faut indenter son code.
http://fr.wikipedia.org/wiki/Indentation#Informatique
Dernière modification par ComandoCool (07-04-2008 23:44:03)
Hors ligne
Voila un nouveau mot pour moi
. Effectivement sa permet de mieux si retrouver, surtout pour ceux qui lise le code après ^^, encore faut il avoir le logiciel adéquate parce que à la main ... c'est chiant !
Hors ligne
Même pour toi-même c'est pratique pour se relire et ne pas oublier des "}" à la fin.
Hors ligne
Attention à ne pas imbriquer trop de boucles non plus, 2 ou 3 suffisent en général.
Sinon pour aérer ton code utilise des fonctions, voir des classes, car là l'indentation va être un peu inutile si elle est sur plus d'une page. Conséquence, tu ne sais plus quelle accolade va avec quoi et on se retrouve au même point.
Hors ligne