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 :

[SQL] comparaison de chaine


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 148
    Points : 54
    Points
    54
    Par défaut [SQL] comparaison de chaine
    Bonjour,

    j'ai un formulaire composé de différent controls.

    Avant enregistrement dans base sql, je veux vérifier les doublons.

    j'ai donc d'abord effectué une requête sql en sélectionnant les lignes correspondant au champ du formulaire. Mais un champ me pose problème, c'est l'adresse.

    je pensait donc pour ce dernier champ, utiliser le résultat de ma requete sql et comparer la colonne adresse (de ma requête sql) au champ adresse de mon formulaire.

    Déjà, ma solution tient elle la route selon vous ?

    le pb des adresse vient du fait que les informations peuvent être les mêmes mais avoir un syntaxe légèrement différente (une ùajuscule, un accent, un espace ...).

    je pense donc utiliser strcasecmp, qui est insensible à la casse, mais cela me semble insuffisant. Sinon il y a les expression régulières, mais je ne vois pas comment mettre cette comparaison en oeuvre.
    votre aide serait la bienvenue.

    Merci

  2. #2
    Membre du Club Avatar de TheEwook
    Inscrit en
    Novembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 44
    Points : 50
    Points
    50
    Par défaut
    Salut,

    Le plus simple à mon avis est de faire la comparaison sans majuscule, sans espace sans accent, etc..

    Et donc oui pour cela tu peux utiliser les expressions régulières.

    Regarde de ce coté :
    http://g-rossolini.developpez.com/tu...?page=sommaire

    Plus particulièrement ici : http://g-rossolini.developpez.com/tu...=page_3#LIII-5

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 148
    Points : 54
    Points
    54
    Par défaut
    merci pour l'info.

    je comprend pas tout... faut que je m'y plonge... pour l'instant j'ai donc fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $sql="SELECT * FROM Carnet_Adresse WHERE dept='$dep' AND Ville='$ville' AND Nom='$nom'";
    $requete=mysql_query( $sql, $lk_plug) or die ('Impossible de sélectionner la base de données : ' . mysql_error());
     
     
    if (strcasecmp(mysql_result($requete,0,2),$adress)==0)
    {
    echo ("adresse déjà enregistrée");	
    }
    else
    {
    ...
    }
    ça marche plutôt bien dans les cas suivant:
    - si adresse trouvé pour même personne il m'indique que c'est un doublon
    -si adresse différente, il enregistre

    par contre si j'enregistre une adresse déjà existante mais pour un nom différent il m'indique une erreur sql:

    correspondant à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (strcasecmp(mysql_result($requete,0,2),$adress)==0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 5 in adress.php on line 75
    Enregistrement effectué avec succès !
    et bien sur il m'enregiste quand même l'occurrence

    je comprend bien que cela est du au fait que ma requête sql est vide, mais je sèche sur la résolution

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    Bonjour,
    c'est un travail à faire en amont. Vous devez le faire durant l'enregistrement de la toute première adresse, c'est à vous de vérifier la syntaxe de l'adresse et de la rendre cohérente avec les prochaines insertion et ceci en normalisant l'information.

    Dans le cas où le travail est fait en aval (votre cas), voici un exemple schématique pour vérifier la syntaxe d'une ville et la comparer aux autres :

    Code table UTF-8 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    mysql> SELECT * FROM villes;
    +----------+-----------------------+
    | ville_id | ville_nom             |
    +----------+-----------------------+
    |        1 | Châlons-en-champagne  |
    |        2 | chalons en champagne  |
    |        3 | CHALONS-EN-CHAMPAGNE  |
    +----------+-----------------------+
    3 rows in set (0.00 sec)

    Code script.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
    <?php
     
      $cherche = array('-', ' ');
     
      $ville = str_replace($cherche, '', 'CHALONS-EN-CHAMPAGNE');
     
      $req = "SELECT `ville_nom` "
             ."FROM `villes` "
             ."WHERE REPLACE(REPLACE(`ville_nom`, '-', ' '), ' ', '') LIKE '$ville'";
     
      if
      (
        !mysql_connect('localhost', 'darian', 'pass')  ||  
        !mysql_select_db('base')                      ||
        !$res = mysql_query($req)
      )
      die(mysql_error());
     
      while (list($ville) = mysql_fetch_row($res)) echo $ville.'<br />';
     
    ?>

    Code resultats : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      // le script précédent retourne les valeurs suivantes :
     
      Châlons-en-champagne
      chalons en champagne
      CHALONS-EN-CHAMPAGNE

    C'est exactement le même principe pour les adresses.

    Cordialement,
    DaRiaN.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 148
    Points : 54
    Points
    54
    Par défaut
    ok merci

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

Discussions similaires

  1. SQL comparaison chaines de caractères !=a*
    Par MANELESTI dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/04/2013, 17h49
  2. [SQL] comparaison de chaines, mot par mot
    Par sempire dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/10/2009, 18h12
  3. [SQL] Comparaison de chaines
    Par sempire dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/04/2009, 17h33
  4. [Accentuation] Comparaison de chaine dans une requete sql
    Par valoji dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/10/2006, 17h28
  5. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41

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