|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |||
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 78 ![]() |
Bonjour à tous !
J'étais venu il y a quelques temps parce que je ne comprenais pas comment mettre à jour un array dans ma table, et on m'avait fait part d'une solution : Code :
Sauf que depuis, je suis passé à une autre table, qui contient elle aussi un array, et là les valeurs dedans peuvent contenir des virgules. Du coup, je n'ai pas le résultats que je voudrais : Citation:
|
|||
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Said ELMOUADINDéveloppeur Web Inscription : mai 2012 Messages : 57 ![]() |
salut,
tu change le separateur |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Chercheur en informatique Inscription : mai 2002 Messages : 2 346 ![]() |
Ca marchera pas puisque il faut absolument des virgules pour la requête ...
Il faut donc que tu échapes les , contenu dans ton tableau, regardes dans les str_replace ...
__________________
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend} fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran) |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 78 ![]() |
Donc que j'utilise str_replace, pour mettre un caractère que les utilisateurs n'iront pas mettre normalement dans cette chaîne là, c'est ça ?
|
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Chercheur en informatique Inscription : mai 2002 Messages : 2 346 ![]() |
J'essayerais 2 solutions:
1) Remplacer les , qui sont dans les $listeUsers[i] par un $listeUsers[i] = str_replace(",", "\,", $listeUsers[i]); dans une boucle. Puis dans l'autre sens quand tu liras la base. 2) Regarder une fonction qui échape les , dans ce cas là
__________________
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend} fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran) |
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
Faut faire une table lié c'est de la bidouille ce que tu fais
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé
![]() Chercheur en informatique Inscription : mai 2002 Messages : 2 346 ![]() |
Et donc deuxième solution, revenir comme avant une boucle sur le nbr d'éléments et de la concaténation Code :
__________________
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend} fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran) |
||
|
|
00
|
|
|
#8 | ||
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 78 ![]() |
Hm, je vais surement passer pour un inculte, mais je ne vois pas ce que tu entends par table liée ...
Là j'ai testé ça : Code :
|
||
|
|
00
|
|
|
#9 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
Citation:
list : id, element, user_id
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé
![]() Chercheur en informatique Inscription : mai 2002 Messages : 2 346 ![]() |
Oui en fait je pense que tu devrait plutôt faire la concaténation que ceci:
Code :
__________________
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend} fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran) |
||
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 78 ![]() |
j'ai un doute sur ta proposition, c'est un contre exemple que tu donnes, ou tu as mis un "que" à la place d'un "comme" ? Parce que là c'est pas clair ^^
|
|
|
00
|
|
|
#12 | |||
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|||
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 78 ![]() |
J'ai essayé votre proposition, avec des ' . Mais dans la base, cela apparait comme {test, test1, test2} là où j'aurai voulu {"test, test1, test2"}. Je n'ai pas de moyen de regrouper après coup.
J'ai tenté de changer les ' par des ", j'ai à peu près le résultat voulu, sauf que le problème vient maintenant lors de la récupération. Si j'ai par exemple en base : {test, "test1, test2"} je récupère ces valeurs, je veux en ajouter une, il me concatène de cette manière : {"test", ""test1, test2"", "test3"} Il faut que je teste pour voir si j'ai déjà des " ou non autour de ma valeur ... |
|
|
00
|
|
|
#14 | ||
|
Expert Confirmé
![]() Chercheur en informatique Inscription : mai 2002 Messages : 2 346 ![]() |
Citation:
'contre exemple' pas compris ... J'utilise le for à la place du foreach car il faut éviter la dernière ',' nous aurons pu utiliser un while aussi. Citation:
__________________
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend} fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran) |
||
|
|
00
|
|
|
#15 | ||||
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
Citation:
Citation:
Code :
for($te=0, $l = count($listusers); $te < $; $te++) Code :
__________________
http://blog.stealth35.com/ |
||||
|
|
00
|
|
|
#16 |
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 78 ![]() |
Avec ta solution stealth35, j'ai une erreur de syntaxe lors du query :
Code :
Query failed: ERREUR: erreur de syntaxe sur ou près de « test » LINE 1: UPDATE users SET list = '{'test','test1,test2'}' WH... |
|
|
00
|
|
|
#17 |
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
enlève les {}, faut aussi echappe les ' je pense, mais bon pourquoi tu fait pas un vrai schéma ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#18 | |
|
Expert Confirmé
![]() Chercheur en informatique Inscription : mai 2002 Messages : 2 346 ![]() |
Citation:
Pour le reste, je sais pas si tout le monde est sur la même longueur d'onde Tu pourais pas nous donner ton dernier code pour cette affaire (que ce soit la solution bidouillée ou celle non bidouillée ) histoire de finir, merci
__________________
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend} fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran) |
|
|
|
00
|
|
|
#19 | ||
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 78 ![]() |
Voilà où j'en suis :
Code :
Cette table ne me sert qu'à ça, avoir mes listes d'utilisateurs. Je ne sais pas comment faire comme tu disais avec une table liée, mais si on m'explique je veux bien tenter, moi je cherchais sur cette méthode parce que je ne sais pas faire autrement |
||
|
|
00
|
|
|
#20 | ||
![]() ![]() |
Bonjour,
@stealth Utiliser un champ Postgres ARRAY, voire un HSTORE n'est pas de la bidouille. Ce type de champ ont leur utilité crois-moi. @cyscek Pour formater ton ARRAY pour le sql, il te suffit d'utiliser l'échappement des string de Postgres sur chaque valeur et ensuite tu concatènes les valeurs échappées avec une virgule pour séparateur : Allez cela donnerait quelque chose comme ça : Code :
Enfin, saches que le délimitateur de string est une des seule chose sensible à la casse sous Postgres. Et n'oublies pas une chose essentielle : ne jamais utiliser PDO avec ce type de champ.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||
|
00
|
Copyright © 2000-2013 - www.developpez.com