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 :
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
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>
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
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
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(); } } } } }
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
Partager