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 :

Faire un annuaire clients


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut Faire un annuaire clients
    Bonjour,
    Je voudrais faire un tableau en forme d'annuaire similaire à l'image simplifiée (elle ne représente pas exactement le résultat de la requête):
    Nom : exemple.png
Affichages : 328
Taille : 24,6 Ko

    à partir de ce code:
    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
    function getCustomersOnCriteria($subscriberId, $countryCol, $where, $order) {
    	$db = dbConnect();
    	$dbc= dbConnectCommon();
    	$where = (empty($where)) ? '': " AND $where";
     
    	$sql = <<<SQL
    		SELECT d.id, d.company_name, d.country AS country_code ,c.$countryCol AS country, d.locality, d.phone, d.fax, d.mail
    			,e.directcall, e.firstname, e.familyname, e.freerole
    			,t.is_customer, is_to_see, t.actionlevel, t.actionlevel2, t.date_next_call, DATE_FORMAT(t.date_next_call,'%d/%m/%Y') AS eur_date_call
    		FROM sirep.dat_customers d
    			INNER JOIN common.countries c
    				ON d.country=c.id
    			LEFT JOIN sirep.dat_employees e
    				ON e.id_customer=d.id
    			LEFT JOIN sirep.dat_trading t
    				ON d.id=t.id
    		WHERE id_subscriber=:id_subscriber$where
    		ORDER BY $order
    SQL;
    	$stmt = $db->prepare($sql);
    	$stmt->execute([':id_subscriber'=>$subscriberId]);
    	return $stmt->fetchAll();
    }
    Mon souci n'est pas la requête qui fonctionne bien mais de savoir comment isoler les titres et sous-titres à mettre en exergue et comment les placer dans le tableau. Faut-il le faire en PHP ou avec MySQL?
    Merci d'avance pour vos réponses.

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    La valeur $order est vide, donc difficile de savoir si l'ordre actuel est correct.

    Personnellement, je ferais en sorte de classer par pays et puis par ville, donc quelque chose comme ça : $order = 'country ASC, d.locality ASC';.

    Ensuite, en PHP, sauvegarder la dernière valeur de pays/ville affichée, et afficher la valeur si elle est différente de la dernière sauvegardée.

    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
    <?php
    $last_country = $last_locality = "";
    while (parsing_results()) {
        if ($row->country != $last_country) {
            echo '<tr><th colspan="4">' . $row->country . '</th><tr>';
            $last_country = $row->country;
        }
        if ($row->locality != $last_locality) {
            echo '<tr><th colspan="4">' . $row->locality . '</th><tr>';
            echo '<tr><th>Société</th><th>Téléphone</th><th>Interlocuteur</th><th>Courriel</th></tr>';
            $last_locality = $row->locality;
        }
        // Ici viennent les données de l'annuaire
        ?>
        <tr>
            <td><?= $row->company_name; ?></td>
            <td><?= $row->phone; ?></td>
            <td><?= $row->firstname; ?> <?= $row->familyname; ?></td>
            <td><?= $row->mail; ?></td>
        </tr>
        <?php
    }


    NB : <?= est la forme raccourcie d'un echo() en PHP.
    Si les short tags sont désactivés sur votre serveur, il faut les remplacer par <?php echo

  3. #3
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 342
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 342
    Billets dans le blog
    17
    Par défaut
    Petite parenthèse :

    Citation Envoyé par darkstar123456 Voir le message
    NB : <?= est la forme raccourcie d'un echo() en PHP.
    Si les short tags sont désactivés sur votre serveur, il faut les remplacer par <?php echo
    <?= est toujours disponible, quelque soit la valeur de short_open_tag
    short_open_tag n'impacte que <?
    https://www.php.net/manual/fr/ini.co...short-open-tag

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    @Seb.
    Oui, je connaissais tout ça.

    @darkstar123456
    Merci c'est super. A la fois simple et efficace!

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 05/06/2009, 22h01
  2. Réponses: 4
    Dernier message: 05/06/2008, 21h16
  3. Faire dormir le client en attendant la reponse du serveur
    Par metalcoyote dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 14/12/2007, 15h59
  4. Réponses: 5
    Dernier message: 24/09/2005, 20h31
  5. [Socket] Comment faire du multi-client ?
    Par eric30eric dans le forum Web & réseau
    Réponses: 5
    Dernier message: 05/01/2005, 21h39

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