Web Developpement

Forum de discussions pour les webmasters et les web developpeurs. (PHP, SQL, XHTML, JavaScript, Référencement, Positionnement,...)

Vous n'êtes pas identifié.

#1 05-04-2008 14:46:08

c00lman
Modérateur
Date d'inscription: 05-03-2008
Messages: 42
Site web

Soucis sur boucle while successive.

Encore moi big_smile,
Tu voulais du poste, en voilà lol !

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 ^^ mad ! (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 lol
Merci

Hors ligne

 

Liens utiles

#2 05-04-2008 14:57:13

Crocxx
Webmaster
Lieu: France -> Tours (37)
Date d'inscription: 05-02-2008
Messages: 229
Site web

Re: Soucis sur boucle while successive.

Est il possible de montrer ton code pour que je puisse regarder ce qui ne fonctionne pas.

Sans code cela reste très abstrait ^^

Hors ligne

 

#3 05-04-2008 15:23:21

c00lman
Modérateur
Date d'inscription: 05-03-2008
Messages: 42
Site web

Re: Soucis sur boucle while successive.

Heu oui mais mon code va t'être aussi abstrait que ma question lollol !
Tant pis, tu l'auras voulu tongue :

Code:

<?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&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;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&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;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 tongue .

Hors ligne

 

#4 05-04-2008 16:25:06

Crocxx
Webmaster
Lieu: France -> Tours (37)
Date d'inscription: 05-02-2008
Messages: 229
Site web

Re: Soucis sur boucle while successive.

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 wink

Hors ligne

 

#5 05-04-2008 19:12:14

c00lman
Modérateur
Date d'inscription: 05-03-2008
Messages: 42
Site web

Re: Soucis sur boucle while successive.

Pourquoi pas très compréhensible ?
Le code est détaillé sur quasiment chaque requête hmm .
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:

Code:

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

 

#6 06-04-2008 22:37:26

Crocxx
Webmaster
Lieu: France -> Tours (37)
Date d'inscription: 05-02-2008
Messages: 229
Site web

Re: Soucis sur boucle while successive.

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

 

Liens utiles

#7 07-04-2008 11:25:20

c00lman
Modérateur
Date d'inscription: 05-03-2008
Messages: 42
Site web

Re: Soucis sur boucle while successive.

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 big_smile , I'm happy lol .
Je suis quand même dégouté .. plus de 2 jours pour sa --> } , saleté de php ^^.

Hors ligne

 

#8 07-04-2008 23:43:41

ComandoCool
Membre
Date d'inscription: 22-02-2008
Messages: 21
Site web

Re: Soucis sur boucle while successive.

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

 

#9 08-04-2008 09:38:11

c00lman
Modérateur
Date d'inscription: 05-03-2008
Messages: 42
Site web

Re: Soucis sur boucle while successive.

Voila un nouveau mot pour moi smile . 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

 

#10 09-04-2008 22:34:17

Neo6
Modérateur
Lieu: Arras (62)
Date d'inscription: 25-02-2008
Messages: 112
Site web

Re: Soucis sur boucle while successive.

Logiciel : notepad++ ? (indente bien wink)


-------------------------------
PHP or not
OhMyPix (soon)

Hors ligne

 

#11 17-04-2008 00:51:37

ComandoCool
Membre
Date d'inscription: 22-02-2008
Messages: 21
Site web

Re: Soucis sur boucle while successive.

Même pour toi-même c'est pratique pour se relire et ne pas oublier des "}" à la fin.

Hors ligne

 

#12 17-04-2008 03:01:06

Neo6
Modérateur
Lieu: Arras (62)
Date d'inscription: 25-02-2008
Messages: 112
Site web

Re: Soucis sur boucle while successive.

Oui c'est super pratique pour les accolades, mêlé à l'indentation ça permet de bien situer chaque élément smile


-------------------------------
PHP or not
OhMyPix (soon)

Hors ligne

 

#13 18-04-2008 19:59:56

ComandoCool
Membre
Date d'inscription: 22-02-2008
Messages: 21
Site web

Re: Soucis sur boucle while successive.

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

 

Pied de page des forums

Propulsé par PunBB & édité par Rudy Onfroy

Liens & partenaires