IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

update d'array et virgule


Sujet :

PHP & Base de données

  1. #21
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    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.
    Ça à son intérêt pour un champs libre ou autre, mais la c'est clairement une table lié

  2. #22
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    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 ','
    Meuuh en AI à l'INRA
    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)

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    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 :

    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.'\'';
    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 \".

  4. #24
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    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;
    }

Discussions similaires

  1. [PostgreSQL] Select et Update d'array
    Par cyscek dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/06/2012, 11h23
  2. [AC-2003] [SQL] [VBA] UPDATE nombre à virgule
    Par antoinev2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/11/2009, 21h51
  3. je crée un Array mais le premier caractère est une virgule (?)
    Par beegees dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/03/2009, 20h30
  4. Réponses: 3
    Dernier message: 14/12/2005, 15h17
  5. update et virgule
    Par Delph dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/08/2002, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo