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 :

Y-a-t-il un moyen élégant de sauver une array dans MYSQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut Y-a-t-il un moyen élégant de sauver une array dans MYSQL
    Bonjour à tous,

    Je dois sauvé deux variable dans ma base de donnée.
    Le premier est
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $collection['geometry']['type'];
    echo $collection['geometry']['type']
    // affiche : polygon

    Le deuxième c'est un array qui contient des coordonée GPS et qui sont les points du polygon
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $collection['geometry']['coordinates'][0]
    [
    [-1.1370849609375002,52.13011607781289],
    [-0.9338378906250001,51.64870258356996],
    [-0.24169921875000003,52.16382422414709],
    [-1.1370849609375002,52.13011607781289]
    ]
    si je fais un foreach, j'ai ceci
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($collection['geometry']['coordinates'][0] as $k => $coordinates)
    	{
    		echo "[".$coordinates[0].",".$coordinates[1]."],";
    	}
    [-1.1370849609375002,52.13011607781289],
    [-0.9338378906250001,51.64870258356996],
    [-0.24169921875000003,52.16382422414709],
    [-1.1370849609375002,52.13011607781289,
    Voilà, le truc c'est que dans ma base de donnée je dois avoir ce text
    [[-1.1370849609375002,52.13011607781289],[-0.9338378906250001,51.64870258356996],[-0.24169921875000003,52.16382422414709], [-1.1370849609375002,52.13011607781289]]
    Ce qui équivaudrait à faire ceci:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    echo "[";
    foreach($collection['geometry']['coordinates'][0] as $k => $coordinates)
    	{
    		echo "[".$coordinates[0].",".$coordinates[1]."],";
    	}
    echo "[";
    A savoir que ci-dessus, il y aura un problème avec une virgule de trop, lors du dernier passe dans la boucle.

    Je me demandais s'il n'y avait pas une fonction qui me permetrait de traiter ceci

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $collection['geometry']['coordinates'][0]
    pour avoir ce texte à enregistrer
    [[-1.1370849609375002,52.13011607781289],[-0.9338378906250001,51.64870258356996],[-0.24169921875000003,52.16382422414709], [-1.1370849609375002,52.13011607781289]]
    [/QUOTE]
    sans avoir à bricoler a loop foreach.

    Voci mon code en entier
    Code PHP : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    	include_once('db_config.inc.php');
     
    	$cfg_db_host = $host;
    	$cfg_db_db = $base;
    	$cfg_db_user = $user;
    	$cfg_db_password = $password;
     
     
    	if(!isset($_POST['data'])) {
    		json_encode(array("Error"=>'saveGeofencesssss', "msg" => "No Data" ));
    	}else
    	{
    		$data = $_POST['data'];
    	}
     
    	$collection = json_decode($data,true);
     
     
    	/*
    	echo $collection['geometry']['type'];
    	echo "|";
    
    	foreach($collection['geometry']['coordinates'][0] as $k => $coordinates)
    	{
    		echo "[".$coordinates[0].",".$coordinates[1]."],";
    	}
    
    */
    	try{
     
     	   $conn = new PDO('mysql:host='.$cfg_db_host.';charset=utf8;dbname='.$cfg_db_db, $cfg_db_user , $cfg_db_password);
     
     
    	}
    	catch (Exception   $e){echo json_encode(array("retour"=>'Erreur de connexion à la bdd', "e" => $e )); die();}
     
    	try{
     
    		$req = $conn->prepare('INSERT INTO geofences(devise_id, type, coordinates) VALUES(:devise_id, :type, :coordinates)');
    		$req->execute(array(
     
    		    'devise_id' => 1,
        		'type' => $collection['geometry']['type'],
        		'coordinates' => $collection['geometry']['coordinates'][0] // Ici il faudrait avoir le contenu et la tructure en text comme ceci:
    //'coordinate'=>'[[-1.1370849609375002,52.13011607781289],[-0.9338378906250001,51.64870258356996],[-0.24169921875000003,52.16382422414709], [-1.1370849609375002,52.13011607781289]]'
        	));
        	$count = $req->rowCount();
     
    	}
      	catch (Exception   $e){echo json_encode(array("retour"=>'Erreurrrr update saveGeofences', "e" => $e )); die();}
     
     
    	echo json_encode($count);
     
    ?>
    voyez-vous?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Voilà, le truc c'est que dans ma base de donnée je dois avoir ce text
    Pourquoi tu "dois" ?
    Quelles sont tes contraintes d'obligation ?

    Pourquoi tu ne veux pas enregistrer la chaine JSON du tableau ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Je vois pas ce que tu veux dire.

    mon $data contient ceci (avant json_decode())
    {"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-1.5875244140625,51.71681946274875],[-1.8566894531250002,51.172455303299],[-1.3018798828125002,51.64188525876834],[-1.1370849609375002,51.944264879028765],[-1.5875244140625,51.71681946274875]]]}}
    et j'ai besoin de ceci
    [[-1.5875244140625,51.716819462749],[-1.856689453125,51.172455303299],[-1.3018798828125,51.641885258768],[-1.1370849609375,51.944264879029],[-1.5875244140625,51.716819462749]]
    Donc je dois loopé data pour avoir ce que je dois sauver.
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu n'as pas répondu : pourquoi tu as besoin spécifiquement de ça ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Ben pour être honnete, je ne sais pas quoi répondre.

    Le format geojson est le suivant
    {
    "type":"FeatureCollection",
    "features":[
    {
    "id":1,
    "type":"Feature",
    "properties":{},
    "geometry":{
    "type":"Polygon",
    "coordinates":[
    [
    [6.146185398101807,46.447689601949826],
    [6.146475076675416,46.44726084421887],
    [6.1472368240356445,46.44776352535544],
    [6.1466360092163095,46.447833752497885],
    [6.146185398101807,46.447689601949826]
    ]
    ]
    }
    },
    {
    "id":"id",
    "type":"Feature",
    "properties":{},
    "geometry":{
    "type":"Polygon",
    "coordinates":[
    [
    [6.146185398101807,46.447689601949826],
    [6.146475076675416,46.44726084421887],
    [6.1472368240356445,46.44776352535544],
    [6.1466360092163095,46.447833752497885],
    [6.146185398101807,46.447689601949826]
    ]
    ]
    }
    }
    ]
    }
    Etant donné que je veux sauvé mes polygone, dans ma base de donné j'ai un champ 'coordinates' et je pensais bien de sauver. Surtotu que ca fait mion d'enregistrements.
    [
    [6.146185398101807,46.447689601949826],
    [6.146475076675416,46.44726084421887],
    [6.1472368240356445,46.44776352535544],
    [6.1466360092163095,46.447833752497885],
    [6.146185398101807,46.447689601949826]
    ]
    J'utilise la librairie leaflet et je n'ai pas encore fait le code, qui va lire la base de donnée pour extraire les coordinées de mon/mes polygon/s.
    Je pensais faire ainsi, et reconstruire mon format voulu par geojson.

    Etant donné que c'est la premeire fois que je fais ce truc, peut etre que je serai amené à modifier mon enregistrement, mais je ne pense pas etre trop faut.
    Au pire des cas, je modifierai le code qui enregistre, après faudra juste corrigé...

    Et puisce que chaque enregistrement dans ma base de donnée, dans la table 'geofences', il n'y aura que de 'polygons' ou des 'circle', chaque enregistrement correspondra a un polygon ou a un circle avec le type qui changera. Il me semblait donc plus logique d'enregistrer que ceci pour un polygon
    [
    [6.146185398101807,46.447689601949826],
    [6.146475076675416,46.44726084421887],
    [6.1472368240356445,46.44776352535544],
    [6.1466360092163095,46.447833752497885],
    [6.146185398101807,46.447689601949826]
    ]
    J'espère avoir répondu à ta question?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Surtotu que ca fait mion d'enregistrements
    Ca c'est une mauvaise raison. Une base de données c'est fait pour gérer des millions de lignes.

    Il est à mon avis plus judicieux d'avoir deux tables , une pour stocker les informations de ton polygon et une autre pour stocker les coordonées :

    Polygon (id,type, ...)
    Coord(lat,long,id_polygon) => il peut être intéressant d'ajouter un ordre ou un id pour que les coordonnées soit toujours récupérer dans le même ordre.

    Ne reste alors plus que à reconstruire ta chaine une fois que tu as récupérer toutes les coordonnées.
    Stocker une chaine formatée parce que tu en as besoin en sortie aujourd'hui est une erreur. Que se passe t'il si demain tu change de librairie et que le formatage change ? Tu refais toutes ta base ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    pour moi, tu te poses la mauvaise question.

    Pour répondre à la question :
    • "comment enregistrer les données dans la BdD ?"


    il faut d'abord se poser la question :
    • "comment seront traitées les infos récupérées de la BdD ?"

    Ce n'est pas le tout de les enregistrer.
    Il faut être en mesure de les récupérer et de les traiter (facilement).

    Autrement dit : il faut y REFLECHIR sérieusement (au lieu de bidouiller du code).

    Grunk donne une bonne piste.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/01/2008, 21h07
  2. Moyen élégant pour faire un calcul glissant
    Par _moebius_ dans le forum MATLAB
    Réponses: 7
    Dernier message: 14/06/2007, 08h48
  3. Réponses: 4
    Dernier message: 10/11/2006, 10h55
  4. Réponses: 4
    Dernier message: 02/06/2006, 15h41
  5. [Ergonomie] Moyen pour saisir une heure dans une page web ?
    Par mic79 dans le forum Webdesign & Ergonomie
    Réponses: 7
    Dernier message: 16/12/2005, 14h03

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