Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 11/05/2011, 18h46   #1
Futur Membre du Club
 
Inscription : novembre 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 148
Points : 18
Points : 18
Par défaut Guillemets pénibles lors de suppression

Bonsoir à tous,

J'ai le code suivant :

Code :
1
2
3
4
$r4=mysql_query("SELECT pseudo FROM users WHERE mort=1 AND timemort<=0");
while ($row2 = mysql_fetch_array($r4)){
$pseudo3=$row2['pseudo'];
$r5=mysql_query("DELETE FROM users WHERE pseudo='".$pseudo3."'");
Pour effacer les utilisateurs trop anciens de ma BDD.
Or, cela ne fonctionne pas pour les utilisateurs dont le pseudo contient un guillement simple : '

Comment faire pour contourner le souci ?

Merci par avance,
Antoine
ingeniomatique est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 19h08   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
mysql_real_escape_string
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 19h20   #3
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Et pourquoi pas
Code sql :
DELETE FROM users WHERE mort=1 AND timemort<=0
?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 19h59   #4
Futur Membre du Club
 
Inscription : novembre 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 148
Points : 18
Points : 18
Sabotage, impossible car j'ai toute une liste de requêtes qui suivent Mais ça aurait été trop beau !!!

J'ai donc testé avec :

Code :
$r5=mysql_query("DELETE FROM users WHERE pseudo=".$pseudo3.",mysql_real_escape_string($pseudo3)");
Sans succès.

Merci par avance de votre aide.
ingeniomatique est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 20h07   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
ça aurait été trop beau
Ba non ce n'est pas trop beau, même si as d'autres traitement qui nécessitent d'être fait utilisateur par utilisateur (et encore il faut encore une fois être sur que c'est pertinent), rien ne t'empêche d'au moins faire le DELETE d'un seul coup.

Pour le mysql_real_escape_string(), je ne sais pas d'ou tu nous a sorti cette idée de le placer à la fin séparé par une virgule.
Il est de toute façon plus simple et efficace de prendre comme référence l'id de l'utilisateur et non son pseudo.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 21h50   #6
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Bah y'a peut-être pas d'id dans sa table. Si pseudo est unique il peut servir d'identifiant.

@ingeniomatique
Mais bon c'est certain que plutôt que de sélectionner une condition "WHERE mort=1 AND timemort<=0" pour rechercher ensuite le pseudo et pour enfin effacer les lignes correspondantes, autant effacer directement les lignes sur la condition et donc DELETE FROM users WHERE mort=1 AND timemort<=0 devrait suffire pour effacer les lignes ciblées.

Sinon avec mysql_real_escapre_string on devrait écrire :
Code :
$r5=mysql_query("DELETE FROM users WHERE pseudo='".mysql_real_escape_string($pseudo3)."'");
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 22h32   #7
Futur Membre du Club
 
Inscription : novembre 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 148
Points : 18
Points : 18
Merci beaucoup. Cela fonctionne. Une bonne astuce à garder au chaud !!!


Non non non, je vous assure, la requête proposée avant ne me servait à rien toute seule. Car il y avait ensuite toute une liste de DELETE sur d'autres tables, qui ne contiennent pas le champ MORT ou TIMEMORT. Donc la question restait entière.

Merci de votre aide et très bonne fin de soirée (début pour d'autres).
ingeniomatique est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h23.


 
 
 
 
Partenaires

Hébergement Web