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

EDI, CMS, Outils, Scripts et API PHP Discussion :

comment proposer plusieurs options pour un même champ


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Points : 15
    Points
    15
    Par défaut comment proposer plusieurs options pour un même champ
    Bonjour,
    Je récupère des informations (petites annonces) dans des fichiers xml pour les rentrer dans ma base de données "ads manager".
    Quelquefois, les noms de catégories imposées permettant de classifier les annonces ne sont pas bien respectés. Par exemple, si le nom de catégorie imposé est demi lune(sans trait d'union) mais qu'il est noté dans le fichier xml demi-lune (avec trait d'union), dans l'exemple de code de mon script php ci-dessous, l'objet va passer systématiquement dans la catégorie "Autres trucs" au lieu de rentrer dans la catégorie demi lune.
    Comment pourrais-je faire pour proposer plusieurs options écrites dans le fichier xml pour un seul champ de ma base de données.


    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
    {
    				$advert = $adverts->advert[$var];
     
    				$dataAnnonceur["ref"]                 = $ref  = utf8_decode($advert["ref"]);
    				$dataAnnonceur["category"]            = $cat    = utf8_decode(trim($advert->advert_features->truc_category));
     
    				$sql2 = "SELECT id
    						FROM  `drlpo_adsmanager_categories` 
    						WHERE name = '$cat'";
     
    				echo "<br><span style=\"color:green\">".$sql2."</span><br/>";
     
    				$results =mysql_query($sql2) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    				while($rows = mysql_fetch_array($results))
    				{
    					$res[] = (int)$rows[0];
    				 }
    				 if(empty($res))
    				   {
     
    					   $sql2 = "SELECT id
    						FROM  `drlpo_adsmanager_categories` 
    						WHERE name = 'Autres trucs'";
     
    						echo "<br><span style=\"color:green\">".$sql2."</span><br/>";
     
    						$results =mysql_query($sql2) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    						while($rows = mysql_fetch_array($results))
    						{
    							$res[] = (int)$rows[0];
    						}

  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
    C'est plutôt à l'insertion qu'à la sélection qu'il faudrait régler ton problème, tenter de l'insérer vraiment à la catégorie demi lune même s'il est écrit demi-lune dans le fichier xml.

    Par exemple, avant de comparer les catégories, enlever les traits d'union :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str_replace("-"," ","demi-lune");
    Bien sur s'il y en a dans les deux sens, ça risque d'être compliqué...




    PS : le mieux, on est bien d'accord c'est que les deux soient écrits exactement de la même manière, que ce soit d'une façon ou d'une
    Un message utile vous a aidé ? N'oubliez pas le

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Bonsoir,
    Si j'avais la possibilité de résoudre le problème en amont, ce serait très simple. Si je cherche a solutionner cette situation c'est parce que je reçois plusieurs fichiers xml chaque jour, lesquels sont automatiquement traités par un script php qui se lance automatiquement (tache cron).
    Donc je dois créer un tableau de correspondance, mais je ne sais pas comment faire.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Bonjour Spartacusply,
    Bonjour à tous,

    Ta suggestion m' a bien aidé. J'ai avancé sur le sujet, mais je me heurte a un problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $cat = str_replace('Velo','Velo bleu', $cat);$cat = str_replace('Demi-Lune','demi lune', $cat);$cat = str_replace('Vélo rouge','Velo rouge', $cat);$cat = str_replace('Vélo Vert','Vert', $cat);;$cat = str_replace('Vélo','Cycle  ', $cat);
    Velo bleu pour Velo ne fonctionne pas (certainement du à la similitude du mot Velo)
    demi lune pour Demi-Lune c'est OK
    Vélo rouge pour Velo rouge (accent sur velo) ne fonctionne pas (certainement comme cas n°1)
    Vert pour Velo Vert ne fonctionne pas (similitude du mot Vert)
    Cycle pour Vélo c'est OK

    La solution existe certainement, mais je ne la connais pas...

  5. #5
    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
    Je pense que dans donc cas il vaut mieux partir d'un mécanisme générique, plutôt qu'un qui traiterait les cas particuliers un par un.

    Je m'explique : générer une "clef" qui identifierait de manière certaine une catégorie, comparer deux catégories pour savoir si c'est les mêmes reviendrait à comparer leurs clefs. Si celles-ci sont identiques, alors on dit que c'est la même catégorie. La clef doit être simple, pour pouvoir ainsi dire que deux clef sont identiques au même titre que "1= 1". Ellle ne doit ainsi que de caractères numériques en minuscules (et éventuellement numériques).

    Voici un code simple pour expliquer :

    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
    <?php
     
    // Fonction qui supprime les accents
    // Elle est un peu compliquée, maais c'est la seule fonction qui remplace tous les accents par leurs équivalents sans accents
    function stripAccents($str = null, $encoding = 'UTF-8') {
        if (!is_string($str)) {
            return false;
        }
        /* transformer les caractères accentués en entités HTML */
        $str = htmlentities($str, ENT_NOQUOTES, $encoding);
     
        /* remplacer les entités HTML pour avoir juste le premier caractères non accentués 
         * Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ... */
        $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
     
        /* remplacer les ligatures tel que : Œ, Æ ... 
          Exemple "Å“" => "oe" */
        $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
        /* Supprime les espaces */
        $str = preg_replace('/\s/', '_', $str);
        /* Supprimer tout le reste */
        $str = preg_replace('#&[^;]+;#', '', $str);
     
        return $str;
    }
     
    function getKey($cat) {
        $cat = trim($cat);
        $cat = strtolower($cat);
        $cat = stripAccents($cat);
     
        //On supprime tous les caractères non alphanumérique
        $cat = preg_replace("#[^!A-Za-z0-9 ]+#", '', $cat);
     
        return $cat;
    }
     
    $cat1 = "DemiLune";
    $cat2 = "Demi - lune";
     
    if (getKey($cat1) == getKey($cat2)) {
        echo "Même catégorie !!";
    }
    Un message utile vous a aidé ? N'oubliez pas le

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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Merci Spartacusply,
    Je vais tester dans les prochains jours et ne manquerai pas de revenir vers toi.
    Par contre, je vais avoir une dizaine de comparaison à faire. Comment les imbriquer ?

  7. #7
    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
    Comment ça une dizaine de comparaison ?
    Un message utile vous a aidé ? N'oubliez pas le

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

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    regarde mon message de 11h59.
    j'en avais mis 5 comme exemple, mais j'en ai une dizaine.

  9. #9
    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
    Tu peux faire une fonction de comparaison puis passer par une boucle par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function compare($cat1,$cat2) {
         return (getKey($cat1) == getKey($cat2));
    }
    Un message utile vous a aidé ? N'oubliez pas le

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

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    La j'y suis plus. j'ai perdu le fil

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    je vois bien l'idée ou tu fait un procces d'acceuil :

    1)recevoir une rubrique(2)
    2)mettre en minuscule(3)
    3)remplacer tous les caractères spéciaux(4)
    4)regarder si la rubrique existe deja(5,6)
    5)enregistrer une nouvelle rubrique(6)
    6)enregistrer l'article dans la rubrique

    pour le 1 et 2 je pense que juste en te servant de raw_url_encode, ou d'une fonction que tu va trouver pour générer des urls propres te suffira et va solutionner ton problème en parti
    Conception / Dev

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Bonjour,
    J'étais absent quelques jours, je reviens sur le sujet.
    @ascito - merci pour ta réponse mais je ne souhaite pas créer de nouvelles catégories. Je voudrais rester sur celles existantes.

    @Spartacusply - J'ai pu résoudre le problème des mots double en supprimant l'espace avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str = preg_replace('/s/', '', $str);
    mais il me reste le problème des mots avec accents à résoudre. Probablement parce que je n'ai pas su adapter la fonction que tu avais proposé.

    Ci-dessous la partie du script qui traite des "catégories" dans son état actuel.
    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
     
    $advert = $adverts->advert[$var];
     
     
     
    				$dataAnnonceur["ref"]                 = $ref  = utf8_decode($advert["ref"]);
    				$dataAnnonceur["category"]            = $cat    = utf8_decode(trim($advert->advert_features->Velo_category));
     
     
     
    	            $str = preg_replace('/s/', '', $str);
     
     
                    $cat = str_replace('Bicyclette','Velo', $cat);$cat = str_replace('Demi-Course','Demi course', $cat);$cat = str_replace('Course leger','Course/leger', $cat);$cat = str_replace('Vélo sportif','Sportif', $cat);$cat = str_replace('Velo Enfant','Vélo enfant', $cat);$cat = str_replace('Têche course','Course', $cat)
     
     
     
    				$sql2 = "SELECT id
    						FROM  `abnjo_adsmanager_categories` 
    						WHERE name = '$cat'";
     
    				echo "<br><span style=\"color:green\">".$sql2."</span><br/>";
     
    				$results =mysql_query($sql2) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    				while($rows = mysql_fetch_array($results))
    				{
    					$res[] = (int)$rows[0];
    				 }
    				 if(empty($res))
    				   {
     
    					   $sql2 = "SELECT id
    						FROM  `abnjo_adsmanager_categories` 
    						WHERE name = 'Autres Velos'";
     
    						echo "<br><span style=\"color:green\">".$sql2."</span><br/>";
     
    						$results =mysql_query($sql2) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    						while($rows = mysql_fetch_array($results))
    						{
    							$res[] = (int)$rows[0];
    						}
     
     
    				   }

Discussions similaires

  1. Entrée de plusieurs dates pour un même champ
    Par Veg91 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 30/10/2013, 11h48
  2. Réponses: 2
    Dernier message: 21/08/2008, 12h46
  3. [MySQL] insérer plusieurs valeurs pour le même champ
    Par fAdoua123 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/03/2008, 13h41
  4. Comment fusionner plusieurs callback pour un même objet graphique
    Par biquet dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 19/04/2007, 10h39
  5. Plusieurs valeurs pour un même champ
    Par will89 dans le forum Requêtes
    Réponses: 32
    Dernier message: 14/06/2006, 10h06

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