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 :

affichage variable et boucle while


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 64
    Par défaut affichage variable et boucle while
    Bonjour à tous ,

    tout est dans le titre , je recupere les données d'une requete , et je souhaite afficher tous les resultats par colonne , exemple :

    toutes les ref client dans la colonne A , tout les part number dans la colonne B etc ....

    le titre de mes colonnes s'affiche bien en fonction de la requete .

    par contre je fais une boucle while pour les resultats , et c'est la que ça se complique , car je souhaite que chaque resultat s'affiche dans la colonne en fonction de la requete .

    je donne un nom à ma colonne $k et je lui donne une valeur A(premère colonne) , et je souhaite que tous les resultats ref client s'affiche dans cette colonne .

    etc pour le reste , mais cela ne fonctionne pas car comme $k est dans la boucle , il me décale tous les résultats ...

    merci d'avance pour votre aide

    voila mon 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
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    include 'Classes/PHPExcel.php';
    include 'Classes/PHPExcel/PHPExcel/IOFactory.php';
     
     
     
        // création des objets de base et initialisation des informations d'entête
     
        $classeur = new PHPExcel;
     
        $classeur->getProperties()->setCreator("Annie Gagnon");
     
        $classeur->setActiveSheetIndex(0);
     
        $feuille=$classeur->getActiveSheet();
     
        $classeur->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('H')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('I')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('J')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('K')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('L')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('M')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('N')->setAutoSize(true);
    	$classeur->getActiveSheet()->getColumnDimension('O')->setAutoSize(true);
     
     
        // ajout des données dans la feuille de calcul
     
        $feuille->setTitle('Nom affiché dans l\'onglet');
        $nom_requete = 'test 4';
     
        $resultats=$connexion->query("SELECT * FROM Requete WHERE nom_requete ='" . $nom_requete . "'");
        $resultats->setFetchMode(PDO::FETCH_OBJ);
        $result = $resultats->fetch();
    	$u=0;
    	if(($result->ref_client) == true )
    	{
    	$feuille->setCellValueByColumnAndRow($u,1,'Ref client');
    	$u++;}
    	if(($result->part_number) == true )
    	{
    	$feuille->setCellValueByColumnAndRow($u,1,'Part number');
    	$u++;}
    	if(($result->collection_client) == true )
    	{
    	$feuille->setCellValueByColumnAndRow($u,1,'Collection client');
    	$u++;}
    	if(($result->collection_origine) == true )
    	{
    	$feuille->setCellValueByColumnAndRow($u,1,'Collection origine');
    	$u++;}
    	if(($result->nom_origine) == true )
    	{
    	$feuille->setCellValueByColumnAndRow($u,1,'Nom origine');
    	$u++;}
    	if(($result->nom_final) == true )
    	{
    	$feuille->setCellValueByColumnAndRow($u,1,'Nom final');
    	$u++;}
     
     
        $login_requete = AMORET;
    	$resultats=$connexion->query("SELECT * FROM Produit WHERE login ='".$login_requete."'");
        $resultats->setFetchMode(PDO::FETCH_OBJ);
    	$k=A;
    	$i=2;
        while ( $donnees = $resultats->fetch() )
    	{
    	if(($result->ref_client) == true )
    	{
        $feuille->SetCellValue($k.$i,$donnees->ref_client);
    	$i++;}
    	if(($result->part_number) == true )
    	{
    	$feuille->SetCellValue($k.$i,$donnees->part_number);
    	$i++;}
    	if(($result->collection_client) == true )
    	{
    	$feuille->SetCellValue($k.$i,$donnees->collection_client);
    	$i++;}
    	if(($result->collection_origine) == true )
    	{
    	$feuille->SetCellValue($k.$i,$donnees->collection_origine);
    	$i++;}
    	if(($result->nom_origine) == true )
    	{
    	$feuille->SetCellValue($k.$i,$donnees->nom_origine);
    	$i++;}
    	if(($result->nom_final) == true )
    	{
    	$feuille->SetCellValue($k.$i,$donnees->nom_final);
    	$i++;}
    	}
     
     
     
     
        // envoi du fichier au navigateur
     
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
     
        header('Content-Disposition: attachment;filename="'.$nom_requete.'.xlsx"'); 
     
        header('Cache-Control: max-age=0'); 
     
        $writer = PHPExcel_IOFactory::createWriter($classeur, 'Excel2007'); 
     
        $writer->save('php://output');
     
     
       ?>

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    Salut

    d'abord un conseil d'ordre général, "SELECT *" c'est pratique quand on écrit du SQL à la main dans une console d'administration, mais on ne fait surtout pas ça dans du code un peu plus pérain. C'est mal ça fait des trous dans la couche d'ozone et ça empeche d'ajouter des colonnes à ta table sans introduire de bug. Ensuite ta façon de générer du code SQL sans prepare() te permet d'être sensible à une injection SQL (pas si grave) mais peut saturer la mémoire de ta base de plein de petit plan d'execution distincts (ennuyant)).

    Ci je comprends bien, dans une cellule tu as en A2 une valeur qui vient d'une requête et en B2 tu veux plusieurs valeurs d'une autre requetes?
    et ainsi de suite sur toutes les lignes?

    si c'est ça, je ferai une jointure entre les deux requêtes (histoire de n'avoir qu'une seule requête à sécuriser) et de ne pas remplir A2 avec la premiere ligne tout de suite et de boucler sur les lignes en cumulant la valeurs pour B2 dans une variable temporaire... et au changement de valeurs sur la colonne maitresse, j'écris A2 et B2 et je change de ligne du fichier excel.

    Ensuite si tu as de l'oracle (mysql ou oracle) tu as du GROUP_CONCAT ou du COALLESCE qui permet de faire ceci (sauf que tu as des limitations sur la taille ... des valeurs (et non des champs)).

    J'espère que je ne suis pas trop hors sujet.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 64
    Par défaut
    bonjour à toi ,

    et merci , je sais que je dois utiliser la fonction prépare ..... on me l'a déjà dis , il faut vraiment que je m'y mette

    l'inconvénient c'est que la requete que fais l'utilisateur peut être différente à chaque fois , d'ou la nécessité de ne pas nommer chaque colonne A,B,C etc .

    comme je n'y connais pas grand chose dans les jointure ( il faut que je potasse ça aussi ), je souhaiterais pouvoir sortir mon $k de la boucle une fois la première colonne remplis ....

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    re

    si ton SQL est différents (parce que tu fais plusieurs extractions différentes vers excel avec ton code), mon conseil est de:
    => apprendre les jointures
    => variabiliser la query (tu passes une $query ou un PDOStatement tout fait) a ton traitement
    => faire un tableau avec les noms d'entetes (comme ça tu as le nombre de colonnes à afficher ^^ en plus de savoir comment les nommer, parce que PDO c'est une plaie pour ça )
    => utiliser le mode PDO::FETCH_NUM
    -> $row[0] <=> excel colonne A //$row[1] <=> excel colonne B
    => oubien FETCH_CLASS en personnalisant la classe générée par Excel, mais j'ai jamais utilisée cette possibilité.

    ta jointure ne devrais pas être si compliquée, si tu veux on peut en discuter.

  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
    Au passage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for($col = 'A'; $col !== 'P'; $col++) {
    	$classeur->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 64
    Par défaut
    merci sabotage ....

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 64
    Par défaut
    merci gene69 ,

    je vais voir de mon coté pour les jointure et je reviendrais vers toi si besoin ...;

    pour
    => utiliser le mode PDO::FETCH_NUM
    -> $row[0] <=> excel colonne A //$row[1] <=> excel colonne B
    le but étant que pour que le fichier excel se remplisse correctement , si je n'ai pas de valeur dans $row[0] , c'est le $row[1] qui s'affichera dans la colonne A d'excel .....

    je n'arrive pas à faire la requete avec PDO::FETCH_NUM , peux tu m'aiguiller un peu , maintenant que tu connais ce que je souhaite faire ?

    merci encore à toi

Discussions similaires

  1. Variable et boucle while
    Par nicolas.pissard dans le forum Shell et commandes GNU
    Réponses: 23
    Dernier message: 21/01/2016, 22h26
  2. [MySQL] gestion d'affichage entre deux boucle while mysql_fetch_array()
    Par tkwleboss dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/11/2007, 22h37
  3. Réponses: 3
    Dernier message: 17/08/2007, 14h47
  4. [MySQL] Problème d'affichage dans un boucle while
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/05/2007, 09h31
  5. [MySQL] affichage d'une liste avec une boucle while
    Par Invité dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/01/2007, 21h19

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