[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
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
 
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
 
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.
 
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 !
 
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...
 
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.
 
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).
 
mysql_real_escape_string() pour echapper les caractères génant l'insertion... moins de manips (pas de removeslash à la lecture)
 
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
 
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 ?
 
Si tu souhaites inserer le message suivant :

"C'est super" il faudra inserer "C''est super" avec deux quotes au lieu d'un seul
 
Pour la simple quote, c'est résolu.
Reste le problème de mes caractères accentués...
 
Oui ce sont deux simples quote je le sait, c'est juste le nom de ma petite fonction qui fait cela dans mes scripts ;)
 
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.
 
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.
 
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...
 
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);
 
Même chose.
Je n'ai pas le problème sur tous les flux RSS, seulement sur certains.
La solution est peut-être là.
 
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)
 
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 !
 
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 ?
 
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.
 
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
 
Résolu grâce au utf8_decode() et à un champ supplémentaire dans la base des flux RSS spécifiant le codage.

Merci à tous.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut