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 :

Filtrer les éléments dans un tableau lors de l'affichage


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Filtrer les éléments dans un tableau lors de l'affichage
    j'ai un tableau dynamique et les mec veulent que je filtre les informations du genre à ce qu'ils ont un total=0 je n'affiche pas. et ce qui se passe l'ancien developpeur lui a d'abord afficher toute les données avant deffectuer le traitement et la je dois dabord calculer le total avant d'afficher pour filtrer. Et j'ai donc un problème pour calculer le total. voilà un peu le code j'ai commenté pour expliquer un peu

    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
    <?php
    session_start();
    include ("config.php");
    include ("session.php");
    include ("lib_sundis.php");
    echo "<table id=stats_tab border=1 cellpadding=5 style='width:100%;margin-left:auto;margin-right:auto;border-collapse:collapse;'>";
    echo "<thead>";
    echo "<tr>";
    echo "<th>Enseignes</th>";
    //////////////////////////////////// affiche les utilisateur ayant un etat =1 et acces > 2 ////////////////////////////////////
    $res_com = mysqli_query($bdd, 'SELECT * FROM utilisateurs WHERE etat = 1 AND acces > 2');
    while ($don_com = mysqli_fetch_array($res_com))
    	echo "<th>".nom_commercial($don_com['id_utilisateur'])."</th>";
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    echo "<th>TOTAL</th>";
    echo "</tr>";
    echo "</thead>";
    echo "<tbody>";
    $res_enseigne = mysqli_query($bdd, 'SELECT * FROM enseignes ORDER BY intitule'); // affiche les enseignes genre les noms et c'est eux qu'il faut filtrer
    while ($don_enseigne = mysqli_fetch_array($res_enseigne)){
    	echo "<tr>";
    	echo "<td>".$don_enseigne['intitule']."</td>";
    	$res_com = mysqli_query($bdd, 'SELECT * FROM utilisateurs WHERE etat = 1 AND acces > 2');
    	$total = 0;
    	while ($don_com = mysqli_fetch_array($res_com)){
    		$res = mysqli_query($bdd, 'SELECT * FROM rapports, clients, enseignes WHERE rapports.id_client = clients.id_client AND clients.id_enseigne = enseignes.id_enseigne AND clients.id_enseigne = "'.$don_enseigne['id_enseigne'].'" AND rapports.id_utilisateur = "'.$don_com['id_utilisateur'].'" AND type != 4');
    		echo "<td style='text-align:center;'>".mysqli_num_rows($res)."</td>"; // affiche les rapports des clients sur les lignes
    		$total = $total + mysqli_num_rows($res); // ici il fait la somme pour recupérer le total
    	}
    	$somme=$total;
    	echo "<td style='text-align:center;'>$somme</td>"; // ici il affiche le total
    	//echo "<td style='text-align:center;'>$total</td>";
    	echo "</tr>";
    	echo "<tr style='background-color:lightgrey;'>";
    	//////////////////////////////////// Visite client avec RDV //////////////////////////////////////////////////////////////////
    	echo "<td>Visite client avec RDV</td>";
    	$res_com = mysqli_query($bdd, 'SELECT * FROM utilisateurs WHERE etat = 1 AND acces > 2');
    	$total = 0;
    	while ($don_com = mysqli_fetch_array($res_com)){
    		$res = mysqli_query($bdd, 'SELECT * FROM rapports, clients, enseignes WHERE rapports.id_client = clients.id_client AND clients.id_enseigne = enseignes.id_enseigne AND clients.id_enseigne = "'.$don_enseigne['id_enseigne'].'" AND rapports.id_utilisateur = "'.$don_com['id_utilisateur'].'" AND type = 6');
    		echo "<td style='text-align:center;'>".mysqli_num_rows($res)."</td>";
    		$total = $total + mysqli_num_rows($res);
    	}
    	echo "<td style='text-align:center;'>$total</td>";
    	echo "</tr>";
    	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    	echo "<tr style='background-color:lightgrey;'>";
    	//////////////////////// Visite client sans RDV ////////////////////////////////////////////////////////////////////////
    	echo "<td>Visite client sans RDV</td>";
    	$res_com = mysqli_query($bdd, 'SELECT * FROM utilisateurs WHERE etat = 1 AND acces > 2');
    	$total = 0;
    	while ($don_com = mysqli_fetch_array($res_com)){
    		$res = mysqli_query($bdd, 'SELECT * FROM rapports, clients, enseignes WHERE rapports.id_client = clients.id_client AND clients.id_enseigne = enseignes.id_enseigne AND clients.id_enseigne = "'.$don_enseigne['id_enseigne'].'" AND rapports.id_utilisateur = "'.$don_com['id_utilisateur'].'" AND type = 7');
    		echo "<td style='text-align:center;'>".mysqli_num_rows($res)."</td>";
    		$total = $total + mysqli_num_rows($res);
    	}
    	echo "<td style='text-align:center;'>$total</td>";
    	echo "</tr>";
    	echo "<tr style='background-color:lightgrey;'>";
    	//////////////////////////////////////////////////////////////////////////////////////////
    	/////////////////// Visite sans contact //////////////////////////////////////////////////////
    	echo "<td>Visite sans contact</td>";
    	$res_com = mysqli_query($bdd, 'SELECT * FROM utilisateurs WHERE etat = 1 AND acces > 2');
    	$total = 0;
    	while ($don_com = mysqli_fetch_array($res_com)){
    		$res = mysqli_query($bdd, 'SELECT * FROM rapports, clients, enseignes WHERE rapports.id_client = clients.id_client AND clients.id_enseigne = enseignes.id_enseigne AND clients.id_enseigne = "'.$don_enseigne['id_enseigne'].'" AND rapports.id_utilisateur = "'.$don_com['id_utilisateur'].'" AND rapports.id_contact = 0');
    		echo "<td style='text-align:center;'>".mysqli_num_rows($res)."</td>";
    		$total = $total + mysqli_num_rows($res);
    	}
    	echo "<td style='text-align:center;'>$total</td>";
    	//////////////////////////////////////////////////////////////////////////////////////////
    	echo "</tr>";
    }
    echo "</tbody>";
    echo "</table>";
    ?>

  2. #2
    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
    Le code est très difficile à lire car tout est regroupé, aucune architecture MVC, mais de toutes façons il n'y a que deux manières de faire le tri :

    - soit tu tri dans ta requête SQL (si tu peux le faire, fais le)
    - sinon a posteriori dans ton code php (il existe la fonction array_filter pour filtrer des données en php).
    Un message utile vous a aidé ? N'oubliez pas le

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

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    +1 Spartacusply
    Vu que le total correspond à un nombre d'enregistrements avec des sous-requêtes en pagaille, je pense qu'il serait préférable de voir s'il ne serait pas possible de récupérer cette info directement en SQL en une seule passe.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Le problème c'est comment faire pour récupérer le sur total de chaque ligne avant d'appliquer le filtre c'est un peu la ou je bloque

    Merci

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    voilà le code plus simplifié et je bloque au niveau de la récupération du total global afin de d'appliquer le filtre pour les valeurs nulles lors de l'affichage des enseignes(les groupes)


    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
    <?php
    $res_enseigne = mysqli_query($bdd, 'SELECT * FROM enseignes ORDER BY intitule'); //affiche les enseignes genre les noms des boutiques et c'est eux qu'il faut filtrer 
    while ($don_enseigne = mysqli_fetch_array($res_enseigne)){
    	echo "<tr>";
    	echo "<td>".$don_enseigne['intitule']."</td>";
    	$res_com = mysqli_query($bdd, 'SELECT * FROM utilisateurs WHERE etat = 1 AND acces > 2');
    	$total = 0;
    	while ($don_com = mysqli_fetch_array($res_com)){
    		$res = mysqli_query($bdd, 'SELECT * FROM rapports, clients, enseignes WHERE rapports.id_client = clients.id_client AND clients.id_enseigne = enseignes.id_enseigne AND clients.id_enseigne = "'.$don_enseigne['id_enseigne'].'" AND rapports.id_utilisateur = "'.$don_com['id_utilisateur'].'" AND type != 4');
    		echo "<td style='text-align:center;'>".mysqli_num_rows($res)."</td>"; // affiche les rapports des clients sur les lignes et il faut aussi le mentionner dans l'affichage
    		$total = $total + mysqli_num_rows($res); // ici il fait la somme pour recupérer le total 
    	}
    	echo "<td style='text-align:center;'>$total</td>"; //  ici il affiche le total
    	echo "</tr>";
    }
    ?>

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Bonjour j'ai trouvé la solution. il suffisait juste de stocker les tableaux des enseignes dans les $content initialiser le total à 0 et afficher les content lorsqu'il est différent de 0

    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
    <?php
    $res_enseigne = mysqli_query($bdd, 'SELECT * FROM enseignes ORDER BY intitule'); 
    while ($don_enseigne = mysqli_fetch_array($res_enseigne))
    {
    	$total = 0;
    	$content = '';
    	$content .= "<tr>";
    	$content .= "<td>".$don_enseigne['intitule']."</td>";
    	$res_com = mysqli_query($bdd, 'SELECT * FROM utilisateurs WHERE etat = 1 AND acces > 2');
    	while ($don_com = mysqli_fetch_array($res_com))
    	{
     
    		$res = mysqli_query($bdd, 'SELECT * FROM rapports, clients, enseignes WHERE rapports.id_client = clients.id_client AND clients.id_enseigne = enseignes.id_enseigne AND clients.id_enseigne = "'.$don_enseigne['id_enseigne'].'" AND rapports.id_utilisateur = "'.$don_com['id_utilisateur'].'" AND type != 4');
     
    		$content .= "<td style='text-align:center;'>".mysqli_num_rows($res)."</td>"; 
    		$total = $total + mysqli_num_rows($res); 
    	}
    	$content .= "<td style='text-align:center;'>$total</td>";
    	$content .= "</tr>";
    	if ($total !== 0) echo $content;
    }
    ?>

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

Discussions similaires

  1. Afficher un élément dans un tableau lors du clic
    Par ndiayeibra93 dans le forum jQuery
    Réponses: 1
    Dernier message: 12/12/2014, 13h38
  2. Réponses: 1
    Dernier message: 04/06/2014, 20h19
  3. [AC-2003] Filtrer les enregistrements dans un tableau
    Par chougadosu dans le forum VBA Access
    Réponses: 6
    Dernier message: 23/06/2010, 13h15
  4. [VB6] Filtrer les éléments dans une listview
    Par jfdmagic dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/06/2009, 11h56
  5. Réponses: 10
    Dernier message: 27/03/2006, 18h38

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