[résolu] Insérer dans sql un enregistrement avec un '

  • Auteur de la discussion Auteur de la discussion OTP
  • Date de début Date de début
WRInaute accro
Bonjour,

Je n'arrive pas à faire un :

Code:
INSERT INTO rss_item (id, id_flux, titre, lien, date, texte) VALUES ('1', '$id_du_flux', '$row[0]', '$row[1]', '$row[2]', '$row[3]')";

Parce que $row[3] contient des ' .

Comment puis-je m'en sortir ?

Merci d'avance,

Michaël
 
WRInaute accro
Merci.
Du temps que j'y suis et que je tiens un pro, mes caractères accentués font ''tout bizarre'' une fois inséré dans la base. Comment faire ?

Michaël
 
WRInaute accro
tout bizare comment ?

as tu défini le type de jeux de caractère utilisé dans ta base ?

un pro, un pro ~ ... vaste affaire a discuter au coin du feu.
 
WRInaute accro
J'obtiens dans la base, par exemple, é au lieu de é.

Pas défini de jeux de caractères (je ne savais pas que ça existait).

Et en plus ce que je stocke risque de ne pas être codé de la même façon d'un enregistrement à l'autre !
 
WRInaute occasionnel
Il faut que ta page utilise le même charset (définit par doctype) que ta base (tu peux le voir sur la page d'accueil de phpmyadmin).

Si ce n'est pas le cas tu peux forcer le charset avec
Code:
SET NAMES 'utf8' ou SET NAMES 'latin1'
à faire dès l'ouverture de ta connexion à mysql...
 
WRInaute accro
dans phpmyadmin sélectionne la table concernée clique sur Opérations (en haut) et de la tu peux jouer avec Interclassement

visiblement on dirait que tes caractères sont en utf8 alors que le type de caractère manipulé par ta page doit être de l'iso je sais pas quoi.
 
WRInaute impliqué
zeb a dit:
addslashes($row[3]) et stripslashes($data) a la lecture il me semble.
Il me semble (enfin j'en suis certain) qu'il vaut mieux s'orienter vers du mysql_real_escape_string($row[3]) lors de l'insertion et rien lors de la lecture (ou un htmlentities).
 
WRInaute accro
mysql_real_escape_string() pour echapper les caractères génant l'insertion... moins de manips (pas de removeslash à la lecture)
 
WRInaute discret
Re: Insérer dans sql un enregistrement avec un '

Code:
INSERT INTO rss_item (id, id_flux, titre, lien, date, texte) VALUES ('1', '$id_du_flux', '$row[0]', '$row[1]', '$row[2]', '$row[3]')";

Il n'y a pas besoin d'une fonction mysql, il suffit simplement de doubler le caractère a protéger...

:D
 
WRInaute accro
Re: Insérer dans sql un enregistrement avec un '

Leguerinos a dit:
Il n'y a pas besoin d'une fonction mysql, il suffit simplement de doubler le caractère a protéger...

Ce que veut dire ?
 
WRInaute discret
Si tu souhaites inserer le message suivant :

"C'est super" il faudra inserer "C''est super" avec deux quotes au lieu d'un seul
 
WRInaute accro
Pour la simple quote, c'est résolu.
Reste le problème de mes caractères accentués...
 
WRInaute passionné
Pas sûr que si tu remplace dans la chaine ' par \' elle ne soit pas stocké tel quel dans la base de données... Bref, sur ce coup, rien ne vaut un petit str_replace() AMHA.
 
WRInaute impliqué
BadProcESs a dit:
Pas sûr que si tu remplace dans la chaine ' par \' elle ne soit pas stocké tel quel dans la base de données... Bref, sur ce coup, rien ne vaut un petit str_replace() AMHA.
Ce n'est pas sûr mais certain par contre.

Donc pour être sur que cela fonctionne partout, il faut passer par un mysql_real_escape_string().

Car il y a d'autres caractères à échapper comme NULL, \x00, \n, \r, \, ', " et \x1a.
 
WRInaute occasionnel
Re: Insérer dans sql un enregistrement avec un '

Leguerinos a dit:
Code:
INSERT INTO rss_item (id, id_flux, titre, lien, date, texte) VALUES ('1', '$id_du_flux', '$row[0]', '$row[1]', '$row[2]', '$row[3]')";

Il n'y a pas besoin d'une fonction mysql, il suffit simplement de doubler le caractère a protéger...

:D

pas bien compris non plus...

petit-ourson a dit:
Donc pour être sur que cela fonctionne partout, il faut passer par un mysql_real_escape_string().

j'suis du même avis

Onthisplanet a dit:
Pour la simple quote, c'est résolu.
Reste le problème de mes caractères accentués...

Ton site est visiblement en ISO-8859-1 et ta bdd en UTF-8, normalement en mettant une requête:

Code:
SET NAMES 'latin1'

après l'ouverture de chaque connexion cela va forcer les entrées/sorties avec mysql en ISO-8859-1...
 
WRInaute accro
Re: Insérer dans sql un enregistrement avec un '

biscuit a dit:
Code:
SET NAMES 'latin1'

après l'ouverture de chaque connexion cela va forcer les entrées/sorties avec mysql en ISO-8859-1...

Comme ça ?
Code:
$query="SET NAMES 'latin1'";
@mysql_query($query,$db);
 
WRInaute accro
Même chose.
Je n'ai pas le problème sur tous les flux RSS, seulement sur certains.
La solution est peut-être là.
 
WRInaute occasionnel
encore damned... le problème avec ces charsets, c'est quand ça commence à me*douiller... ben c'est galère (je suis passé par la semaine dernière... 3 jours pour trouver!)

Comment est-ce que tu déclare tes fichiers, et tes flux ?

Ta bdd utilise quel charset ?
Code:
SHOW CHARACTER SET
(si mes souvenirs sont bons)
 
WRInaute accro
Pour la commande sql :

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER SET' at line 1

:!:

Que veux tu dire par :

Comment est-ce que tu déclare tes fichiers, et tes flux ?

:?:

Nota : j'y connais rien à ça et si tu en as marre, laisser tomber !
 
WRInaute occasionnel
pas de prob... (et moi qui avait cru que j'en avais terminé avec ce charsets de ...)
Alors en tu devrais avoir dans tes fichiers html un
Code:
<meta http-equiv="Content-Type" content="text/html; charset=XXX" />

où XXX = ISO-8859-1 ou UTF-8 (pour les plus courants)

pour ton fichier XML tu dois avoir qqch de similaire (là c'est moi qui suis nul... je commence le XML demain :D ) avec "charset" quelque part... j'imagine !?

Pour ta base de donnée, c'est marrant SHOW CHARACTER SET passe bien... une combine de version de mysql !?!? Est-ce que sur la page d'accueil de phpmyadmin il y a "Interclassement pour la connecion mySQL", tu as quoi dans le select ?
 
WRInaute accro
re, j'ai du mal a me rendre compte ou tu as ton problème de caractères spéciaux mais :

si c'est sur un flux rss que tu affiche il y a moyen de le bidouiller en amont de l'affichage / utilisation, pareil pour une insertion en base :

utf8_decode() décode la chaîne data, en supposant qu'elle est au format UTF-8, et la convertit au format ISO-8859-1

utf8_encode() code la chaîne data au format UTF-8, et retourne la version codée.
 
WRInaute accro
Je vais essayer de répondre à tous :

@Biscuit : non, je n'ai pas de fichier. J'ouvre un flux RSS qui n'est pas chez moi pour remplir une table sql. C'est dans phpmyadmin que je vois ces pâtés. Dans un des flux à problème, j'ai : <?xml version="1.0" encoding="UTF-8"?>. Enfin pour le SHOW CHARACTER SET, j'ai reessayé et ça ne marche pas.

@Zeb : mon souci est que j'ai différents flux pas toujours codés de la même façon. Il faudrait passer par un test avant de ne décoder que le nécessaire, je pense. Je vais tester cette voie.

Michaël
 
WRInaute accro
Résolu grâce au utf8_decode() et à un champ supplémentaire dans la base des flux RSS spécifiant le codage.

Merci à tous.
 
Discussions similaires
Haut