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 :

Récupération données (chaine de caractère) - Décomposition, concaténation ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut Récupération données (chaine de caractère) - Décomposition, concaténation ?
    Bonjour,

    J'ai créé une requête qui se charge de récupérer une chaine de caractères stockée dans ma base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php 
     
    	mysql_connect("localhost", "root", "");
    	mysql_select_db("moduleprevis");
    	$req = mysql_query("SELECT coord FROM coordonnees"); 
    	$resultat = mysql_fetch_array($req); 
    	echo $resultat["coord"];
     
    ?>
    Voici la chaine de caractère récupérée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {soleil1:{left:372,top:124},peunuageux1:{left:392,top:139},mitige1:{left:214,top:175},mitige2:{left:350,top:159}}
    Dans cette chaîne on retrouve plusieurs objets identifiables à partir de 3 éléments :
    - l'id : "soleil1" etc.
    - position left : "214"
    - position top : "175"

    Vous constaterez donc que dans l'exemple ci-dessus, la chaine de caractère comporte les coordonnées de 4 objets (suivant les couleurs).

    Le but finale est de :
    - récupérer l'id pour identifier l'objet correspondant et permettre son affichage en fonction de ses coordonnées

    Je pense qu'il faut, dans un premier temps, décomposer la chaine de caractère afin de "séparer" les objets mais j'avoue ne pas trop savoir où aller. Ainsi, j'espère que quelques personnes pourront me mettre sur la bonne voix car pour l'instant je ne sais pas par où et surtout, comment commencer....

  2. #2
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Bonjour,

    Si les chaines de caractères étaient entre guillemets,
    tu aurais affaire à une chaîne encodée JSON.
    Alors,
    tu n'aurais plus qu'à utiliser la fonction decode_json() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $json = '{"soleil1":{"left":372,"top":124},"peunuageux1":{"left":392,"top":139},"mitige1":{"left":214,"top":175},"mitige2":{"left":350,"top":159}}';
    var_dump(json_decode($json,true));
    Fred

  3. #3
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Essaie d'aller voir de ce côté là : explode()

  4. #4
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par micetf Voir le message
    Bonjour,

    Si les chaines de caractères étaient entre guillemets,
    tu aurais affaire à une chaîne encodée JSON.
    Alors,
    tu n'aurais plus qu'à utiliser la fonction decode_json() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $json = '{"soleil1":{"left":372,"top":124},"peunuageux1":{"left":392,"top":139},"mitige1":{"left":214,"top":175},"mitige2":{"left":350,"top":159}}';
    var_dump(json_decode($json,true));
    Fred
    Merci pour vos réponses !

    Je suis intéressé par la fonction decode_json d'autant plus que j'ai utilisé JSON pour réaliser ma chaine. Je pars d'un script javascript qui copie les valeurs de ses variables, dans des variables php pour pouvoir les stocker en base. (pour comprendre d'avantages : http://www.developpez.net/forums/d82...v/#post4746694)

    Maintenant que l'enregistrement en bdd est géré, je voudrais effectuer l'inverse, à savoir restituer les objets en fonction de leurs coordonnées sauvegardées.

    Donc si je comprend bien, il faut que je m'arrange pour ajouter des guillemets dans ma chaîne (chose très faisable) pour pouvoir utiliser cette fonction ??? et pour la suite ???

  5. #5
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Si tu parviens à ajouter les guillemets,
    voici qui devrait t'éclairer pour la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $json = '{"soleil1":{"left":372,"top":124},"peunuageux1":{"left":392,"top":139},"mitige1":{"left":214,"top":175},"mitige2":{"left":350,"top":159}}';
     
    $tab = json_decode($json,true);
    foreach ($tab as $temps => $pos) {
    	echo "<h1>".$temps."</h1>";
    	echo "<p>Left : ".$pos['left']."</p>";
    	echo "<p>Top : ".$pos['top']."</p>";
    }
    Fred

  6. #6
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Je viens de tester et en effet, ça correspond à ce que je souhaite effectuer. Je vais m'assurer d'ajouter les guillemets qui me permettront d'utiliser cette fonction.

    Je reviendrais vers ce topic une foie que j'aurais eut le temps de tester, et ne manquerait pas de cliquer sur le bouton "résolu" si tel est le cas. Merci pour votre aide !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Pour rajouter les guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $json = preg_replace( '`(\w+)`' , '"$1"' , $json );
    Pourfendeur de singletons en croisade

  8. #8
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Lorsque je met la chaine de caractère en "brut", tout fonctionne nickel :
    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
    16
    17
    18
    <?php 
     
    	mysql_connect("localhost", "root", "");
    	mysql_select_db("moduleprevis");
    	$req = mysql_query("SELECT coord FROM coordonnees"); 		
     
    	$json = "{soleil1:{left:372,top:124},peunuageux1:{left:392,top:139},mitige1:{left:214,top:175},mitige2:{left:350,top:159}}";
     
     	$json = preg_replace( '`(\w+)`' , '"$1"' , $json);
     
    	$tab = json_decode($json,true);
     
    	foreach ($tab as $temps => $pos) {
    		echo "<h1>".$temps."</h1>";
    		echo "<p>Left : ".$pos['left']."</p>";
    		echo "<p>Top : ".$pos['top']."</p>";
    }
    ?>
    Cependant, lorsque je stocke ma chaine de caractère dans la variable JSON, j'obtiens l'erreur suivante :

    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
    16
    <?php 
     
    	mysql_connect("localhost", "root", "");
    	mysql_select_db("moduleprevis");
    	$req = mysql_query("SELECT coord FROM coordonnees"); 		
     
    	$json = $req;	
     	$json = preg_replace( '`(\w+)`' , '"$1"' , $json);	
    	$tab = json_decode($json,true);
     
    	foreach ($tab as $temps => $pos) {
    		echo "<h1>".$temps."</h1>";
    		echo "<p>Left : ".$pos['left']."</p>";
    		echo "<p>Top : ".$pos['top']."</p>";
    }
    ?>
    Erreur retournée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Invalid argument supplied for foreach()
    Je suppose que l'erreur proviens de "$json = $req;" mais je ne sais pas comment la corriger...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    faut fetcher les ressource de retour de mysql_query() pour récupérer leur résultat.

    http://www.php.net/manual/fr/functio...etch-assoc.php

    par exemple.
    Pourfendeur de singletons en croisade

  10. #10
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    faut fetcher les ressource de retour de mysql_query() pour récupérer leur résultat.

    http://www.php.net/manual/fr/functio...etch-assoc.php

    par exemple.
    En effet, ça fonctionne maintenant !

    Voici ma fonction :

    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
    16
    17
    18
    19
    20
    <?php 
     
    	mysql_connect("localhost", "root", "");
    	mysql_select_db("moduleprevis");
    	$result = mysql_query("SELECT coord FROM coordonnees"); 		
     
    	while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
       		printf("%s", $row["coord"]);
    		$json = $row["coord"];
     		$json = preg_replace( '`(\w+)`' , '"$1"' , $json);
    	}	
     
    	$tab = json_decode($json,true);
     
    	foreach ($tab as $temps => $pos) {
    		echo "<h1>".$temps."</h1>";
    		echo "<p>Left : ".$pos['left']."</p>";
    		echo "<p>Top : ".$pos['top']."</p>";
    }
    ?>
    Maintenant que je récupère bien les données de ma bdd, je vais pouvoir passer à l'étape suivante. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Article] Les chaines de caractères : la concaténation de chaines
    Par Le Roux B. dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 06/12/2008, 08h40
  2. récupération de chaine de caractères spéciaux
    Par toine62 dans le forum Langage
    Réponses: 2
    Dernier message: 26/11/2007, 16h58
  3. Réponses: 5
    Dernier message: 31/05/2007, 19h35
  4. Type de données chaines de caractères
    Par krest dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 26/07/2005, 17h06

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