Recherche Téléphone

Eléphanteau du PHP | 11 Messages

25 nov. 2013, 17:58

Bonjour à tous,
Savez vous comment faire pour lancer une recherche de numéro de téléphone sur différents formats?

exemple :
- je cherche : 01 00 00 00 00
ou : 0100000000
ou : 01.00.00.00.00

Merci pour votre aide.

dans ma base je lance la recherche comme ça :
telephone  like '%".$recherche."%'

Mammouth du PHP | 2278 Messages

25 nov. 2013, 21:30

je crains qu'il faille passer par les expressions régulières
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

25 nov. 2013, 22:12

Le plus simple serait de détecter le format rentré par l'utilisateur puis de le convertir vers le format que tu utilises dans ta base de données.
Ainsi l'opérateur like pourrait être utilisé.

Eléphanteau du PHP | 11 Messages

25 nov. 2013, 23:40

Ah ok.
Merci pour vos réponses et votre aide.

Comment on fait pour détecter et dire à $recherche de convertir?
:-(

ViPHP
xTG
ViPHP | 7331 Messages

26 nov. 2013, 09:14

Tu peux vérifier le format d'une chaîne avec une expression régulière.
Ou bien plus primairement en recherchant les caractères qui distinguent ta chaîne d'une autre.

Pour 03.12.25.21.20 tu sais que tu auras toujours les points au même indice et donc tu peux les vérifier un à un.
C'est le même principe avec les espaces.

Ou même encore tu peux faire un explode de ta chaîne sur le caractère de séparation et vérifier que tu as bien le bon nombre d'index dans l'array construit. Et la conversion est super simple du coup avec un implode pour reformer une chaîne à injecter dans ta requête.

Mais le plus propre reste tout de même les regex.

Mammouth du PHP | 2278 Messages

26 nov. 2013, 10:21

peut-être un simple str_replace avec comme premier paramètre un tableau de tous les séparateurs imaginables, et comme deuxième un tableau du séparateur que tu utilises.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

26 nov. 2013, 14:31

C'est une bonne idée je plussoie.
Cela doit être plus optimisé que de passer par des explode/implode.

Eléphanteau du PHP | 11 Messages

26 nov. 2013, 17:00

Merci pour votre aide...
J'ai déjà entendu du str_replace par contre je ne sais pas comment cela se construit pour la recherche.
Pour un str_replacve simple oui mais dans mon cas là... je ne sais pas...

dans ma base les tél peuvent être enregistré soit 01 00 00 00 00 soit 0100000000 ou soit 01.00.00.00.00 idem pour la recherche.

Merci pour votre aide

ViPHP
xTG
ViPHP | 7331 Messages

26 nov. 2013, 19:15

Pour traiter ton cas il faut que tu n'ai qu'un seul format dans ta base de données.
Donc il te faut convertir ceux qui ne sont pas dans le format que tu veux utiliser avant de penser à faire un script de recherche. ;)

Mammouth du PHP | 2278 Messages

26 nov. 2013, 20:53

par exemple:
$z = str_replace(["-", " ",":"], "/", $chaine);
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 11 Messages

26 nov. 2013, 23:34

ok merci.
voici ce que j'ai fait :
if($_GET['type_recherche'] = "telephone") {
$tel = array(" ", "-", ".", "");
$replace = array(" "," "," ","");
$recherche = str_replace($tel, $replace, $_GET['recherche']);
}
il converti bien mais ne fait pas exactement ce que je souhaite... :-(

j'aimerai qu'il comprenne que dans ma base il peut être enregistré des numéros comme 01 00 00 00 00 ou 01.00.00.00.00 ou 0100000000 donc que la recherche se fasse sur ça quoi que l'on tape

Eléphant du PHP | 170 Messages

26 nov. 2013, 23:57

Pour traiter ton cas il faut que tu n'ai qu'un seul format dans ta base de données.
Donc il te faut convertir ceux qui ne sont pas dans le format que tu veux utiliser avant de penser à faire un script de recherche. ;)
Tu oublies tout le reste ... :)

(si tu ne peux pas le faire à la main, il faudra faire un programme qui le fera à ta place)

Eléphanteau du PHP | 11 Messages

27 nov. 2013, 00:03

D'accord c'est bien ce qu'il me semblait...
Comment faire dans ce cas pour obliger une écriture de format dans la base lorsque l'on envoie la requête ?
Exemple: je tape 0100000000 mais dans ma base ça sera 01 00 00 00 00

Et deuxième chose comment convertir les numéros déjà enregistres dans la base...?

Eléphant du PHP | 170 Messages

27 nov. 2013, 00:26

Exemple: je tape 0100000000 mais dans ma base ça sera 01 00 00 00 00
[AMHA] il vaudrait mieux enregistrer au format 0100000000

Pour l'enregistrement, tu supprimes tout ce qui n'est pas chiffres :
<?php

$numero = '01.00.00.00.00';  // ou ce que tu veux comme séparateur

echo preg_replace('/[^\d]/', '', $numero);

?>
Et deuxième chose comment convertir les numéros déjà enregistres dans la base...?
tu connais la commande "set" ?

edit : "UPDATE" :)

Eléphanteau du PHP | 11 Messages

27 nov. 2013, 00:57

Mdr oui.
Mais faire un update global de la base et non donnée par donnée...