IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Prise de tête 2 boucles While pour 1 id !


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut Prise de tête 2 boucles While pour 1 id !
    Hello tous,

    2 jours ! 2 jours que je me prend la tête sur ce bout de code !
    alors je craque, je demande de l'aide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Allègement du code
    en fait mon idObject présent dans la 2eme boucle While, ne ressort pas l'id correcte. j'ai toujours Id1
    alors que je devrais avoir Id2, Id3, comme c'est correctement affiché au niveau du echo $idObject . " <strong>"...
    c'est correct hors 2eme boucle while, mais pas dans boucle while

    j'ai cherché du coté des jointures... mais cela ne fonctionne pas du tout, puisque il n'y a aucun lien entre mes 2 tables.

    je sature un peu du code là
    si vous avez des idées !!

    merci à tous
    P

  2. #2
    Invité
    Invité(e)
    Par défaut
    La requête "types" doit se faire A L'INTERIEUR du 1er while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    	// requete objects
    	$reqObjects = "SELECT id, nom, lien FROM objects WHERE statut='1' GROUP BY id";
    	$repObjects = mysql_query($reqObjects);
    	echo "<ul>";
     
    	while ($resObjects = mysql_fetch_array($repObjects))
    	{
    		$idObject = 'Ido' . $resObjects['id'];
     
    		$link = $resObjects['lien']; 
    		echo "<li>\n";
    		echo $idObject . " <strong>" .  htmlentities($resObjects['nom']) . "</strong> : <a href=\"http://" . $link . "\" target=\"_blank\">" . $link . "</a><br />\n";
     
    		echo "<p style=\"margin-left: 10px;\">";
    		// requete types
    		$reqTypes = "SELECT id, nom_type, value_type, static, ordre FROM types WHERE statut='1' GROUP BY id ORDER BY ordre";
    		$repTypes = mysql_query($reqTypes);
    		while($resTypes = mysql_fetch_array($repTypes))
    		{
    			echo "<div class=\"block\">\n";
    			echo "<div id=\"unit_long\"".$idObject."\">";
    			echo "<strong>" . htmlentities($resTypes['nom_type']) . "</strong>";
    			echo bar($resTypes['id'], $idObject, '', 'static');
    			echo "</div>";
    			echo "</div>\n";
    		}
    			echo "</p>";
     
    		echo "</li>\n";
    	echo '<hr />';
     
    	}
    echo "</ul>\n";
    ?>
    On peut se passer de la variable $type
    + correction d'erreur ici (il manquait un \) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			$type .="<div id=\"unit_long"".$idObject."\">";
    remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			echo "<div id=\"unit_long\"".$idObject."\">";
    Dernière modification par Invité ; 26/04/2012 à 11h34.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    La requête "types" doit se faire A L'INTERIEUR du 1er while :
    Hello Jreaux62,
    merci de t'intéresser à mon problème.
    j'avais déjà essayé la req dans le 1er while, mais ça me dupliquait mes résultats.
    objet 1 : 1 fois tous les types
    objet 2 : 2 fois tous les types, 1 fois complète, puis 1 autre.
    objet 3 : 3 fois tous les types, complets, les uns apres les autres.
    et mon id, n'est tjrs pas correcte dans le 2eme while!

    pour le bug, oui, c'est en minimisant le code que j'ai oublié de corriger, merci.

    c'est pourtant simple, mais je ne comprend pas du tout !
    merci de ton aide.
    P

  4. #4
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    C'est tout à fait normal que le $idObject . " <strong>" ne subisse pas les mêmes incrémentations que l'autre qui est dans la deuxième boucle.
    Celui qui est dans la deuxième boucle sera affiché (sans changer de valeur) X fois. X correspondant aux nombres de types de statut 1

    Peut-être que ton problème est mal posé ?
    Que veux-tu afficher ?

    Tous les objets et types de statut 1 une fois ?
    Tous les types de statut 1 pour chaque objet de statut 1 ?
    Tous les objets de statut 1 pour chaque types de statut 1 ?
    Ou alors une option qui demanderait à changer la structure de tes tables : Afficher les objets de statut 1 qui entre dans des types statut 1 ?

    Une fois ça bien posé, ta boucle viendra toute seule.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    C'est tout à fait normal que le $idObject . " <strong>" ne subisse pas les mêmes incrémentations que l'autre qui est dans la deuxième boucle.
    Celui qui est dans la deuxième boucle sera affiché (sans changer de valeur) X fois. X correspondant aux nombres de types de statut 1
    oui, je comprends ca, mais vu que c'est dans le 1er while, je pensais que... m'enfin

    Peut-être que ton problème est mal posé ?
    Que veux-tu afficher ?

    Tous les objets et types de statut 1 une fois ?
    Tous les types de statut 1 pour chaque objet de statut 1 ?
    Tous les objets de statut 1 pour chaque types de statut 1 ?
    Ou alors une option qui demanderait à changer la structure de tes tables : Afficher les objets de statut 1 qui entre dans des types statut 1 ?

    Une fois ça bien posé, ta boucle viendra toute seule.
    j'ai une liste d'objet. avec leur id.
    j'ai une liste de type, qui font les caractéristiques de ces objets, mais pas les valeurs.
    j'affiche la liste des objets, et pour chacun d'eux la liste des types, pour chacun de ses types, je renvoie par un lien l'idObject et l'idType

    MES tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE TABLE IF NOT EXISTS `rate_objects` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_article` int(11) NOT NULL,
      `nom` varchar(100) NOT NULL,
      `lien` varchar(100) NOT NULL,
      `rel` tinyint(1) NOT NULL,
      `pr` tinyint(1) NOT NULL,
      `statut` int(1) NOT NULL,
      `order` tinyint(1) NOT NULL,
      `date` date NOT NULL,
      UNIQUE KEY `nom` (`nom`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE IF NOT EXISTS `rating_types` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nom_type` varchar(100) NOT NULL,
      `value_type` varchar(100) NOT NULL,
      `static` int(1) NOT NULL,
      `statut` tinyint(1) NOT NULL,
      `ordre` tinyint(1) NOT NULL,
      UNIQUE KEY `type` (`nom_type`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
    j'ai pensé faire un lien entre les 2 tables, mais je n'ai pas besoin d'avoir pour chaque type des entrées de chaque objet. si j'ai 300 objet via X types, ça risque d'alourdir bcp la base !
    idem pour la table objet, si je rajoute id de type, y'a donc plus d'intérêt à ce que j'ai une table type non ?

    ptet bien qu'il manque quelque chose. mais là je sèche.
    merci de ton aide Kaamo.

  6. #6
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    idem pour la table objet, si je rajoute id de type, y'a donc plus d'intérêt à ce que j'ai une table type non ?
    Euh si, si plusieurs objets peuvent avoir ce type, il faut que type soit séparé d'objet.

    j'ai une liste de type, qui font les caractéristiques de ces objets
    Donc un objet peut avoir 1 type ? (1 et 1 seul seulement ou 1 à plusieurs types ? ou même pas du tout de type ?)

    S'il n'a qu'un et un seul type, alors ajoute une colonne id_type à la table rate_objects qui aura pour clé étrangère id de rating_types.

    Si un objet peut avoir plusieurs types (de 0 à N), il faut créer une autre table qui aurait cette tête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE IF NOT EXISTS `rate_objects_types` (
    `id_article` int(11) NOT NULL,
    `id_type` int(11) NOT NULL)
    (avec les clés étrangères qui vont bien si tu veux faire ça bien)

    et pour donner par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (1, 2)
    (1,9)
    (2,2)
    (3,8)
    (3,9)
    => l'objet id 1 aura les types 2 et 9
    => l'objet id 2 aura le type 2
    => enfin l'objet 3 le type 8 et 9

    Comme ça tu pourras récupérer et n'afficher que le(s) type(s) correspondants à l'objet

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    Euh si, si plusieurs objets peuvent avoir ce type, il faut que type soit séparé d'objet.
    Donc un objet peut avoir 1 type ? (1 et 1 seul seulement ou 1 à plusieurs types ? ou même pas du tout de type ?)
    S'il n'a qu'un et un seul type, alors ajoute une colonne id_type à la table rate_objects qui aura pour clé étrangère id de rating_types.
    un objet a forcément tous les types mais tu as raison,
    peut etre dans l'avenir, il y aura des types nouveau qui seront spécifiques à certains objets seulement.

    Si un objet peut avoir plusieurs types (de 0 à N), il faut créer une autre table qui aurait cette tête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE IF NOT EXISTS `rate_objects_types` (
    `id_article` int(11) NOT NULL,
    `id_type` int(11) NOT NULL)
    (avec les clés étrangères qui vont bien si tu veux faire ça bien)

    et pour donner par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (1, 2)
    (1,9)
    (2,2)
    (3,8)
    (3,9)
    => l'objet id 1 aura les types 2 et 9
    => l'objet id 2 aura le type 2
    => enfin l'objet 3 le type 8 et 9

    Comme ça tu pourras récupérer et n'afficher que le(s) type(s) correspondants à l'objet
    donc il me faut forcément une autre table qui permettrait de faire la jointure.
    ce que tu me propose de faire là
    voilà la table
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE IF NOT EXISTS `rate_objects_types` (
      `id_object` int(11) NOT NULL,
      `id_type` int(11) NOT NULL,
      KEY `id_object` (`id_object`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    j'ai tenté
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE rate_objects_types
    DROP FOREIGN KEY id_object;
    j'ai une erreur dans myadmin, une idée?

    je vois pour commencer la requète...
    mais me manquerai t il des infos ?
    merci beaucoup beaucoup
    P

  8. #8
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    chaque objet a forcément TOUS les types de la table type ?
    Dans ce cas, je me demande à quoi sert cette table.

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    chaque objet a forcément TOUS les types de la table type ?
    Dans ce cas, je me demande à quoi sert cette table.
    Hello Kaamo,

    non tu as raison, effectivement, ce n'est pas une certitude.
    donc me faut une table intermédiaire.

    que voilà :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    CREATE TABLE IF NOT EXISTS `rate_objects_types` (
      `id_object` int(11) NOT NULL,
      `id_type` int(11) NOT NULL,
      KEY `id_object` (`id_object`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `rate_objects_types`
    --
     
    INSERT INTO `rate_objects_types` (`id_object`, `id_type`) VALUES
    (1, 1),
    (1, 2),
    (1, 3),
    (1, 4),
    (1, 5),
    (2, 1),
    (2, 2),
    (2, 3),
    (2, 4),
    (2, 5),
    (3, 1),
    (3, 2),
    (3, 3),
    (3, 4);

    voilà mon code réécrit qui ne fonctionne pas encore. puisque mon idObject dans la 2eme boucle ne m'affiche tjrs pas l'id correcte.

    Alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    		$reqObjectsType = "SELECT rot.id_object, rot.id_type, ro.id as idObject, ro.nom as nom, ro.lien as lien, ro.rel as rel, ro.pr as pr FROM rate_objects ro RIGHT JOIN rate_objects_types rot ON rot.id_object = ro.id WHERE ro.statut='1' GROUP BY ro.id";
    	$repObjectsType = mysql_query($reqObjectsType);
    	$type ="";
    	echo "<ul>";
    		$reqTypes = "SELECT rt.id as idType, rt.nom_type as nomType, rt.value_type as valueType, rt.static as static, rt.ordre as ordre, rot.id_object, rot.id_type FROM rating_types rt, rate_objects_types rot WHERE rt.id= rot.id_type GROUP BY rt.id ORDER BY ordre";
    		//echo $reqTypes;
    	$repTypes = mysql_query($reqTypes);
    	while ($resObjectsType = mysql_fetch_array($repObjectsType))
    	{
    		$idObject = 'Ido' . $resObjectsType['idObject'];
    			while($resTypes = mysql_fetch_array($repTypes))
    			{
     
    			$type .= "<div class=\"block\">\n";
    			$type .='<div id="'.$idObject.'">';
    				$type .= "<strong>" . htmlentities($resTypes['nomType']) . "</strong>";
    				$type .= rating_bar($resTypes['idType'], $idObject, '');
    			$type .= "</div>";
    			$type .= "</div>\n";
    			}
     
    		$link = $resObjectsType['lien']; 
    		//$rank = GooglePageRankChecker::getRank("http://" . $link . "");
    		echo "<li>\n";
    		echo $idObject . " <strong>" .  htmlentities($resObjectsType['nom']) . "</strong> : <a href=\"http://" . $link . "\" target=\"_blank\"\">" . $link . "</a><br />\n";
    		echo "<p style=\"margin-left: 10px;\">";
    			echo $type;
    		echo "</p>";
    		echo "</li>\n";
    	echo '<hr />';
    	//$i++;	
    	}
    ça avance, merci à toi...
    j'ai du faire une erreur quelque part . mon idObject n'étant pas encore juste

    Merci à toi

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut
    j'ai fait une modif qui me semblait plus juste.. mais ça a fait encore plouf !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $reqTypes = "SELECT rt.id as idType, rt.nom_type as nomType, rt.value_type as valueType, rt.static as static, rt.ordre as ordre, rot.id_object as objectId, rot.id_type as typeId FROM rating_types rt, rate_objects_types rot WHERE rt.id= rot.id_type GROUP BY rt.id ORDER BY ordre";
    		//$reqTypes = "SELECT id, nom_type, value_type, static, ordre FROM rating_types WHERE id='" . $repObjectsType['idObject'] . "' AND statut='1' ORDER BY ordre";
    		//echo $reqTypes;
    		$repTypes = mysql_query($reqTypes);
    	while ($resObjectsType = mysql_fetch_array($repObjectsType))
    	{
     
    			while($resTypes = mysql_fetch_array($repTypes))
    			{
    			$idObject = 'Ido' . $resTypes['objectId'];
    récupérer l'idObject de cette table rate_objects_types de manière à l'avoir propre dans le 2eme while...
    plouf !

    si je met la $reqTypes dans le 1er while, ca me fout en l'air les résultats, et mon idObject n'est pas bon non plus...
    je continue de chercher

  11. #11
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    en analysant tes données :
    Il y a au moins 3 objets dans ta base (allant de l'id 1 à 3) ? et au moins 5 types (allant de l'id 1 à 5) ?

    L'objet id 1 possède donc les types de 1 à 5.
    Idem pour l'objet id 2
    Le 3 ne possède que les 4 premiers types.

    Ce que tu veux afficher :
    La liste des tous les objets (impliquent donc qu'il faut faire un SELECT * d'objets)
    en affichant les types de chaque objet (pour chaque objet, aller récupérer dans "rate_objects_types" les types de l'objet ID X courant.)

    Ce qui donne selon tes structures :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     // Sélection de tous les objets ayant pour statut 1 (classé par id)
    $reqObjects = "SELECT id, nom, lien FROM objects WHERE statut='1' ORDER BY id ASC";
    $repObjects = mysql_query($reqObjects);
    // tableau qui va récupérer les lignes d'objets
    $lignes_objets  =  array();
    // On boucle sur les résultats
    while ($resObjects = mysql_fetch_array($repObjects)) {
      // info de l'objet en cours
      $info_objet_cur = "id : ".$resObjects['id']. ", nom : " .  $resObjects['nom'] . ", lien :  " . $resObjects['lien'] . ".<br>";
      // Récupération des types relatifs à l'objet en cours (en récupérant les infos de chaque type classé par ordre)
      $reqTypesAssoc = "SELECT t.id, t.nom_type, t.value_type FROM rate_objects_types ot LEFT JOIN rating_types t on (ot.id_type = t.id) WHERE ot.id_object='".$resObjects['id']."' ORDER BY t.ordre ASC";
      $repTypesAssoc = mysql_query($reqTypesAssoc );
     
      $info_objet_cur .= "Voici les types associés à l'objet id (".$resObjects['id'].") : <br>";
      // tableau qui va récupérer les lignes de types pour chaque objet
      $lignes_types  =  array();
      // On boucle sur les types relatifs à l'objet
      while ($resTypesAssoc = mysql_fetch_array($repTypesAssoc )) {
        $lignes_types[] = "Type (id:".$resTypesAssoc ['id'].") : nom:".$resTypesAssoc['nom_type']."|value:".$resTypesAssoc['value_type'];
      }
      // On stocke les types relatifs aux objets (séparés par une virgule)
     $info_objet_cur .= implode(", ", $lignes_types);
     
      // Sauvegarde de l'objet courant pour affichage ultérieur
      $lignes_objets[] = $info_objet_cur;
    }
     
    // On affiche chaque ligne d'objet (incluant tout leur type) en les séparant par deux sauts de ligne
    echo implode ("<br><br>",$lignes_objets);

    Ce qui (selon encore une fois les données fournies), donne :
    id : 1, nom : objet1, lien : lien 1.
    Voici les types associés à l'objet id (1) :
    Type (id:1) : nom:type1|value:value1, Type (id:2) : nom:type2|value:value2, Type (id:3) : nom:type3|value:value3, Type (id:4) : nom:type4|value:value4, Type (id:5) : nom:type5|value:value5

    id : 2, nom : objet2, lien : lien 2.
    Voici les types associés à l'objet id (2) :
    Type (id:1) : nom:type1|value:value1, Type (id:2) : nom:type2|value:value2, Type (id:3) : nom:type3|value:value3, Type (id:4) : nom:type4|value:value4, Type (id:5) : nom:type5|value:value5

    id : 3, nom : objet3, lien : lien 3.
    Voici les types associés à l'objet id (1) :
    Type (id:1) : nom:type1|value:value1, Type (id:2) : nom:type2|value:value2, Type (id:3) : nom:type3|value:value3, Type (id:4) : nom:type4|value:value4
    Le résultat est bien sûr à adapter à ce que tu veux afficher. Mais l'idée est là, je pense

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut
    Hello,

    ton code à lui seul fonctionne très bien, merci d'avoir pris le temps.
    mais je reste avec le même problème car dans le 2eme while; dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $lignes_types[] = "Type (id:".$resTypesAssoc ['id'].") : nom:".$resTypesAssoc['nom_type']."|value:".$resTypesAssoc['value_type'];
    je dois avoir l'objet id (".$resObjects['id'].")
    et là, il n'y est pas.


    j'ai tenté d'adapter ton code à mon code, c'est le but rires...
    mais ayant pour l'affichage des balises de mise en page à fermer, je n'y arrive pas.

    alors je me permet de mettre directement tout mon code, tel quel
    sans essayer de le minimiser pour le forum ! comme les NoobS !rires
    rien contre eux, j'en suis encore un pour certaines choses !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    	$reqObjects = "SELECT id, nom, lien FROM rate_objects WHERE statut='1' ORDER BY id ASC";
    	$repObjects = mysql_query($reqObjects);
    	$type ="";
    	echo "<ul>";
     
    	while ($resObjects = mysql_fetch_array($repObjects))
    	{
     
    		$reqTypes = "SELECT t.id, t.nom_type, t.value_type FROM rate_objects_types ot LEFT JOIN rating_types t on (ot.id_type = t.id) WHERE ot.id_object='".$resObjects['id']."' GROUP BY t.id ORDER BY t.ordre ASC";
    		//echo $reqTypes;
    		$repTypes = mysql_query($reqTypes);
     
    			while($resTypes = mysql_fetch_array($repTypes))
    			{
    			$idObject = 'Ido' . $resObjects['id'];
    			$type .= "<div class=\"ratingblock\">\n";
    			$type .='<div id="unit_long'.$idObject.'">';
    				$type .= "<strong>" . htmlentities($resTypes['nom_type']) . "</strong>";
    				$type .= rating_bar($resTypes['id'], $idObject, '');
    			$type .= "</div>";
    			$type .= "</div>\n";
    			}
     
    		$link = $resObjects['lien']; 
    		echo "<li>\n";
    		echo $idObject . " <strong>" .  htmlentities($resObjects['nom']) . "</strong> : <a href=\"http://" . $link . "\" target=\"_blank\"\">" . $link . "</a><br />\n";
    		echo "<p style=\"margin-left: 10px;\">";
    			echo $type;
    		echo "</p>";
    		echo "</li>\n";
    	echo '<hr />';
     
    	}
    echo "</ul>\n";
    pff, de nouveau le même problème avec ce code.duplication des types.. normal
    j'ai hésité à te remettre le code d'avant, ou le code modifié à partir de ton code, mais ce dernier étant bordélique, je ne sais pas où ajouter la fin de ma mise en page, (les </p>, </li>) et comment avoir mon idObject dans la ligne de résultats des types !
    rating_bar est une fonction qui renvoie un lien avec des variables dont idtype, idObject !
    j'espère être clair...

    merci de ta patience .
    P

  13. #13
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    je dois avoir l'objet id (".$resObjects['id'].")
    et là, il n'y est pas.
    Et bien pourquoi ne pas l'ajouter ? Il est dispo en plus dans le rendu tu as :
    Voici les types associés à l'objet id (1) :
    Type (id:1) : nom:type1|value:value1, Type (id:2) : nom:type2|value:value2, Type (id:3) : nom:type3|value:value3, Type (id:4) : nom:type4|value:value4, Type (id:5) : nom:type5|value:value5
    à l'objet id (1) => veut bien dire que ce sont les types qui sont rattachés à cet objet.

    mais ayant pour l'affichage des balises de mise en page à fermer, je n'y arrive pas.
    Pourtant il suffit de mettre les infos relatives à l'objet en cours dans la variable $info_objet_cur. (ensuite elle est mise automatiquement dans le tableau, pas besoin de toucher à celle là).
    Et pour les types d'un objet en cours dans $lignes_types.
    Après, tu n'es pas obligé d'utiliser ma méthode. Des écho suffisent c'est clair.

    pff, de nouveau le même problème avec ce code.duplication des types.. normal
    Aaaaaaaah, je viens de saisir ton problème de "duplication" ! Tu as simplement un problème d'initialisation de variable ...

    Ton $type =""; : mets le à l'intérieur du premier while, juste avant d'ouvrir le second .... Tu dois vider cette variable avant de la ré-utiliser dans la boucle (d'où l'utilisation de mes tableaux avec les implode. ça impose + de rigueur et peut éviter ce genre de boulette )

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    Aaaaaaaah, je viens de saisir ton problème de "duplication" ! Tu as simplement un problème d'initialisation de variable ...

    Ton $type =""; : mets le à l'intérieur du premier while, juste avant d'ouvrir le second .... Tu dois vider cette variable avant de la ré-utiliser dans la boucle (d'où l'utilisation de mes tableaux avec les implode. ça impose + de rigueur et peut éviter ce genre de boulette )
    Rhoolalala kaamo !
    voilà ! juste ce détail ; et hop tout rentre dans l'ordre. dans mon code.
    pfff, j'te jure , des fois hein !
    pas de duplicat de types et l'idobject correct pour chaque ligne !
    juste à cause de ce détail du $type déclaré au mauvais endroit !!!!

    Je peux maintenant continuer à développer ce script... je ne sais pas encore comment aller au bout, mais je trouverai certainement...
    qui sait peut-être je reviendrai sur le forum...

    merci 1ooo fois de ta patience ! ton aide a été précieuse.
    ^^
    belle fin de journée

  15. #15
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 115
    Points : 43
    Points
    43
    Par défaut
    Merci

    j'avance un peu, je me prend la tete toujours !
    c'est compliqué, en fait j'essaie de dev un script de rating multiniveaux
    et je me prend la tete...

    je met ce post en résolu !
    puisque c résolu

    merci encore à toi
    peut-être je te recontacterai ? tu as l'air d'en savoir un rayon
    mon mental a ses limites en prog !

    ^^ ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.0] Optimisation boucle while pour envoi d'e-mails
    Par renaud26 dans le forum Langage
    Réponses: 1
    Dernier message: 18/02/2010, 08h22
  2. 2 boucle while pour même mysql_fetch_array
    Par babali33 dans le forum Langage
    Réponses: 3
    Dernier message: 29/04/2009, 15h52
  3. [MySQL] boucle while pour requête : erreur
    Par marcello06 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/09/2008, 06h41
  4. Probleme dans une boucle while pour remplir une JTable
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 27/03/2008, 14h01
  5. Réponses: 6
    Dernier message: 28/04/2006, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo