Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/02/2008, 12h52   #1
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 139
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 139
Points : 18
Points : 18
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
khamett est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 12h59   #2
Membre du Club
 
Avatar de TheEwook
 
Inscription : novembre 2004
Messages : 44
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2004
Messages : 44
Points : 45
Points : 45
Envoyer un message via MSN à TheEwook
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
TheEwook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 14h42   #3
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 139
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 139
Points : 18
Points : 18
merci pour l'info.

je comprend pas tout... faut que je m'y plonge... pour l'instant j'ai donc fait:
Code :
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 :
1
2
 
if (strcasecmp(mysql_result($requete,0,2),$adress)==0)
Code :
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
khamett est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 15h09   #4
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
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 :
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 :
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 :
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.
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 15h49   #5
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 139
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 139
Points : 18
Points : 18
ok merci
khamett est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h39.


 
 
 
 
Partenaires

Hébergement Web