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 :

Boucle pour une requête d'insertion


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Par défaut Boucle pour une requête d'insertion
    Bonjour

    je suis bloqué face à cette boucle permettant d'inserer des données via un fichier xml selon leur type

    le fichier xml est comme ç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
    16
    17
    18
    19
    20
    21
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <MAP name="" isArray="true">
        <MAP name="__index__value__0" isArray="false">
            <TIMESTAMP name="dateupload">2010-01-00T00:00:00.000</TIMESTAMP>
            <STR name="encoding">flv</STR>
            <STR name="filename">file_0.flv</STR>
            <STR name="lastseen">USA</STR>
            <UINT32 name="mediaId">0</UINT32>
            <STR name="owner">JOHN</STR>
            <UINT32 name="size">0</UINT32>
        </MAP>
        <MAP name="__index__value__1" isArray="false">
            <TIMESTAMP name="dateupload">2010-01-01T00:00:01.000</TIMESTAMP>
            <STR name="encoding">mp4</STR>
            <STR name="filename">file_1.flv</STR>
            <STR name="lastseen">USA</STR>
            <UINT32 name="mediaId">1</UINT32>
            <STR name="owner">PIERRE</STR>
            <UINT32 name="size">11</UINT32>
        </MAP>
    </MAP>
    ma table est comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    create table donnees
    (
    	id bigserial not null primary key,
    	event_id bigint not null references events(id),
    	attribute_id integer not null references event_attribute_types(id),
    	bool_value boolean null,
    	integer_value integer null,
    	double_value real null,
    	timestamp_value timestamp without time zone null,
    	text_value text null
    );

    je voudrrais pouvoir inserer les données dans la table selon leur type c'est a dire le type timestamp du fichier xml dans timestamp_value etc etc

    j'ai fait comme ça mais sans succès

    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
    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
    public function SaveAttributeValue($eventId,$attributid)
       {
       		$connect = $this->OpenPgsqlConnect();
    		$xmlParsed = $this->LoadXml("file.xml");
    		foreach($xmlParsed as $val)
    		{
    			$tabSTR = array(); 
    			$tabTIMESTP = array();
    			$tabINT = array();
    			foreach($val->STR as $valeur)
    			{
    				$tabSTR[] = strval($valeur);
    			}
    			foreach($val->TIMESTAMP as $valeur)
    			{
    				$tabTIMESTP[] = strval($valeur);
    			}
    			foreach($val->UINT32 as $valeur)
    			{
    				$tabINT[] = strval($valeur);
    			}
    		}
     
    	    $sql = "INSERT INTO event_attributes (event_id,attribute_id,bool_value,integer_value,double_value,timestamp_value,text_value) VALUES(?,?,?,?,?,?,?)";
    		$stmt = $connect->prepared($sql);
    		for($i=0;$i<count($tabINT);$i++) 
    		{
                 for($j=0;$j<count($tabTIMESTP);$j++)
                 {
    				for ($k=0;$k<count($tabSTR);$k++)
    				{
    	             	try 
    					{
    						$connect->beginTransaction();
    						//Insert the data in the strings table
    						$stmt->execute(array($eventId,$attributid,NULL,$tabINT[$i],NULL,$tabTIMESTP[$j],$tabSTR[$k]));
    						$connect->commit();
     
    						//return the last insert id for each insertion
    						$last = $connect->pgsqlLastInsertId($sql,$test);
    				        $LastInsertIdEventType[]=$last;	
    					} catch(PDOException $e) {
    						$connect->rollback();
    				        echo 'Erreur : '.$e->getMessage().'<br />';
    				   		echo 'N° : '.$e->getCode();
    					} 
    				}	
                 }	
    	}	   
    }
    les paramètres seront renseignée lors de l'appel de cette methode dans une autre méthode de la classe

    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
    21
    22
    23
    24
    25
    26
    27
    public function SaveXml()
    	{
    		$idEvent = $this->insertIntoEvent();
    		$eventAttrExist = $this->EventAttributeTypeExists();
    		if($eventAttrExist)
    		{
    			$idOfEventsAttributeType = $this->GetEventAttributeType();
    			print "<pre>";
    			print_r($idOfEventsAttributeType);
    			print "</pre>";
     
    		}else{
     
    			$idOfEventAttributeTypeCreate = $this->CreateEventAttributeType();
    			print "<pre>";
    			print_r($idOfEventAttributeTypeCreate);
    			print "</pre>";
    		}
     
    		for($i=0;$i<count($idEvent);$i++)
    	    {
    	   		for($j=0;$j<count($idOfEventAttributeTypeCreate);$j++)
    	   		{
    	   			$this->SaveAttributeValue($idEvent[$i],$idOfEventAttributeTypeCreate[$j]);
    	   		}
    	    }
    }

    Donc pour chaque insertion les autres champs pourront avoir un valeur NULL
    par exemple pour le timestamp value si j'insère la date_upload du fichier xml
    les autres champs seront null sauf les deux clé étrangère.

    Pour la clé étrangère attribute_id j'ai du mal à faire correspondre à chaque ligne car $idOfEventAttributeTypeCreate me retourne l'id correspondant à chaque donnée du fichier xml enregistré dans une autre table : par exemple ces données sont dateupload, filename , etc du fichier xml

    si vous pouvez m' eclaircire un peu sur ce probleme, je galère pendant pas mal de jour
    merci

  2. #2
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    Ya pas moyen d'isoler un peu ton problème et de simplifier un peu la tâche ?
    Car la ca faisait 5 minutes que j'étais en train d'essayer de comprendre comment tu gère ton XML et je suis pas sur que ca soit vraiment pertinent au problème.

    J'suis moi même pas très doué là dedans, mais paraitrait qu'il faut savoir être concis dans la vie

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/02/2011, 17h34
  2. Aide pour une requête SQL d'insertion
    Par waner442 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/11/2009, 23h24
  3. [MySQL] pb pour vérifier l'excution d'une requête d'insertion
    Par jeinny dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 28/05/2009, 10h31
  4. Réponses: 8
    Dernier message: 20/03/2009, 14h54
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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