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

PHP & Base de données Discussion :

Améliorer l'affichage d'une requête [ODBC]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut Améliorer l'affichage d'une requête
    Bonjour à tous !

    J'ai un petit soucis au niveau d'une requête SQL dont voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php	$prepare_affiche1=odbc_prepare($connexion, "SELECT DISTINCT NomMethode, NomTache, NomProduit, PhraseRisque //
    	FROM Produit, Utiliser, Tache, Methode, Fonction 
    	WHERE Produit.NumProduit=Utiliser.NumProduit 
    	AND Utiliser.NumTache=Tache.NumTache
    	AND Tache.NumMethode=Methode.NumMethode 
    	AND Methode.NumFonction=Fonction.NumFonction 
    	AND Methode.NumFonction ='".$fonction."'");
    	$exe_affiche1=odbc_execute($prepare_affiche1);	
    	$result_affiche1=odbc_result_all($prepare_affiche1, format);
    ?>
    Et le résultat est très correct, sauf que je voudrai modifier l'affichage du résultat fournit par odbc_result_all car il m'affiche un résultat de la forme :

    Methode1 tache1 Produit1 Phraserisque1
    Methode1 tache2 Produit 2 PhraseRisque2
    Methode2 tache3 Produit 3 PhraseRisque3.

    En gros je voudrais réunir les tâches de la méthode1 pour faire une seule ligne avec tache1 et tache 2 en deux sous ligne.

    Enfin si je ne suis pas claire dites le moi.

    Merci d'avance pour votre aide !

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Déjà fait tes jointures avec JOIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $prepare_affiche1=odbc_prepare($connexion, "SELECT DISTINCT NomMethode, NomTache, NomProduit, PhraseRisque //
    			FROM Produit
                            JOIN Utiliser ON Produit.NumProduit=Utiliser.NumProduit 
                            JOIN Tache ON Utiliser.NumTache=Tache.NumTache
                            JOIN Methode ON Tache.NumMethode=Methode.NumMethode 
                            JOIN Fonction ON Methode.NumFonction=Fonction.NumFonction 
    			WHERE Methode.NumFonction ='".$fonction."'
                            ORDER BY NomMethode);
    $exe_affiche1=odbc_execute($prepare_affiche1);

    Une méthode très simple pour regrouper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $cur_methode = '';
    foreach ($result_affiche1 as $row) {
       if ($row['NomMethode'] != cur_methode = '') {
              echo '<p>' . $row['NomMethode'] . '</p>';
              $cur_methode = $row['NomMethode'];
       }
       echo $row['NomTache'] . '-' . $row['NomProduit'] . '<br/>';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Merci Sabotage !

    J'ai corriger ma requête avec les JOIN comme tu me l'as fait remarquer, faut que je m'habitue a cette syntaxe ^^.

    Concernant le il s'agit bien de la méthode courante?

    Je dois bien rajouter ton code en dessous de mon : "result_affiche1" parce qu'il me met ceci en erreur : "Warning: Invalid argument supplied for foreach()"

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Apparemment mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result_affiche1=odbc_result_all($prepare_affiche1);
    N'est pas un tableau PHP, c'est un tableau HTML...

    J'aimerai aussi votre avis sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     resource odbc_exec ( resource $connection_id , string $query_string [, int $flags ] )
    Est-il mieux que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     resource odbc_prepare ( resource $connection_id , string $query_string ) //et
    bool odbc_execute ( resource $result_id [, array $parameters_array ] )

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    ah oui pardon j'ai cru que c'etait comme le fetch_all en PDO mais non.
    Pour le "prepare" il ne te sert pas en l'état puisque tu n'utilises pas de paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $result = odbc_exec($prepare_affiche1);	
    while ($row = odbc_fetch_array($result)) {
      if ($row['NomMethode'] != cur_methode = '') {
              echo '<p>' . $row['NomMethode'] . '</p>';
              $cur_methode = $row['NomMethode'];
       }
       echo $row['NomTache'] . '-' . $row['NomProduit'] . '<br/>';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Merci encore ! Oui là ça marche, mais toujours le même soucis de répétition des Méthodes, ça a juste changé l'affichage de mon problème.

    en fait mon affichage pour l'instant est comme ceci:

    Nom : tableau_odbc_result_all.jpg
Affichages : 256
Taille : 211,5 Ko


    Et ce que tu m'a préconisé fait ceci :
    Nom : résultat_algo.jpg
Affichages : 219
Taille : 116,8 Ko


    Dans cet exemple je voudrai regrouper toute les méthodes qui ont un doublon tout en gardant les taches, les produits, et les PhrasesRisque lié à la méthode dans plusieurs "sous-ligne"

    Comme l'exemple ci dessous :

    Nom : résultatattendu.jpg
Affichages : 199
Taille : 58,3 Ko

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    J'ai un peu modifié ton code Sabotage ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo '<table> <tr> <th>NomMethode</th><th>NomTache</th><th>NomProduit</th><th>PhraseRisque</th> </tr>';
    while ($row = odbc_fetch_array($result)) {
    	if ($row['NomMethode'] != $cur_methode='') {
    		echo '<tr><td>' . $row['NomMethode'] . '</td> <td>'. $row['NomTache'] .'</td> <td>'. $row['NomProduit'] .'</td> <td>'.$row['PhraseRisque'].'</td></tr>';
    		$cur_methode = $row['NomMethode'];
    	}
    }
    echo'</table>';
    Résultat je viens de "refaire" la fonction odbc_result_all xD, ce qui est déjà un bon début puisque faut que je le modifie pour que : Tant que le NomMethode=NomMethodeSuivant j'écrirais une seule fois la méthode puis j'écris tout les produits qui lui sont associé.

    Reste plus qu'a savoir comment je vais me débrouiller pour que ça fonctionne ^^.

  8. #8
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Je n'ai pas testé mais ça peut se concevoir comme ça :
    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
     
    $result = odbc_exec($prepare_affiche1);	
    while ($row = odbc_fetch_array($result)) {
     
      if ($row['NomMethode'] != cur_methode) {
             // début d'un bloc méthode : on met la colonne méthode
             $bloc_methode = '<tr><td rowspan="%d">' . $row['NomMethode'] . '</td><td>' . $row['NomTache'] . '</td><td>' . $row['NomProduit'] . '</td></tr>';
             if ($cur_methode != '') {
                  echo sprintf($bloc_methode, $nrow);
             }
             $cur_methode = $row['NomMethode'];
             $nrow = 1; 
      }
      else {
            // suite d'un bloc méthode, la colonne methode n'est pas ajoutée
            $bloc_methode .= '<tr><td>' . $row['NomTache'] . '</td><td>' . $row['NomProduit'] . '</td></tr>';
            $nrow++;
       }
     
    }
    // on affiche le dernier bloc conçu
    echo sprintf($bloc_methode, $nrow);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    C'est presque ça, sauf qu'a partir du :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      else {
            // suite d'un bloc méthode, la colonne methode n'est pas ajoutée
            $bloc_methode .= '<tr><td>' . $row['NomTache'] . '</td><td>' . $row['NomProduit'] . '</td><td>'. $row['PhraseRisque'] .'</td></tr>';
            $nrow++;
     
       }
    }
    	// on affiche le dernier bloc conçu
    	echo sprintf($bloc_methode, $nrow);
    echo'</table>';
    ça donne ceci :
    Nom : résultat_algo2.jpg
Affichages : 217
Taille : 96,4 Ko

    Il n'y a pas toute les méthodes et du coup pas toute les taches associées aux méthodes et crée un doublon pour le dernier bloc crée. Pour le moment j'essaye de bidouiller. ^^

  10. #10
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque un dollard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($row['NomMethode'] != $cur_methode) {
    Affiche toutes les erreurs PHP quand tu developpes
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    ouai j'avais déjà corrigé cette erreur de $. Même après l'avoir corrigé l'erreur d'affichage reste, je cherche toujours ^^.

    PS:I.I.S ne m'avait retourné aucune erreur ^^

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    J'ai oublié une difficulté de mon soucis apparemment,

    effectivement, un des résultat possible de ma requête est :

    Methode1 Tache1 Produit1 PhraseRisque1
    Methode1 Tache1 Produit2 PhraseRisque2

    Actuellement j'en suis ici :

    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
     
    echo '<table> <tr> <th>Méthode Analytique</th><th>Tache</th><th>Produit</th><th>Phrase Risque</th> </tr>';
     
    $nrow=1;
    while ($row = odbc_fetch_array($result)) {
     
      if ($row['NomMethode'] != $cur_methode) {
            // début d'un bloc méthode : on met la colonne méthode
            $bloc_methode = '<tr><td rowspan="%d">' . $row['NomMethode'] . '</td><td>' . $row['NomTache'] . '</td><td>' . $row['NomProduit'] .  '</td><td>'.       $row['PhraseRisque'] . '</td></td>';
            $cur_methode = $row['NomMethode'];
     
    	if ($cur_methode != '') {
     
                  echo sprintf($bloc_methode, $nrow); 
             }
    		$nrow = 1;        
     
      }
     
       else{
    	// suite d'un bloc méthode, la colonne methode n'est pas ajoutée
    	$bloc_tache = '<td>' . $row['NomTache'] . '</td><td>' . $row['NomProduit'] . '</td><td>'. $row['PhraseRisque'] .'</td>';
    	$nrow++;
    	// on affiche le dernier bloc conçu
    	echo sprintf($bloc_tache,$nrow);
    		}
       }
    Je dois donc rajouter une condition supplémentaire du style dans le else?

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    j'ai ajouter ceci, mais l'affichage est encore mauvais... :
    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
     
     
    $nrowmethode=1;
    while ($row = odbc_fetch_array($result)) {
     
    	if ($row['NomMethode'] != $cur_methode) {
            // début d'un bloc méthode : on met la colonne méthode
            $bloc_methode = '<tr><td rowspan="%d">' . $row['NomMethode'] . '</td><td>' . $row['NomTache'] . '</td><td>' . $row['NomProduit'] .  '</td><td>'. $row['PhraseRisque'] . '</td></td>';
    		$cur_methode = $row['NomMethode'];
     
    		if ($cur_methode != '') {
     
                  echo sprintf($bloc_methode, $nrowmethode); 
             }
    		$nrowmethode = 1;        
     
    	}
     
    	else{
    			// suite d'un bloc méthode, la colonne methode n'est pas ajoutée
     
    			if($row['NomTache']!= $cur_tache){
    				$bloc_tache = '<td rowspan="%d">' . $row['NomTache'] . '</td><td>' . $row['NomProduit'] . '</td><td>'. $row['PhraseRisque'] .'</td>';
    				$cur_tache=$row['NomTache'];
    				$nrowmethode++;
    				// on affiche le dernier bloc conçu
    				if ($cur_tache != '') {
    					echo sprintf($bloc_tache,$nrowtache);
    				//$nproduit=1;
    				}
    				$nrowtache=1;
    			}
     
    			else{
    				$bloc_tache='<td>' . $row['NomProduit'] . '</td><td>'. $row['PhraseRisque'] .'</td>';
    				$nrowtache++;
    				echo sprintf($bloc_tache,$nrowtache);
    			}
    		}
    }
    Nom : affichage.jpg
Affichages : 191
Taille : 118,8 Ko
    ce n'est pas un problème dû aux Rowspan et les compteurs?

  14. #14
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Ton affichage est dû à un problème d'encodage qui est différent dans un ou plusieurs endroits de ton projet (ex : base de données en Utf-8 et affichage en iso-8859).

    Il est nécessaire d'uniformiser ton encodage, le mieux est d'utiliser l'utf-8, voici un tutoriel qui te permettra de le faire sans omettre d'étape.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Ah merci Spartacusply! ce sera déjà un affichage de fait,

    Mais ensuite c'est la mise en forme de mon formulaire qu'il me faut régler ^^

    Même si j'ai déjà encoder mes pages en utf-8 sur notepad++, dans le HTML, et sur SQL server 2005 apparemment on ne peut pas mettre les champs en UTF-8...

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    iut amiens
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : iut amiens
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Bonjour à tous, alors j'ai un peu avancer dans mon histoire !

    je m'explique : j'ai réussi a fusionner correctement les cellules "NomMethode" grâce à ce code:

    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
     
    echo '<table> <tr> <th>Méthode Analytique</th><th>Tache</th><th>Produit</th><th>Phrase Risque</th> </tr>';
     
    $nrowmethode=1;
    $nrowtache=1;
    while ($row = odbc_fetch_array($result)) {
     
    	if ($row['NomMethode'] != $cur_methode) { // si le NomMethode actuelle est égale au NomMéthode précédent alors 
     
            // début d'un bloc méthode : on met la colonne méthode
    	$bloc_methode_precedent=$bloc_methode_actuelle;
            $bloc_methode_actuelle = '<tr><td rowspan="%d">' . $row['NomMethode'] . '</td><td>' . $row['NomTache'] . '</td><td>' . $row['NomProduit'] .  '</td><td>'. $row['PhraseRisque'] . '</td></tr>';
    	$cur_methode = $row['NomMethode'];
    	//$cur_tache=$row['NomTache'];
    		if ($cur_methode != '') {
     
                         echo sprintf($bloc_methode_precedent, $nrowmethode); 
                    }
    	$nrowmethode = 1;  
     
    	}
    	else{$nrowmethode++;}
    Il me reste donc à vérifier si le "$current_NomTache" est égale au nom de la tache suivant alors on fusionne la case et on rempli les champs suivant pour donner un truc du style
    Nom : fusionTache.jpg
Affichages : 172
Taille : 70,8 Ko

    EDIT: En fait je viens de m'apercevoir que ça fusionne bien mes Methode, mais pas le dernier...

    J'ai vraiment besoins d'aide parce que là cet algo me pose vraiment un soucis...

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

Discussions similaires

  1. affichage d'une requête
    Par poula dans le forum Forms
    Réponses: 2
    Dernier message: 18/12/2006, 15h47
  2. Affichage d'une requête
    Par Sorcier157 dans le forum Zend_Db
    Réponses: 6
    Dernier message: 27/10/2006, 11h30
  3. [MySQL] affichage d'une requête
    Par gailup dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/06/2006, 11h20
  4. [MySQL] Affichage d'une requête
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 31/01/2006, 11h54
  5. Modifier l'affichage d'une requête
    Par seal dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 15h26

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