Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [Résolu] L'apostrophe ne passe pas pour un enregistrement SQL: escape()/unescape() ? ou bien plus simple ?

Envoyé par : Raphael

Date : 04/12/2006 15:04

Bonjour, j'ai un textbox que j'enregistre dans ma base de données SQLite3 avec le code suivant :

var Notes = $("deck_notes").value;
ydmdecks.do("UPDATE decks SET Notes='"+Notes+"', Updated=DATE('NOW') WHERE Deck_ID='"+decks[this.Deck_Index].ID+"'");

Cela marche bien SAUF SI mon textbox contient des apostrophes. Comment les faire passer ? J'ai 2 pistes :

  • Textree procède apparemment différement de moi pour les variables, à savoir :
var s = db.createStatement("UPDATE notes SET name = ?1, text = ?2, updated_at = DATETIME('NOW') WHERE id = ?3");
s.bindStringParameter(0, this.name);
s.bindStringParameter(1, this.text);
s.bindInt32Parameter(2, this.id);
s.execute();

Mais je ne suis pas à l'aise avec cette gestion des variables "?1" et "?2" donc je ne parviens pas à comprends totalement le code.

  • Faudrait-il utiliser escape() à l'enregistrement et unescape() à l'affichage ? Pour moi, ce serait peut-être compliquer pour rien non ? Car apparemment les autres caractères spéciaux : +* passent bien... Et puis ça me ferait une base de données un peu moche non ?

J'aimerais donc savoir si l'on peut appliquer une bête méthode à ma variable pour faire passer les apostrophes... Ou bien savoir comment je peux adapter mon code avec des variables du type "?1" parce qu'apparemment mon problème d'apostrophe vient du fait que ma syntaxe de requête SQL inclue des apostrophes non ? : Notes='"+Notes+"'

Merci d'avance.

# Re: L'apostrophe ne passe pas pour un enregistrement SQL: escape()/unescape() ? ou bien plus simple ?

Envoyé par : laurentj

Date : 04/12/2006 15:55

c'est si compliqué d'utiliser la méthode replace des strings pour remplacer ' par \' ?

# Re: L'apostrophe ne passe pas pour un enregistrement SQL: escape()/unescape() ? ou bien plus simple ?

Envoyé par : Raphael

Date : 04/12/2006 16:37

Je suis désolé, mais je ne comprends toujours pas. Je me débrouille plus qu'autre chose en programmation. Je suis matheux et je n'ai jamais eu de cours d'informatique plus loin que le DEUG. Je suis donc à peu près auto-didacte et je navigue entre livres, Google, Tutoriaux, Wiki et autres forums pour trouver réponse à mes interrogations.

Et il se trouve que ce sujet, je ne le maitrise pas vraiment. Pour moi, la fonction replace() s'utilise avec RegExp pour par exemple transformer un lien en un lien cliquable non ? Pour remplacer une chaine de caractères par une autre plus généralement.

Là, je ne comprends pas en quoi ça va m'aider en fait ? Il me semble déjà avoir lu quelque chose sur ces "?1" mais je ne retrouve plus où, même après recherche sur le Tutorial PDF et le Wiki.

Peux-tu m'expliquer un peu plus en détails la manière de procéder ? Pourquoi dois-je mettre des " '? " à la place de mes apostrophes ? ça l'échappe ?

J'ai essayé ça :

var reg = new RegExp("'", "g");
var Notes = $("deck_notes").value;
var Notes = Notes.replace(reg,"'?");

Mais ça ne marche pas...

Je suis conscient que ce problème doit sembler ridicule pour un programmeur même moyen, mais bon, c'est vraiment pas ma tasse de thé les caractères spéciaux, les apostrophes et tout...

Encore merci.

# Re: L'apostrophe ne passe pas pour un enregistrement SQL: escape()/unescape() ? ou bien plus simple ?

Envoyé par : thx1138

Date : 06/12/2006 12:02

Utilise la fonction encodeURIComponent()

cela fonctionne très bien

# Re: L'apostrophe ne passe pas pour un enregistrement SQL: escape()/unescape() ? ou bien plus simple ?

Envoyé par : Raphael

Date : 06/12/2006 12:16

Oki, merci de l'info. je note.

En fait, j'ai réussi à résoudre le problème avec replace() mais en doublant les apostrophes, et ça passe bien.

# Re: [Résolu] L'apostrophe ne passe pas pour un enregistrement SQL: escape()/unescape() ? ou bien plus simple ?

Envoyé par : laurentj

Date : 06/12/2006 13:07

mon message est mal passé. je voulais dire remplacer ' par \'

# Re: [Résolu] L'apostrophe ne passe pas pour un enregistrement SQL: escape()/unescape() ? ou bien plus simple ?

Envoyé par : Ner0lph

Date : 14/12/2006 21:15

Ou bien :

Notes.replace(reg,"’");

Donc en remplaçant la quote, ou apostrophe américaine, par une apostrophe typographique française.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.