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 :

SELECT(avec jointure) dans un foreach de checkbox [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2009
    Messages : 69
    Par défaut Boucles imbriquées sur résultat d'un SELECT
    Bonsoir à tous,

    Je poste ici car je pense que mon soucis est plus liée à la synthax.

    Contexte :
    J'ai un formulaire où les visiteur vont choisir un nombre de titre et des options

    Le nombre de titre se gère avec un liste déroulante, mais les options c'est des case à coché.

    Ensuite au vue de cette structure, je n'utilise pas de panier car il n'y a pas en soit de catalogue et c'est juste un choix de deux critères.

    Le problème:
    C'est surtout liée aux checkbox que pourtant mon foreach arrive à récupérer.
    Et ma requête marche, mais le soucis c'est que le foreach ne marche pas quand je remplace mon echo par ma requête.

    En faites à l'affichage du résultat plus bas dans ma page seul la dernière options choisi est affichable et la requête ne semble pas ce faire à chaque itération.

    Les codes :
    Le formulaire, je met que les checkbox car peut être lié au soucis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type = "checkbox" name="options[]" value="OMA01" id="master_cd" /> <label for="master_cd">Master CD</label>
              	<input type="checkbox" name="options[]" value="OMA02" id="reference_cd" /> <label for="reference_cd">Référence CD d'écoute</label>
              	<input type="checkbox" name="options[]" value="OMA03" id="stems" /> <label for="stems">Stems</label>
    Ensuite ma page traitement, du moins les zones en question :

    d'abord la récupération du form (testé, tous est bien récupérer)
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    // .....les test formulaire précédent
    $options = $_POST['options'];
    if (sizeof($options) != 0) {
    	foreach ($options as $valeur){// Requête si des options sont cochées (au moins 1) en utilisant une boucle pour gérer plusieur option
    	$devis_opt = sqlquery("SELECT prestations.ref_prestation,
    					prestations.cat_prestation,
    					prestations.qte_prestation,
    					prestations.label_prestation,
    					prestations.tarif_prestation,
    					categories.id,
    					categories.label_categorie
    					FROM prestations
    					LEFT JOIN categories
    					ON prestations.cat_prestation = categories.id
    					WHERE categories.id = '".$opt_cat."' AND prestations.ref_prestation = '".$valeur."'", 1);
    	  //echo $result = $valeur.' ';
     
    	} // on ajoute la requête pour les titres avec "1" car seul 1 résultat sera retourné
    	echo $result = count($devis_opt);
    	$devis_track = sqlquery("SELECT prestations.ref_prestation,
    					prestations.cat_prestation,
    					prestations.qte_prestation,
    					prestations.label_prestation,
    					prestations.tarif_prestation,
    					categories.id,
    					categories.label_categorie
    					FROM prestations
    					LEFT JOIN categories
    					ON prestations.cat_prestation = categories.id
    					WHERE categories.id = '".$cat."' AND prestations.ref_prestation = '".$nb_titre."'", 1);
    }   // Aucune option de cochée, requête uniquement sur les nbrs de titre.
    else {
    $devis_track = sqlquery("SELECT prestations.ref_prestation,
    					prestations.cat_prestation,
    					prestations.qte_prestation,
    					prestations.label_prestation,
    					prestations.tarif_prestation,
    					categories.id,
    					categories.label_categorie
    					FROM prestations
    					LEFT JOIN categories
    					ON prestations.cat_prestation = categories.id
    					WHERE categories.id = ".$cat." AND prestations.qte_prestation = ".$nb_titre, 1);
    }
    Donc le foreach est semble t-il correct, la requête le semble aussi et pourtant elle marche que sur la dernière.
    Alors que le test d'echo lui marche bien.
    C'est la que j'en suis à rien comprendre depuis avant hier soir.

    Et pour l'affichage :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
      	echo '<tr><br />';
                                    	echo '<td>'.$devis_track['ref_prestation'].'</td><br />';
                                    	echo '<td>'.$devis_track['qte_prestation'].'</td><br />';
                                    	echo '<td>'.$devis_track['label_prestation'].'</td><br />';
                                    	echo '<td>'.$devis_track['label_categorie'].'</td><br />';
                                    	echo '<td>'.$devis_track['tarif_prestation'].'</td><br />';
                                    	echo '</tr>';
                                    	//$row++;
                                    //}
                                   if (sizeof($options) != 0)
                                    {
                                    // Boucle pour l'affichage des options choisi sur le devis.
    								//while ($row = mysql_fetch_assoc($devis_opt)) {
    								for ($i = 0; $i < count($devis_opt); $i++){
    									echo '<tr><br />';
    									echo '<td>'.$row = $devis_opt['ref_prestation'].'</td><br/>';
    									echo '<td>'.$row = $devis_opt['qte_prestation'].'</td><br/>';								
    									echo '<td>'.$row = $devis_opt['label_prestation'].'</td><br/>';
    									echo '<td>'.$row = $devis_opt['label_categorie'].'</td><br/>';
    									echo '<td>'.$row = $devis_opt['tarif_prestation'].'</td><br/>';							
    									echo '</tr><br />';	
    									//$row++;								
    									}
                                    }						
    ?>
                                    </table>
                              </div>
                                    <!-- Tableau pour le total -->
                              <div id="">      
                                    <table>
                                    	<tr>
                                    		<td>TOTAL:</td>
                                    		<td><?php 
                                    		$tarif = '0';
                                    		if (!count($row['tarif_prestations']) > 0) {
                                    			$tarif = $devis_track['tarif_prestation'];
                                    			echo $tarif;
                                    		}
                                    		else {
                                    		$tarif = $devis_track['tarif_prestation'];
                                    			for ($i = 0; $i < count($row['tarif_prestations']); $i++) {
                                    				$tarif += $row['tarif_prestation'];
                                    			}
                                    			echo $tarif.'<br/>';
                                    			echo $row['tarif_prestation'];
                                    		}
                                    		?></td>
                                    	</tr>
                                    </table>
    Donc actuellement j'ai bien les données du nombre de titre, car là j'ai directement en BDD une Rows par quantité possible de titres.

    Mais pour les options donc le foreach, là y a rien à faire il m'affiche que la dernière options.

    Donc ma question ou je ne trouve aucune réponse c'est :
    Pour quoi le foreach ne se fait pas avec ma requête ?
    Ou alors, Quels erreurs de synthax ais-je fais ?

    Car là je sèche totalement, sa me dépasse à dire vrai.

    Je vous remercie de votre aide, et des pistes que vous pourrez m'apporter.
    Si une explication n'est pas précise ou clair n'hésite pas à me demandé.

    Encore Merci.

    PS : pour les requête sqlquery est une fonction que j'utilise, donc au besoin je peux vous la montré ou sinon remettre mon code avec mysql_query, car même avec la fonction native de php j'ai le même problème.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca serait effectivement interessant de savoir ce que produit ta fonction sqlquery pour comprendre l'articulation de ton code.

    deux remarques quand même sur la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i = 0; $i < count($devis_opt); $i++){
    On écrit jamais ça, la fonction foreach() est fait pour ça.
    La tu fais le compte de ton tableau a chaque tour de boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (sizeof($options) != 0) {
    Soit $_POST['options'] est un tableau avec du contenu, soit il n'est pas défini mais il ne peut pas être vide.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2009
    Messages : 69
    Par défaut
    Bonjour et merci de ta réponse Sabotage.

    Je répond que maintenant car quand je suis repasser je n'avais pas le code sus les yeux.

    Voici la fonction SQLQUERY :

    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
    function sqlquery($requete, $number)
    {
    	$query = mysql_query($requete) or exit('Erreur SQL : '.mysql_error().' Ligne : '. __LINE__ .'.'); //requête
    	queries();
     
    	if($number == 1)
    	{
    		$query1 = mysql_fetch_assoc($query);
    		mysql_free_result($query);
    		/*mysql_free_result($query) libère le contenu de $query, je
    		le fais par principe, mais c'est pas indispensable.*/
    		return $query1;
    	}
     
    	else if($number == 2)
    	{
    		$query2 = '';
    		while($query1 = mysql_fetch_assoc($query))
    		{
    			$query2[] = $query1;
    			/*On met $query1 qui est un array dans $query2 qui
    			est un array. Ca fait un array d'arrays :o*/
    		}
    		mysql_free_result($query);
    		return $query2;
    	}
     
    	else //Erreur
    	{
    		exit('Argument de sqlquery non renseign&eacute; ou incorrect.');
    	}
    }
    Mais je pense pour le moment ressoudre le pb sans car avec sa me met je pense une complication en plus.

    Soit $_POST['options'] est un tableau avec du contenu, soit il n'est pas défini mais il ne peut pas être vide.
    A dire vrai, en cherchant comment gérer mes checkbox, je voyais ce code.
    Donc je ne vois pas comment le checker autrement.

    Car pour ces options soit l'utilisateur n'en cochera aucune, soit il peut en coché de 1 à 3.

    Et cette vérification semble pourtant marcher, mais si il y a mieux alors sa me derange pas de le faire.

    Le soucis actuellement est au niveaux du foreach si je fais un echo des options que je coche là voici ce qu'il m'affiche si par exemple je coche toutes les options (donc 3)
    OMA01 OMA02 OMA03

    Synthax du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $options = $_POST['options'];
    if (sizeof($options) != 0) {
    	foreach ($options as $valeur){
     
              echo $result = $valeur.' ';	  				
    	}
    Donc ce que je comprend pas c'est :

    Pourquoi cela ne marque pas avec la requête ?

    Le problème se situe où ?
    Sur la requête dans le foreach ?
    ou
    Lors de l'affichage ?

    Le resultat que j'arrive à avoir pour le moment :

    Par exemple si je coche les 3 options, seul la dernière est affiché.
    Où se situe mon erreur ?

    Merci beaucoup de votre aide et des pistes que vous pourrez m'apporté.

    [EDIT 1]

    Dois-je faire pour l'affichage -(d'après la remarque de Sabotage)- ce foreach ? :

    <?
    foreach ($devis_opt as $row){

    }
    ?>

    En attendant je vais tenter le foreach et vous donnerai le retour.

    Merci de l'aide que vous pourrez m'apporter.

    [EDIT 2]
    Pour m'aidé à résoudre se problème, je ne vais plus utilisé la ffonction SQLQUERY pour cette requête du foreach car sa me complique encore plus les choses.

    Donc voici les nouveaux codes (le formulaire lui n'a pas bouger idem post 1)

    Voici le traitement pour le formulaire :
    Je met juste la partie des checkbox car le reste marche.

    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
    // Boucle pour la requête SQL
    $result = '';
    $options = $_POST['options'];
    if (sizeof($options) != 0) {
    	foreach ($options as $valeur){// Requête si des options sont cochées (au moins 1) en utilisant une boucle pour gérer plusieur option
    	$devis_opt = mysql_query("SELECT prestations.ref_prestation,
    					prestations.cat_prestation,
    					prestations.qte_prestation,
    					prestations.label_prestation,
    					prestations.tarif_prestation,
    					categories.id,
    					categories.label_categorie
    					FROM prestations
    					LEFT JOIN categories
    					ON prestations.cat_prestation = categories.id
    					WHERE categories.id = '".$opt_cat."' AND prestations.ref_prestation = '".$valeur."'");
    	  //echo $result = $valeur.' '; // Avec ce echo j'arrive à afficher mes options
     
    	} // on ajoute la requête pour les titres avec "1" car seul 1 résultat sera retourné
    	echo $result = count($devis_opt); // là il me retourne 1 donc se qui voudrai dire que la requête se fait qu'une fois au lieu du "Pour chaque" là c'est déjà pas normal vu que c'est le but de foreach.
     
    	$devis_track = sqlquery("SELECT prestations.ref_prestation,
    					prestations.cat_prestation,
    					prestations.qte_prestation,
    					prestations.label_prestation,
    					prestations.tarif_prestation,
    					categories.id,
    					categories.label_categorie
    					FROM prestations
    					LEFT JOIN categories
    					ON prestations.cat_prestation = categories.id
    					WHERE categories.id = '".$cat."' AND prestations.ref_prestation = '".$nb_titre."'", 1);
    }
    Ensuite toujours sur cette page de traitement mais plus bas pour l'affichage :

    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
    <?php 
            // Affichage du devis pour le nbr de titre
            // for ($i = 0; $i < count($devis_track); $i++) {
                         echo '<tr><br />';
                         echo '<td>'.$devis_track['ref_prestation'].'</td><br />';
                         echo '<td>'.$devis_track['qte_prestation'].'</td><br />';
                         echo '<td>'.$devis_track['label_prestation'].'</td><br />';
                         echo '<td>'.$devis_track['label_categorie'].'</td><br />';
                         echo '<td>'.$devis_track['tarif_prestation'].'</td><br />';
                         echo '</tr>';
                          //$row++;
                                    //}
             if (sizeof($options) != 0)
                       {
            // Boucle pour l'affichage des options choisi sur le devis.
    	while ($row = mysql_fetch_assoc($devis_opt)) {
    //	for ($i = 0; $i < count($devis_opt); $i++){
            echo '<tr><br />';
    	echo '<td>'.$row['ref_prestation'].'</td><br/>';
    	echo '<td>'.$row['qte_prestation'].'</td><br/>';								
    	echo '<td>'.$row['label_prestation'].'</td><br/>';
    	echo '<td>'.$row['label_categorie'].'</td><br/>';
    	echo '<td>'.$row['tarif_prestation'].'</td><br/>';							
    	echo '</tr><br />';	
    		}
             }						
    ?>
    Résultat à l'affichage :
    Pour le nombre de titre la donnée pour le quantité de titre est bien récupérer et affiché.

    Mais pour les options là, seul la dernière option est récupérer et affiché.

    Quelqu'un saurai me dire où se situe mon erreur ?

    [EDIT 3]
    Juste après le foreach pour faire un test et vérifier que $options est bien un tableaux j'ai ajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?
    print_r($options);
    /* Le résultat :
    Array ( [0] => OMA01 [1] => OMA02 [2] => OMA03 )
    */
    ?>
    Donc j'ai bien les infos de récupérer, donc déjà le formulaire est OK.

    [EDIT 4]
    J'ai avancé un peu alors voici le code pour boucler plusieur fois le SELECT :

    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
    36
    37
    38
    // Boucle pour la requête SQL
    $result = '';
    $devis_opt = '';
    $options = $_POST['options'];
    if (sizeof($options) != 0) {
    	foreach ($options as $valeur){// Requête si des options sont cochées (au moins 1) en utilisant une boucle pour gérer plusieur option
    	//
    	$ref_opt = $valeur;
    	for ($i=0; $i < count($options); ++$i){
    	$devis_opt[$i] = mysql_query("SELECT prestations.ref_prestation,
    					prestations.cat_prestation,
    					prestations.qte_prestation,
    					prestations.label_prestation,
    					prestations.tarif_prestation,
    					categories.id,
    					categories.label_categorie
    					FROM prestations
    					LEFT JOIN categories
    					ON prestations.cat_prestation = categories.id
    					WHERE categories.id = '".$opt_cat."' AND prestations.ref_prestation = '".$ref_opt."'");
    	  //echo $result = $valeur.' ';
    	}				
    	} // on ajoute la requête pour les titres avec "1" car seul 1 résultat sera retourné
    	echo $result = count($devis_opt); // Pour les test
    	print_r($options).'<br/>';// Pour les test
    	print_r($devis_opt).'<br />';// Pour les test
    	$devis_track = sqlquery("SELECT prestations.ref_prestation,
    					prestations.cat_prestation,
    					prestations.qte_prestation,
    					prestations.label_prestation,
    					prestations.tarif_prestation,
    					categories.id,
    					categories.label_categorie
    					FROM prestations
    					LEFT JOIN categories
    					ON prestations.cat_prestation = categories.id
    					WHERE categories.id = '".$cat."' AND prestations.ref_prestation = '".$nb_titre."'", 1);
    }
    Et quand je fais de var_dump et autre print_r voici ce que j'ai qui me fais penser que cette fois c'est bon pour boucler le SELECT, mais ne pas hésiter à me contredire si sa veut rien dire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    array(3) { [0]=> resource(12) of type (mysql result) [1]=> resource(13) of type (mysql result) [2]=> resource(14) of type (mysql result) }
    // Le même mais cette fois en print_r
    Array
    (
        [0] => Resource id #12
        [1] => Resource id #13
        [2] => Resource id #14
    )
    Ensuite pour l'affichage parmis mes nombreuse tentatives voici le dernier :

    Juste la parti options :
    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
    if (sizeof($options) != 0)
                                    {
    		//foreach ($devis_opt as $tab){
    		var_dump($devis_opt);
    		echo '<pre>';
    		print_r($devis_opt);
    		echo '</pre>';
    		var_dump($options);
    		foreach ($devis_opt as $opt){
    			while ($row = mysql_fetch_assoc($opt)){
    				echo '<tr><br />';
    				echo '<td>'.$row['ref_prestation'].'</td><br/>';
    				echo '<td>'.$row['qte_prestation'].'</td><br/>';								
    				echo '<td>'.$row['label_prestation'].'</td><br/>';
    				echo '<td>'.$row['label_categorie'].'</td><br/>';
    				echo '<td>'.$row['tarif_prestation'].'</td><br/>';							
    				echo '</tr><br />';
    				$row++;									
    				}
    			}
                          }
    Cette fois comme résultat à l'affichage j'ai :
    J'ai que la dernière option qui s'affiche, mais elle affiche autant de fois que j'ai coché d'option.

    Donc si je coche 3 options, alors la dernières s'affiche 3 fois de suite.

    Merci beaucoup de votre et/ou des pistes que vous pourrez m'apporté..

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2009
    Messages : 69
    Par défaut
    Je bloque toujours sur ces histoires de boucles.

    A la base les résultat de ma boucle de SELECT(sql) sont comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print_r($devis_opt);
    // Résultat :
    Array ( [0] => Resource id #8 [1] => Resource id #9 )
    Donc je dois boucler dessus, du coup j'ai fais ceci :
    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
    foreach ($devis_opt as $opt){
    print_r($opt);
    $option = '';
    	for ($i = 0; $i < count($devis_opt); ++$i)
    	{
    	    while($row = mysql_fetch_assoc($opt)){
    		echo '<tr><br />';
    		echo '<td>'.$option[$i] = $row['ref_prestation'].'</td><br/>';
    		echo '<td>'.$option[$i] = $row['qte_prestation'].'</td><br/>';								
    		echo '<td>'.$option[$i] = $row['label_prestation'].'</td><br/>';
    		echo '<td>'.$option[$i] = $row['label_categorie'].'</td><br/>';
    		echo '<td>'.$option[$i] = $row['tarif_prestation'].'</td><br/>';							
    		echo '</tr><br />';
    		}
    	}							
    }
    }
    Le problème :
    Le problème c'est que je boucle bien, mais uniquement sur le dernier résultat.
    Au lieu d'avoir le retour de requête de chaque option, je me retrouve avec le résultat de requête de la dernière option affiché autant de fois qu'il y a eu d'option choisi.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OMA02	1	CD Reference ecoute	Options Mastering	
    OMA02	1	CD Reference ecoute	Options Mastering
    Alors qu'il devrai me donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OMA02	1	CD Reference ecoute	Options Mastering	
    OMA03	1	Autre Option        	Options Mastering
    Je dois reconnaitre que je trouve pas comment résoudre cette erreur.
    Pourtant avec le FOR je lui demande bien de bouclé pour chaque options.

    Quelqu'un serais t'il capable de m'expliqué l'erreur que je fais, et des pistes de résolution.

    Merci de votre aide.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ce n'est pas normal que ton tableau contienne des "ressources".
    Que fais ta fonction queries() ?

    Tu n'as pas tenu compte de ma remarque concernant cette horreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i = 0; $i < count($devis_opt); ++$i)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2009
    Messages : 69
    Par défaut
    Bonjours Sabotage, merci de me répondre.

    En faites mon tableau contient des ressource car deadns il y a mes résultat de mes requêtes.
    cela viens d'ici :
    je récupère mon tableau de checkbox.
    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
    if (sizeof($options) != 0) {
    $count = count($devis_opt);
    	foreach ($options as $valeur){// Requête si des options sont cochées (au moins 1) en utilisant une boucle pour gérer plusieur option
    	//
    	$ref_opt = $valeur;
    	for ($i=0; $i < $count; ++$i){
    	$devis_opt[$i] = mysql_query("SELECT prestations.ref_prestation,
    					prestations.cat_prestation,
    					prestations.qte_prestation,
    					prestations.label_prestation,
    					prestations.tarif_prestation,
    					categories.id,
    					categories.label_categorie
    					FROM prestations
    					LEFT JOIN categories
    					ON prestations.cat_prestation = categories.id
    					WHERE categories.id = '".$opt_cat."' AND prestations.ref_prestation = '".$ref_opt."'");
    	  //echo $result = $valeur.' ';
    	}				
    	}
    Ainsi je récupère mes résultats de la recherhce pour chaque option.
    Effectivement le count je devrai le mettre dans une variable, mais pour le moment je me concentre sur la réussite de l'affichage ensuite je rectifie ces points.

    Maintenant je veux affiché mes résultat :

    C'est sur ce bouclage que je n'arrive pas à mettre en place, car pour le moment je boucle plusieurs fois le dernier résultat, je n'arrive pas à boucler sur mon tableaux contenant mes retour de requête.
    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
     
    $count = count($devis_opt);
    foreach ($devis_opt as $opt){
    print_r($opt);
    $option = '';
    	for ($i = 0; $i < $count; ++$i)
    	{
    	    while($row = mysql_fetch_assoc($opt)){
    		echo '<tr><br />';
    		echo '<td>'.$option[$i] = $row['ref_prestation'].'</td><br/>';
    		echo '<td>'.$option[$i] = $row['qte_prestation'].'</td><br/>';								
    		echo '<td>'.$option[$i] = $row['label_prestation'].'</td><br/>';
    		echo '<td>'.$option[$i] = $row['label_categorie'].'</td><br/>';
    		echo '<td>'.$option[$i] = $row['tarif_prestation'].'</td><br/>';							
    		echo '</tr><br />';
    		}
    	}							
    }
    }
    Et c'est là que j'arrive pas à bien faire le bon bouclage.
    Pour le moment le mieux que j'arrive à faire c'est affiché le dernier résultat, et bouclé dessus, au lieu de boucler et ainsi affiché chacun de s résultat.

    N'hésite pas à me dire si mon explication n'est pas clair.

    En faites depuis le début de mon pb j'ai avancé mais maintenant que j'ai les requête je n'arrive pas à bien boucler pour affiché chaque résultat et non pas bouclé sur le dernier résultat donc le répété.

    J'ai voulu reprendre le schéma de la boucle pour les requête mais je n'arrive pas ç l'adapter pour l'affichage.

    Merci de l'aide que tu m'apporte.

    PS : pour le count tu veux que je fasse ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $count = count($options);
    //ensuite j'utilise la variable au lieu de la fonction native directement ?
    Car c'est prévu depuis ta remarque, mais vu que sa fait quelque jours que je bloque sur ces boucle je te cache pas que pour le moment j'ai mis ce point de côté le temps de réussir à faire cette dernière boucle.

    Pour Résumé :
    Ce que je comprend pas, et là je trouve pas mon erreur, c'est que, au lieu de boucler sur mes résultat de requête.

    Je répète autant de fois que j'ai coché d'option le dernier résultat.

    Alors que ce que j'ai besoin c'est :
    Bouclé sur mes résultat de requête et à chaque fois je liste le résultat.

    Quelqu'un serai me dire à quel endroit j'articule mal mes boucles.

    Actuellement le code qui me répète le dernier résultat :
    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
    <?
    if (sizeof($options) != 0)
    {
    $count = count($devis_opt);
    //for ($i = 0; $i < count($devis_opt); ++$i){
      print_r($devis_opt);
    	foreach ($devis_opt as $opt){
    		while($row = mysql_fetch_assoc($opt)){
    			echo '<tr><br />';
    			echo '<td>'.$row['ref_prestation'].'</td><br/>';
    			echo '<td>'.$row['qte_prestation'].'</td><br/>';								
    			echo '<td>'.$row['label_prestation'].'</td><br/>';
    			echo '<td>'.$row['label_categorie'].'</td><br/>';
    			echo '<td>'.$row['tarif_prestation'].'</td><br/>';							
    			echo '</tr><br />';
    		}						
    	}
    }?>
    Voilà, après franchement je vois pas quoi expliqué de plus sur ce problème, ou alors dite moi de suite ce qui n'est pas clair que je le rexplique autrement.

    Je bloque depuis plusieurs jour, je cherche pas du tous cuit, je cherche de mon côté, bref je bloque totalement sur comment bien faire cette/ces boucle pour afficher mes résultat.

    Il doit bien y avoir quelqu'un qui pourrai me donner des pistes sur mon erreurs et m'aidé à comprendre comment bien faire ce bouclage.

    Merci de votre aide.

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

Discussions similaires

  1. [HQL] Select avec jointure
    Par jeoff dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/11/2006, 12h12
  2. [c#]commande Select avec jointure de deux tables
    Par chorokari dans le forum Accès aux données
    Réponses: 6
    Dernier message: 18/10/2006, 14h47
  3. [MySQL] selection avec un * dans une bdd
    Par leodi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/06/2006, 02h58
  4. Delete + selection avec jointure
    Par kluh dans le forum Oracle
    Réponses: 4
    Dernier message: 15/11/2005, 10h44
  5. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 10h20

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