SELECT WHERE LIKE

BFH
Eléphant du PHP | 214 Messages

15 juin 2005, 11:18

Bonjour,
j'effectue une suppression dans une base de données. Voici un bout du code :
$query="DELETE FROM report WHERE RHost LIKE '".addslashes($RHost)."%'";//supprime tout les rapports choisit
mysql_query($query)or die(mysql_error());
$RHost contient des nom de lieu, donc si la valeur du champs RHost est similaire à $RHost le rapport est supprimé!

Mon problème:
Supprimer le lieu Syndicat EAU supprimera les rapports
Syndicat EAU,
Syndicat EAU_accueil
Syndicat EAU_entrée Ce qui est bien !

Hors ça va aussi supprimer les rapports:
Syndicat EAU EST_accueil
Syndicat EAU NORD_serveur
Cependant ces rapport ne correspondent pas aux même lieux!

Comment faire pour que le % de ($RHost)."%" soit différent d'un espace??
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

15 juin 2005, 11:21

Utilise les fonctions REGEXP de MySQL
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

15 juin 2005, 11:36

Je comprends pas comment on utilise ces fonctions, c'est pas fautes d'avoir regardé! :oops:
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

ViPHP
pjl
ViPHP | 2119 Messages

15 juin 2005, 11:43

A première vue, ton code me parrait bien dangereux pour un delete.
Si $RHost = "S", ca va te supprimer tous les lieux commencants par un S.

Eléphant du PHP | 128 Messages

15 juin 2005, 11:50

Apparemment tes nom de rapports ont l'air tres formté, si tu peux avoir la garantie que ca restera ainsi, utilise effectivement les expression reguliere comme te l'a conseillé Cyrano

En gros, un expression reguliere permet d'exprimer la structure d'une chaine de caractere grâce a un ensemble de caractere spéciaux, regarde attentivement le site fourni et fait des essais tu devrait pouvoir t'en sortir.
C'est pas moi qui ai volé l'orange !

ViPHP
ViPHP | 1380 Messages

15 juin 2005, 11:53

Comme suggéré par Cyrano, essaye les regex de MySQL.
$RHost = "Syndicat EAU";
$motif = '^'.addslashes($RHost).'[^ ]*$';
$query = "SELECT * FROM report WHERE RHost REGEXP '$motif'";
Il ne prendra que les $RHost suivit de n'importe quel caractère sauf l'espace. On peut affiner si nécessaire.

J'ai mis un SELECT pour tes essais à blanc mais ça marchera aussi avec le DELETE bien sûr.
Modifié en dernier par Ripat le 15 juin 2005, 11:59, modifié 1 fois.
ripat

BFH
Eléphant du PHP | 214 Messages

15 juin 2005, 11:59

Merci, je t'aime tout plein Ripat :love4: :D
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...