Juste une petite remarque (puisque vous avez pas voulu prendre ma solution , ... c'est pas grave), tous les moteurs de base de données ont leur propre fonction d'echappement:
mysql_real_escape_string pour mysql
pg_escape_string pour postGres
Et encore je suis pas sûr qu'elles protégent des ','
En fait, cela correspond à ce que je voulais faire et ce que m'a conseillé fench avec le caractère de remplacement non ? Parce que tout à l'heure j'ai testé en remplaçant mes virgules par des /;/ , ça marchait très bien. Mais je me disais qu'il y avait surement plus élégant que ça.
Là je viens d'essayer ton code rawsrc. Ca "marche" en partie. Je m'explique :
je rentre test dans la base, j'ai {test}
Puis test1, test2 j'ai {test, "test1, test2"}
mais là, si je rentre test3 j'ai {test, "\"test1, test2\"",test3}
Est-ce normal que les " soit doublé ? Comment puis-je éviter ça ?
J'ai juste fait ça :
EDIT : de plus, j'ai beau relire le code, je ne comprend pas comment cela pourrait marcher. Je ne retrouve jamais le $delim dans mes chaînes (aucun $$). J'ai tenté d'enlever les " à chaque tour de boucle dans le foreach, mais du coup ça enlève ceux censés entouré totalement la valeur. Peut-être devrais-je tenter d'enlever simplement les \".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 while ($row = pg_fetch_array($result)) { $listeusers[] = $row[3]; } $listeusers= pg_array_parse($listeusers[0], $asText = true); $listeusers[] = $listeuserstemp; $delim = '$$'; $escaped = array(); foreach($listeusers as $value) { $escaped[] = $delim.$value.$delim; } $sql = 'ARRAY['.implode(', ', $escaped).']'; $query = 'UPDATE users SET list = '.$sql.' WHERE city=\''.$city.'\'';
Alors alors ... J'ai trouvé la solution (et l'erreur était entre le clavier et la chaise pour changer).
Le code que tu as donné rawsrc est le bon, c'est ma fonction pg_array_parse qui n'allait pas. En effet, je changeait les virgules par des ','. A partir du moment où j'ai enlever ce traitement, ma liste se remplit bien en base, en laissant entre " " chaque valeur.
Je met pour info le code de la fonction pg_array_parse (que j'utilise donc dans ce cas là avec asText = False) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function pg_array_parse($array, $asText = true) { $s = $array; if ($asText) { $s = str_replace("{", "array('", $s); $s = str_replace("}", "')", $s); $s = str_replace(",", "','", $s); } else { $s = str_replace("{", "array(", $s); $s = str_replace("}", ")", $s); } $s = "\$retval = $s;"; eval($s); return $retval; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager