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 :

[Tableaux] Afficher une ville sans son CEDEX


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut [Tableaux] Afficher une ville sans son CEDEX
    Bonjour,

    J'ai des villes dans ma base de données qui contiennent leur nom et des fois, il y a " Cédex" ensuite dans le même champ. J'aimerais pouvoir enlever ce Cédex (pas dans la base de données mais dans mon application).
    J'ai donc réussi à le faire enlever avec la fonction str_replace mais maintenant, j'ai deux fois la ville qui s'affiche avec mon application et pourtant, j'ai mis "GROUP BY mailingcity"...
    Je ne vois pas quoi faire, pouvez-vous m'aider svp ???


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while ($donnees = mysql_fetch_assoc($resultat)) {
    $donnees['mailingcity']=str_replace(" CEDEX", "", $donnees['mailingcity']);
     
    echo "<a href=\"".$deppage."page_annu2.php?dep=".$dep."&ville=".$donnees['mailingcity']."\">";		
    		echo ucfirst(strtolower(trim($donnees['mailingcity'])));
    		echo "</a><br />";	
     
        }

  2. #2
    Membre éprouvé Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web indépendant

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Points : 1 042
    Points
    1 042
    Par défaut
    bonjour,

    Déjà dans un premier temps je pense que tu devrais donner une autre variable pour ta ville, exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mailing_city = str_replace(" CEDEX", "", $donnees['mailingcity']);
    et ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "<a href=\"".$deppage."page_annu2.php?dep=".$dep."&ville=".$mailing_city."\">";
    etc...
    Voilà ++
    LudiKreation Pour un web ludique et son Blog | CapRumbo pour un peu d'évasion | ChaOdisiaque Club Passion Rôliste |SierrElben le Jeu de rôle

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Bonjour,
    Oui, bah le problème, en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while ($donnees = mysql_fetch_assoc($resultat)) {
    $mailing_city=str_replace(" CEDEX", "", $donnees['mailingcity']);
     
    		echo "<a href=\"".$deppage."page_annu2.php?dep=".$dep."&ville=".$mailing_city."\">";		
    		echo $mailing_city;
    		echo "</a><br />";	
     
        }
    ça m'affiche le nom de la ville ainsi que le nom de la ville sans le cédex ok mais cela me l'affiche deux fois...


    Pour mieux comprendre, deux exemples :

    Pour la ville de Chantonnay, je n'ai qu'un membre dans cette ville et vu que dans la base de données, il habite Chantonnay Cédex, mon programme affiche "Chantonnay cédex". Pour cet exemple, je voudrais qu'il affiche que "Chantonnay"...

    Autre exemple : j'ai des membres dans la ville "Challans" et d'autres membres avec "Challans cédex"... pour cet exemple, j'aimerais que cela affiche que la ville de "Challans"...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Ben si ton tableau contient:

    PARIS
    MARSEILLE
    PARIS CEDEX

    Et que tu enleve CEDEX lorsque tu affiche

    Eh ben tu te retrouve avec 2 fois PARIS, meme si dans ta base c'est different.

    Fais un controle de doublon au moment de remplir ton tableau

    (ou alors j'ai rien compris , ce qui est possible également ! )

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Le GROUP BY devrait se charger du contrôle de doublon normalement non ???

    Sinon, je ne vois pas comment effectuer un contrôle de doublon dans le tableau...

    j'ai fait une condition qui ne marche pas lol...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if ($mailing_city==$donnees['mailingcity']) {
    		echo "<a href=\"".$deppage."page_annu2.php?dep=".$dep."&ville=".$mailing_city."\">";		
    		echo $mailing_city;
    		echo "</a><br />";	
     
        } else { echo ""; }
    	}
    mais là, le CHANTONNAY qui était tout seul avec son cédex dans ma base de données a disparu...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Si dans ta base tu as

    paris
    paris cedex

    C'est pas la meme chose, c'est pas un doublon, donc il garde les deux ( meme avec ton group by )

    Pour mettre en place ton tableau :

    comme je suis naze en php, je te la fais version algo:

    -Executer la requete.
    -Pour chaque résultat:
    On enleve cedex si ya dans le resultat
    On regarde si ce result ( sans le cedex ) est deja dans le tableau
    Non -> on l'ajoute dans le tableau et on affiche
    -Fin pour

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    LoL, merci, mais c'est exactement ce que j'essaie de faire depuis tout à l'heure... le problème, c'est qu'avec le php, je ne sais pas le faire aussi... donc si quelqu'un avait une idée en php
    en algo, je vois comment faire mais le php mais avec les tableaux hummm humm


    Si le champ contient le terme cédex... comment traduire ça svp en php ???

    If $donnees['mailingcity'] LIKE "% CEDEX"... ???? il devrait bien y avoir une solution...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Actuellement, voici ce que cela m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    AIZENAIS
    BEAUVOIR-SUR-MER
    BENET
    BOUIN
    CHAILLE LES MARAIS
    CHALLANS
    CHALLANS
    CHANTONNAY
    COEX
    FONTENAY LE COMTE
    JARD-SUR-MER
    CHALLANS apparaît deux fois !! le cédex a bien disparu... mais challans s'affiche deux fois... comment faire un tableau pour qu'il aille chercher l'enregistrement suivant et s'il est le même, ne pas le faire afficher ??

  9. #9
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    dans un tableau, tu mémorises chaque ville que tu affiches
    et avant d'afficher une ville tu vérifies qu'elle est pas dans le tableau, avec in_array() par exemple

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Bon, je pense mal faire. Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    while ($donnees = mysql_fetch_assoc($resultat)) {
    $mailing_city=str_replace(" CEDEX", "", $donnees['mailingcity']);
     
    $arr=array($donnees['mailingcity']);
    if (in_array($mailing_city,$arr)) { 
    		echo "<a href=\"".$deppage."page_annu2.php?dep=".$dep."&ville=".$mailing_city."\">";		
    		echo $mailing_city;
    		echo "</a><br />";	
     
        } else { echo ""; } }
    et cela m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AIZENAIS
    BEAUVOIR-SUR-MER
    BENET
    BOUIN
    CHAILLE LES MARAIS
    CHALLANS
    COEX
    JARD-SUR-MER
    L HERMENAULT
    L ILE D YEU
    Mais là, Chantonnay (qui s'appelait Chantonnay Cédex) a aussi disparu lol... alala, quelle galère ! où me trompe-je svp ??

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    while ($donnees = mysql_fetch_assoc($resultat)) {
    $mailing_city=str_replace(" CEDEX", "", $donnees['mailingcity']);
    if ( $mailing_city != $OldVille )
    {
    echo $mailing_city;
    }

    $OldVille = $mailing_city;

    }

    Voila, dans ta requete tu rajoute un order by 'nomVille' ASC ( ou le truc qui fait classer dans l'ordre alphabetique suivant ta base de donnée ).

    De cette maniere tu garde toujours l'ancienne en mémoire, donc il ignorera les nouvelles villes qui portent le meme nom.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Citation Envoyé par sandddy Voir le message
    Bon, je pense mal faire. Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    while ($donnees = mysql_fetch_assoc($resultat)) {
    $mailing_city=str_replace(" CEDEX", "", $donnees['mailingcity']);
     
    $arr=array($donnees['mailingcity']);
    if (in_array($mailing_city,$arr)) { 
    		echo "<a href=\"".$deppage."page_annu2.php?dep=".$dep."&ville=".$mailing_city."\">";		
    		echo $mailing_city;
    		echo "</a><br />";	
     
        } else { echo ""; } }
    et cela m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AIZENAIS
    BEAUVOIR-SUR-MER
    BENET
    BOUIN
    CHAILLE LES MARAIS
    CHALLANS
    COEX
    JARD-SUR-MER
    L HERMENAULT
    L ILE D YEU
    Mais là, Chantonnay (qui s'appelait Chantonnay Cédex) a aussi disparu lol... alala, quelle galère ! où me trompe-je svp ??
    Alors, la ou tu te trompe, c'est que tu regarde si ta mailing city ( que tu as transformé en CHANTONNAY ) se trouve dans le tableau ( que tu n'as pas modifié ) dans lequel il y a CHANTONNAY CEDEX.

    Donc c'est pas dans le tableau tu ne passe pas dans ton if

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Je n'ai pas compris ce qu'était $OldVille
    Désolé j'ai trop mal à la tête !

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Oui, je suis vraiment pas bon pour expliquer.

    On va reprendre du début.

    Dans ta base tu des villes .

    PARIS
    MARSEILLE
    MARSEILLE
    PARIS CEDEX

    Tu veux garder ces infos en base, mais tu veux afficher juste 1 fois chaque ville.
    Tu veux aussi enlever le cedex, mais tu veux pas le faire dans la base (on doit donc le faire au moment de l'affichage ).

    Tu demande un group by lors de ta requete

    ta requete te retournera :

    PARIS
    MARSEILLE
    PARIS CEDEX

    Tu constate qu'il y a 1 des 2 marseilles qui a disparu ( vu que le group by te garde juste un exemplaire de chaque ).

    Par contre on voit aussi que PARIS et PARIS CEDEX sont toujours la !

    Et pour cause, ce ne sont pas les memes chaines de caracteres

    Donc il nous faut, au moment de l'affichage :
    - virer le "cedex".
    - empecher les doublons.

    Pour virer le cedex, tu l'as fait, pas de souci:
    while ($donnees = mysql_fetch_assoc($resultat))
    {
    $new_city=str_replace(" CEDEX", "", $donnees['mailingcity']);
    echo $new_city;
    }

    Tu remarque que j'ai changé le nom de la variable en "new_city"

    Ok donc dans la boucle on va a chaque fois avoir des villes sans le "cedex" si il y en a un 1.

    Donc pour revenir a notre exemple, notre boucle va nous sortir :

    PARIS
    MARSEILLE
    PARIS

    ici le cedex ( du 2eme PARIS ) a dégagé, c'est cool mais on se retrouve avec un doublon.

    Il faut pouvoir l'empecher.

    Pour ce faire, on va controler si on a déja affiché la ville, pour ca , on passe par une variable temporaire qui contiendra le nom de la derniere ville affichée ( cette variable s'appelera $old_city.

    Donc on va controler que new_city est different de old_city avant d'afficher :
    while ($donnees = mysql_fetch_assoc($resultat))
    {
    $new_city=str_replace(" CEDEX", "", $donnees['mailingcity']);
    if ( $new_city != $old_city )
    {
    echo $new_city;
    }
    $old_city = $new_city;
    }

    Bon c'est cool, mais si on passe ce code, le resultat est le suivant :

    PARIS
    MARSEILLE
    PARIS

    Ben merde c'est pas bon, explication:

    1ere boucle :
    $new_city = PARIS
    $old_city = rien
    -> on affiche !

    2eme boucle :
    $new_city = MARSEILLE
    $old_city = PARIS
    -> on affiche !

    3eme boucle :
    $new_city = PARIS
    $old_city = MARSEILLE
    -> on affiche !

    Et oui, merde, on devrait pas afficher , il faudrait regrouper les villes qui portent le meme nom.

    et pour ca, il faut modifier la requete SQL et y rajouter ORDER BY [colonne_ville] ASC.

    De cette maniere, le resultat de la requete sera :

    MARSEILLE
    PARIS
    PARIS CEDEX

    Et ta boucle qui ressemble a ca :

    while ($donnees = mysql_fetch_assoc($resultat))
    {
    $new_city=str_replace(" CEDEX", "", $donnees['mailingcity']);
    if ( $new_city != $old_city )
    {
    echo $new_city;
    }
    $old_city = $new_city;
    }

    Va eliminer PARIS ( le 2eme ):

    Tu aura donc :

    MARSEILLE
    PARIS

    Youpi !

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Ah c'est clair, c'est carrément mieux expliqué
    Merci beaucoup

    Avec mon group by, ça fonctionne bien aussi !!!
    Ai-je intérêt de mettre ORDER BY ? au cas où si je rajoutais d'autres villes par la suite... ???

    Merci encore

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    ben order by et group by , c'est pas du tout la meme chose.

    Pour etre certain que ce code marche, il faut mettre les 2.

    Je pense que si cela fonctionne c'est parce que tu as la chance d'avoir les villes qui comportent des "cedex" a coté de celles qui en ont pas (dans la base je parle ).

    Donc je te conseille de mettre les deux :

    select [colonne_ville] from [adresses_table] group by [colonne_ville] order by [colonne_ville] ASC.

    Group by groupe X enregistrements en 1 s'ils ont le meme champ [colonne_ville].
    order by ... ASC classe juste dans l'ordre alphabetique les lignes en fonction de la colonne [colonne_ville]

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Oui, c'est vrai
    Merci pour tout !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/04/2006, 22h54
  2. [GTK#]Comment afficher une frame et son contenu?
    Par mick2d dans le forum GTK+
    Réponses: 3
    Dernier message: 31/03/2006, 09h35
  3. [C#]Afficher une forme sans qu'elle se ferme
    Par gilles641 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/03/2006, 12h25
  4. Afficher une image sans URL dans un forum
    Par Vanesse dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 01/03/2006, 17h55
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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