Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/06/2011, 11h26   #1
Invité de passage
 
Inscription : mars 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 60
Points : 1
Points : 1
Par défaut Probléme d'enregistrement des paramétres d'un fichiers xml

Bonjour,
J'ai un probléme dans mon script.En effet,je veux uploader un fichier xml,puis enregistrer dans la table form_type sauvegarder quelques informations.Mon probléme est que je réussi à enregistrer le fichier dans un dossier particulier alors que je ne réussi pas à faire l'enregistrement des paramétres dans la table de la base de donnée.
Pourriez vous m'aider à résoudre ce probléme?
LA FONCTION de traitement de xml est:
Code :
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
private function processXmlFile($fileName,$formTypeId,$fieldTypeId=false,$forcedConfirm=false){
 
    $culture = sfContext::getInstance()->getUser()->getCulture();
    $xml = simplexml_load_file(sfConfig::get('sf_upload_dir').'/tmpUpload/xml/'.$fileName);//on charge le fichier
   // die($xml);
    $hasProblems = false;
    $msg_notice = array();
    $msg_error = array();
 
    foreach($xml->page as $page)//pour chaque page du CRF
    {
 
        $pageNumber = $page['id'];
        $pageNumber = explode(".",$pageNumber);
        $pageNumber = $pageNumber[1]; // getting the page number Page.X return X
        $t = 0;
        foreach($page->area as $area)//for all area
        {
            $tmp = $area->area;
            $isTextCapture = false;
 
            if(!empty($tmp))//si le champ est compose
            {
                $hasProblems = false;
 
                $TheField = "";//initialisation des variables
                $field_x = "";
                $field_y = "";
                $field_w = "";
                $field_h = "";
                $field_name = "";
                $field_category = "";
                $category = "";
 
                $cate = $area->field->textCapture;
                $TheField = $area->rectangle;//recup�ration des tailles et positions des champs compos�s
                $field_x = $TheField['x'];
                $field_y = $TheField['y'];
                $field_w = $TheField['w'];
                $field_h = $TheField['h'];
 
                $field_name = $area->field;//r�cup�ration du field_name
                $field_name = $field_name['id'];
                $field_category = $area->field->markCapture;
 
                if(!empty($field_category))//recuperation de la categorie
                {
                    $category = "markCapture";
                    $isTextCapture = false;
                }
                else
                {
                    $field_category = $area->field->textCapture;
                    if(!empty($field_category))
                    {
                        $category = "textCapture";
                        $isTextCapture = true;
                    }
                    else // category does not exist
                    {
                        if ($culture == 'fr')
                        {
                            $msg_error[$field_name] = 'La catégorie pour le Field Type dont le nom '.$field_name.' est vide.';
                            //$this->getUser()->setFlash('error','La catégorie pour le Field Type dont le nom '.$field_name.' est vide.');
                            //$this->addLog('La catégorie pour le Field Type dont le nom '.$field_name.' est vide.');
                        }
                        else
                        {
                            $msg_error[$field_name] = 'Empty Category for the field type having the name : '.$field_name;
                            //$this->getUser()->setFlash('error','Empty Category for the field type having the name : '.$field_name);
                           //$this->addLog('Empty Category for the field type having the name : '.$field_name);
                        }
                        $hasProblems = true;
                    }
                }
                //$firstChar = substr($field_name,0,1);
              //  die($field_name.'##'.$pageNumber);
                if(! $this->isValidFieldTypeName($field_name,$pageNumber)) // field_name = le champ id du balise field et page number = le deuxiéme partie d'id de balise page id exemple "page.5" on prend 5
                {
                    if ($culture == 'fr')
                    {
                        $msg_error[$t+1] = 'Le Champ '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération';
                       // $this->getUser()->setFlash('error','Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
                        //$this->addLog('Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
                    }
                    else
                    {
                      //  die ($field_name);
                        $msg_error[$t+1] = 'The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation';
                        //$this->getUser()->setFlash('error','The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                       // $this->addLog('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                    }
                    //$this->addError('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                    $hasProblems = true;
                }
                $pageTypes = Doctrine::getTable('PageType')->getPageTypesByKeys(array('FORM_TYPE_ID'=>$formTypeId, 'PAGE_NUM' => $pageNumber));
                $pageTypeId = $pageTypes[0]->getPageTypeId();
                $fieldTypeNewRecord = false;
 
                $fieldTypeTable = Doctrine::getTable('FieldType');
                $fieldTypeTable = $fieldTypeTable->getFieldTypesByKeys(array('field_type_name'=>$field_name,'page_type_id'=>$pageTypeId));
                //print_r('<pre>*<br>'.$fieldTypeTable[0]);
 
                if(!empty($fieldTypeTable[0]))
                {
                    $fieldTypeNewRecord = $fieldTypeTable[0];
                }
                else
                {
                    $fieldTypeNewRecord = new FieldType();
                }
                if($fieldTypeNewRecord != false && $hasProblems == false)
                {
                    $fieldTypeNewRecord->setPageTypeId($pageTypeId);
                    $fieldTypeNewRecord->setPositionX((int)$field_x);
                    $fieldTypeNewRecord->setPositionY((int)$field_y);
                    $fieldTypeNewRecord->setPositionW((int)$field_w);
                    $fieldTypeNewRecord->setPositionH((int)$field_h);
                    $fieldTypeNewRecord->setFieldTypeName((String)$field_name);
                    $fieldTypeNewRecord->setCategory($category);
                    //print('<pre>');print_r($fieldTypeNewRecord);
                    $fieldTypeNewRecord->save();
                    if ($culture == 'fr')
                    {
                        $msg_notice[$t+1] = 'Le champ  '.$fieldTypeNewRecord->getFieldTypeName().' est enregistré.';
                    }
                    else
                    {
                        $msg_notice[$t+1] = 'The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.';
                    }
                }
                //	die();
                //query_hysto($sql,"field_type","INSERT",$id);
                //TODO save query history using query_history table
                $newFieldTypes  =  Doctrine::getTable('FieldType')->getFieldTypesByKey('field_type_name',$field_name);
                //$newFieldTypeId = $newFieldTypes[0]->getFieldTypeId();
                $newFieldTypeId = $fieldTypeNewRecord->getFieldTypeId();
                if ($hasProblems == false)
                {
                    $j=0;
                    foreach($tmp as $subarea) // for all subarea for the current area
                    {
                        $x = "";
                        $y = "";
                        $h = "";
                        $w = "";
                        $field_subarea_name = "";
                        $taille = "";
                        $value = "";
 
                        $field_subarea_name = $subarea['id'];
 
                        $taille = $subarea->rectangle;
                        $x = $taille['x'];
                        $y = $taille['y'];
                        $w = $taille['w'];
                        $h = $taille['h'];
                        $value  = $area->field->mark->value;
                        if(!empty($value))
                        {
                            foreach($aera->field->$category->mark as $mark)
                            {
                                if($mark['sourceArea']=="../../../area[".$j."]")
                                {
                                    $value = $mark->value;
                                    $value = $value['text'];
                                }
                            }
                        }
                        if ($this->isValidFieldSubareaName($field_subarea_name,$field_name))
                        {
                            $fSubareaList =	Doctrine::getTable('FieldSubarea')->getFieldSubareaByKeys(array('field_type_id'=>$newFieldTypeId,'field_subarea_name'=>$field_subarea_name));
 
                            if (!empty($fSubareaList[0]))
                            {
                                $fieldSubareaNewRecord = $fSubareaList[0];
                            }
                            else
                            {
                                $fieldSubareaNewRecord = new FieldSubarea();
                            }
                            // TODO verifier avec DW quoi faire pour les subarea fields en cas d'update
                            $fieldSubareaNewRecord->setFieldTypeId((int)$newFieldTypeId);
                            $fieldSubareaNewRecord->setFieldSubareaName((String)$field_subarea_name);
                            $fieldSubareaNewRecord->setSubareaX((int)$x);
                            $fieldSubareaNewRecord->setSubareaY((int)$y);
                            $fieldSubareaNewRecord->setSubareaW((int)$w);
                            $fieldSubareaNewRecord->setSubareaH((int)$h);
                            $fieldSubareaNewRecord->setDefaultValue((String)$value);
                            $fieldSubareaNewRecord->save();
 
                            if ($culture == 'fr')
                            {
                                $msg_notice[($t+1).'-'.($j+1)] = 'Le Subarea N°'.($j+1).' du champ  '.$fieldTypeNewRecord->getFieldTypeName().': ('.$field_subarea_name.') est enregistré.';
                            }
                            else
                            {
                                $msg_notice[($t+1).'-'.($j+1)] = 'The Subarea N°'.($j+1).' of the field  '.$fieldTypeNewRecord->getFieldTypeName().': ('.$field_subarea_name.') was created.';
                            }
 
                            //$this->getUser()->setFlash('notice','The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.');
                            //query_hysto($sql,"field_subarea","INSERT",$id);
                            // TODO save query history
                        }
                        else
                        {
                            if ($culture == 'fr')
                            {
                                $msg_error[($t+1).'-'.($j+1)] = 'Le Subarea N°'.($j+1).' du champ  '.$fieldTypeNewRecord->getFieldTypeName().': ('.$field_subarea_name.') est invalide.';
                            }
                            else
                            {
                                $msg_error[($t+1).'-'.($j+1)] = 'The Subarea N°'.($j+1).' of the field '.$field_name.': ('.$field_subarea_name.') is not valid.';
                            }
 
                          //$this->addLog('The field subarea name '.$field_subarea_name.' is not valid.');
                        }
                         $j++;
                    }// END foreach for subarea for the current area
 
                    if ($isTextCapture) /// sauvgarde de field type
                    {
                        $fieldTypeNewRecord->setNbChar($j);
                        $fieldTypeNewRecord->save();
                       // $this->getUser()->setFlash('notice','The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.');
                    }
                }// END has problem to false
            }
            else//si le champs n'est pas compos�
            {
                $hasProblems = false;
 
                $x = "";//initialisation des variables
                $y = "";
                $w = "";
                $h = "";
                $field_type_name = "";
 
                $taille = $area->rectangle;//recherche des positions et taille du champs
                $x = $taille['x'];
                $y = $taille['y'];
                $w = $taille['w'];
                $h = $taille['h'];
 
                $field = $area->field;//recherche du field_type_name
                $field_type_name = $field['id'];
                //query_hysto($sql,"field_type","INSERT",$id);
                // TODO save query histroy
 
                $pageTypes = Doctrine::getTable('PageType')->getPageTypesByKeys(array('FORM_TYPE_ID'=>$formTypeId, 'PAGE_NUM' => $pageNumber));
                $pageTypeId = $pageTypes[0]->getPageTypeId();
                $fieldTypeNewRecord = false;
 
                $fieldTypeTable = Doctrine::getTable('FieldType');
                $fieldTypeTable = $fieldTypeTable->getFieldTypesByKeys(array('field_type_name'=>$field_name,'page_type_id'=>$pageTypeId));
                //print_r('<pre>*<br>'.$fieldTypeTable[0]);
 
                if(!empty($fieldTypeTable[0]))
                {
                    $fieldTypeNewRecord = $fieldTypeTable[0];
                }
                else
                {
                    $fieldTypeNewRecord = new FieldType();
                }
 
                //$firstChar = substr($field_name,0,1);
                if(!$this->isValidFieldTypeName($field_name,$pageNumber))
                {
                    if(!empty($field_name))
                    {
                        if ($culture == 'fr')
                        {
                            $msg_error[$t+1] = 'Le Champ '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération';
//                            $this->getUser()->setFlash('error','Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
//                            $this->addLog('Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
                        }
                        else
                        {
                            $msg_error[$t+1] = 'The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation';
//                            $this->getUser()->setFlash('error','The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
//                            $this->addLog('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                        }
                    }
                    $hasProblems = true;
                }
                // code pour verifier le nom du champ namefield c'est presque le meme que la fonction isValidFieldTypeName
                if (!preg_match("/^F/", $field_name))
                {
                    if ($culture == 'fr')
                    {
                        $msg_error[$t+1] = 'Le Champ '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération';
//                        $this->getUser()->setFlash('error','Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
//                        $this->addLog('Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
 
                    }
                    else
                    {
                        $msg_error[$t+1] = 'The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation';
//                        $this->getUser()->setFlash('error','The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
//                        $this->addLog('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                    }
                    $hasProblems = true;
                }
                if(! strlen($field_name) == 11)
                {
                    if ($culture == 'fr')
                    {
                        $msg_error[$t+1] = 'Le Champ '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération';
//                        $this->getUser()->setFlash('error','Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
//                        $this->addLog('Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
                    }
                    else
                    {
                        $msg_error[$t+1] = 'The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation';
//                        $this->getUser()->setFlash('error','The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
//                        $this->addLog('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                    }
                    $hasProblems = true;
                }
 
                ///////////
 
                if($fieldTypeNewRecord != false && $hasProblems == false)
                {
                    $fieldTypeNewRecord->setPageTypeId($pageTypeId);
                    $fieldTypeNewRecord->setPositionX((int)$field_x);
                    $fieldTypeNewRecord->setPositionY((int)$field_y);
                    $fieldTypeNewRecord->setPositionW((int)$field_w);
                    $fieldTypeNewRecord->setPositionH((int)$field_h);
                    $fieldTypeNewRecord->setFieldTypeName((String)$field_name);
                    $fieldTypeNewRecord->save();
 
                    if ($culture == 'fr')
                    {
                        $msg_notice[($t+1).'-'.($j+1)] = 'Le champ  '.$fieldTypeNewRecord->getFieldTypeName().' est enregistré.';
                    }
                    else
                    {
                        $msg_notice[$t+1] = 'The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.';
                    }
 
                  // // $msg_notice[$t+1] = 'The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.';
                }
                else
                {
                    //	die('empty field type new record '.$hasProblems);
                }
            }
           $t++;
            unset($tmp);
        }
    }
    $this->memoSuccesInsertCenters = $msg_notice;
    $this->memoFailedInsertCenters = $msg_error;
    //die();
    return $hasProblems;
 
}
Alors que la structure de ma table est la suivante:
Code :
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
FieldType:
  tableName: field_type
  columns:
    field_type_id:
      type: integer(4)
      primary: true
      autoincrement: true
    page_type_id:
      type: integer(4)
      notnull: true
    rs_transaction_id: integer(4)
    position_x: string(5)
    position_y: string(5)
    position_w: string(5)
    position_h: string(5)
    field_type_name: string(50)
    explicit_field: string(250)
    comment: string(250)
    category: string(25)
    nb_char: integer(4)
  relations:
    RsTransaction:
      local: RS_TRANSACTION_ID
      foreign: RS_TRANSACTION_ID
      type: one
    PageType:
      local: PAGE_TYPE_ID
      foreign: PAGE_TYPE_ID
      type: one
    FieldCopy:
      local: FIELD_TYPE_ID
      foreign: FIELD_TYPE_ID
      type: many
    FieldSubarea:
      local: FIELD_TYPE_ID
      foreign: FIELD_TYPE_ID
      type: many
    RsTransaction_2:
      class: RsTransaction
      local: FIELD_TYPE_ID
      foreign: FIELD_TYPE_ID
      type: many
j'ai besoin d'une solution car j'ai pas pu enregistré les données nécessaire dans la table field_type.
farhaenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 11h42   #2
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
BAM 350 lignes prends ça !

Bon pour commencer ce qui serait bien c'est que tu debug un tout petit peu pour nous faciliter la tâche (et aussi pour TE faciliter la tâche) histoire de savoir ou chercher. Dans un premier temps j'aurai tendance à te conseiller de mettre des die() juste avant tes save() afin de savoir si tu respectes bien toutes les conditions à chaque fois. De cette manière on saura si c'est le contenu de ton objet qui est mauvais ou si les conditions pour rentrer dans les blocs if qui ne sont pas respectés.

Donc première chose : tu as 4 save(), es-tu bien sur de passer sur les 4 ?
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 11h51   #3
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
Et Rasmus Lerdorf inventa (ou pas) les fonctions...

Sérieusement, pense à décomposer ton code en fonction parce que là, non seulement tu va avoir énormément de mal à débugger mais en plus le jour où tu voudra faire de la maintenance...tu achètera une corde.

Je te conseille ce livre au passage : http://www.amazon.fr/Coder-proprement-Robert-C-Martin/dp/2744023272
PS : Ne vois rien de méchant dans ce message, c'est juste un conseil d'une personne qui est aussi passer par là.
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/06/2011, 12h05   #4
Invité de passage
 
Inscription : mars 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 60
Points : 1
Points : 1
J'ai ajouté le die() avant chaque save,mais rien ne s'est passé.Mon code de la fonction de traitement du fichier xml est le suivant:
Code :
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
private function processXmlFile($fileName,$formTypeId,$fieldTypeId=false,$forcedConfirm=false){
 
    $culture = sfContext::getInstance()->getUser()->getCulture();
    $xml = simplexml_load_file(sfConfig::get('sf_upload_dir').'/tmpUpload/xml/'.$fileName);//on charge le fichier
    $hasProblems = false;
    $msg_notice = array();
    $msg_error = array();
    foreach($xml->page as $page)//pour chaque page du CRF
    {
 
        $pageNumber = $page['id'];
        $pageNumber = explode(".",$pageNumber);
        $pageNumber = $pageNumber[1]; // getting the page number Page.X return X
        $t = 0;
        foreach($page->area as $area)//for all area
        {
            $tmp = $area->area;
            $isTextCapture = false;
 
            if(!empty($tmp))//si le champ est compose
            {
                $hasProblems = false;
 
                $TheField = "";//initialisation des variables
                $field_x = "";
                $field_y = "";
                $field_w = "";
                $field_h = "";
                $field_name = "";
                $field_category = "";
                $category = "";
 
                $cate = $area->field->textCapture;
                $TheField = $area->rectangle;//recup�ration des tailles et positions des champs compos�s
                $field_x = $TheField['x'];
                $field_y = $TheField['y'];
                $field_w = $TheField['w'];
                $field_h = $TheField['h'];
 
                $field_name = $area->field;//r�cup�ration du field_name
                $field_name = $field_name['id'];
                $field_category = $area->field->markCapture;
 
                if(!empty($field_category))//recuperation de la categorie
                {
                    $category = "markCapture";
                    $isTextCapture = false;
                }
                else
                {
                    $field_category = $area->field->textCapture;
                    if(!empty($field_category))
                    {
                        $category = "textCapture";
                        $isTextCapture = true;
                    }
                    else // category does not exist
                    {
                        if ($culture == 'fr')
                        {
                            $msg_error[$field_name] = 'La catégorie pour le Field Type dont le nom '.$field_name.' est vide.';
                        }
                        else
                        {
                            $msg_error[$field_name] = 'Empty Category for the field type having the name : '.$field_name;
                        }
                        $hasProblems = true;
                    }
                }
 
                if(! $this->isValidFieldTypeName($field_name,$pageNumber)) // field_name = le champ id du balise field et page number = le deuxiéme partie d'id de balise page id exemple "page.5" on prend 5
                {
                    if ($culture == 'fr')
                    {
                        $msg_error[$t+1] = 'Le Champ '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération';
                    }
                    else
                    {
 
                        $msg_error[$t+1] = 'The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation';
 
                    }
                    //$this->addError('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                    $hasProblems = true;
                }
                $pageTypes = Doctrine::getTable('PageType')->getPageTypesByKeys(array('FORM_TYPE_ID'=>$formTypeId, 'PAGE_NUM' => $pageNumber));
                $pageTypeId = $pageTypes[0]->getPageTypeId();
                $fieldTypeNewRecord = false;
 
                $fieldTypeTable = Doctrine::getTable('FieldType');
                $fieldTypeTable = $fieldTypeTable->getFieldTypesByKeys(array('field_type_name'=>$field_name,'page_type_id'=>$pageTypeId));
 
                if(!empty($fieldTypeTable[0]))
                {
                    $fieldTypeNewRecord = $fieldTypeTable[0];
                }
                else
                {
                    $fieldTypeNewRecord = new FieldType();
                }
                if($fieldTypeNewRecord != false && $hasProblems == false)
                {
                    $fieldTypeNewRecord->setPageTypeId($pageTypeId);
                    $fieldTypeNewRecord->setPositionX((int)$field_x);
                    $fieldTypeNewRecord->setPositionY((int)$field_y);
                    $fieldTypeNewRecord->setPositionW((int)$field_w);
                    $fieldTypeNewRecord->setPositionH((int)$field_h);
                    $fieldTypeNewRecord->setFieldTypeName((String)$field_name);
                    $fieldTypeNewRecord->setCategory($category);
                    //print('<pre>');print_r($fieldTypeNewRecord);
                    die($fieldTypeNewRecord);
                    $fieldTypeNewRecord->save();
                    if ($culture == 'fr')
                    {
                        $msg_notice[$t+1] = 'Le champ  '.$fieldTypeNewRecord->getFieldTypeName().' est enregistré.';
                    }
                    else
                    {
                        $msg_notice[$t+1] = 'The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.';
                    }
                }
                //	die();
                //query_hysto($sql,"field_type","INSERT",$id);
                //TODO save query history using query_history table
                $newFieldTypes  =  Doctrine::getTable('FieldType')->getFieldTypesByKey('field_type_name',$field_name);
                //$newFieldTypeId = $newFieldTypes[0]->getFieldTypeId();
                $newFieldTypeId = $fieldTypeNewRecord->getFieldTypeId();
                if ($hasProblems == false)
                {
                    $j=0;
                    foreach($tmp as $subarea) // for all subarea for the current area
                    {
                        $x = "";
                        $y = "";
                        $h = "";
                        $w = "";
                        $field_subarea_name = "";
                        $taille = "";
                        $value = "";
 
                        $field_subarea_name = $subarea['id'];
 
                        $taille = $subarea->rectangle;
                        $x = $taille['x'];
                        $y = $taille['y'];
                        $w = $taille['w'];
                        $h = $taille['h'];
                        $value  = $area->field->mark->value;
                        if(!empty($value))
                        {
                            foreach($aera->field->$category->mark as $mark)
                            {
                                if($mark['sourceArea']=="../../../area[".$j."]")
                                {
                                    $value = $mark->value;
                                    $value = $value['text'];
                                }
                            }
                        }
                        if ($this->isValidFieldSubareaName($field_subarea_name,$field_name))
                        {
                            $fSubareaList =	Doctrine::getTable('FieldSubarea')->getFieldSubareaByKeys(array('field_type_id'=>$newFieldTypeId,'field_subarea_name'=>$field_subarea_name));
 
                            if (!empty($fSubareaList[0]))
                            {
                                $fieldSubareaNewRecord = $fSubareaList[0];
                            }
                            else
                            {
                                $fieldSubareaNewRecord = new FieldSubarea();
                            }
                            // TODO verifier avec DW quoi faire pour les subarea fields en cas d'update
                            $fieldSubareaNewRecord->setFieldTypeId((int)$newFieldTypeId);
                            $fieldSubareaNewRecord->setFieldSubareaName((String)$field_subarea_name);
                            $fieldSubareaNewRecord->setSubareaX((int)$x);
                            $fieldSubareaNewRecord->setSubareaY((int)$y);
                            $fieldSubareaNewRecord->setSubareaW((int)$w);
                            $fieldSubareaNewRecord->setSubareaH((int)$h);
                            $fieldSubareaNewRecord->setDefaultValue((String)$value);
                            die($fieldSubareaNewRecord);
                            $fieldSubareaNewRecord->save();
 
                            if ($culture == 'fr')
                            {
                                $msg_notice[($t+1).'-'.($j+1)] = 'Le Subarea N°'.($j+1).' du champ  '.$fieldTypeNewRecord->getFieldTypeName().': ('.$field_subarea_name.') est enregistré.';
                            }
                            else
                            {
                                $msg_notice[($t+1).'-'.($j+1)] = 'The Subarea N°'.($j+1).' of the field  '.$fieldTypeNewRecord->getFieldTypeName().': ('.$field_subarea_name.') was created.';
                            }
 
                            //$this->getUser()->setFlash('notice','The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.');
                            //query_hysto($sql,"field_subarea","INSERT",$id);
                            // TODO save query history
                        }
                        else
                        {
                            if ($culture == 'fr')
                            {
                                $msg_error[($t+1).'-'.($j+1)] = 'Le Subarea N°'.($j+1).' du champ  '.$fieldTypeNewRecord->getFieldTypeName().': ('.$field_subarea_name.') est invalide.';
                            }
                            else
                            {
                                $msg_error[($t+1).'-'.($j+1)] = 'The Subarea N°'.($j+1).' of the field '.$field_name.': ('.$field_subarea_name.') is not valid.';
                            }
 
                          //$this->addLog('The field subarea name '.$field_subarea_name.' is not valid.');
                        }
                         $j++;
                    }// END foreach for subarea for the current area
 
                    if ($isTextCapture) /// sauvgarde de field type
                    {
                        $fieldTypeNewRecord->setNbChar($j);
                        die($fieldTypeNewRecord);
                        $fieldTypeNewRecord->save();
                       // $this->getUser()->setFlash('notice','The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.');
                    }
                }// END has problem to false
            }
            else//si le champs n'est pas compos�
            {
                $hasProblems = false;
 
                $x = "";//initialisation des variables
                $y = "";
                $w = "";
                $h = "";
                $field_type_name = "";
 
                $taille = $area->rectangle;//recherche des positions et taille du champs
                $x = $taille['x'];
                $y = $taille['y'];
                $w = $taille['w'];
                $h = $taille['h'];
 
                $field = $area->field;//recherche du field_type_name
                $field_type_name = $field['id'];
                //query_hysto($sql,"field_type","INSERT",$id);
                // TODO save query histroy
 
                $pageTypes = Doctrine::getTable('PageType')->getPageTypesByKeys(array('FORM_TYPE_ID'=>$formTypeId, 'PAGE_NUM' => $pageNumber));
                $pageTypeId = $pageTypes[0]->getPageTypeId();
                $fieldTypeNewRecord = false;
 
                $fieldTypeTable = Doctrine::getTable('FieldType');
                $fieldTypeTable = $fieldTypeTable->getFieldTypesByKeys(array('field_type_name'=>$field_name,'page_type_id'=>$pageTypeId));
                //print_r('<pre>*<br>'.$fieldTypeTable[0]);
 
                if(!empty($fieldTypeTable[0]))
                {
                    $fieldTypeNewRecord = $fieldTypeTable[0];
                }
                else
                {
                    $fieldTypeNewRecord = new FieldType();
                }
 
                //$firstChar = substr($field_name,0,1);
                if(!$this->isValidFieldTypeName($field_name,$pageNumber))
                {
                    if(!empty($field_name))
                    {
                        if ($culture == 'fr')
                        {
                            $msg_error[$t+1] = 'Le Champ '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération';
//                            $this->getUser()->setFlash('error','Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
//                            $this->addLog('Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
                        }
                        else
                        {
                            $msg_error[$t+1] = 'The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation';
//                            $this->getUser()->setFlash('error','The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
//                            $this->addLog('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                        }
                    }
                    $hasProblems = true;
                }
                // code pour verifier le nom du champ namefield c'est presque le meme que la fonction isValidFieldTypeName
                if (!preg_match("/^F/", $field_name))
                {
                    if ($culture == 'fr')
                    {
                        $msg_error[$t+1] = 'Le Champ '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération';
//                        $this->getUser()->setFlash('error','Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
//                        $this->addLog('Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
 
                    }
                    else
                    {
                        $msg_error[$t+1] = 'The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation';
//                        $this->getUser()->setFlash('error','The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
//                        $this->addLog('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                    }
                    $hasProblems = true;
                }
                if(! strlen($field_name) == 11)
                {
                    if ($culture == 'fr')
                    {
                        $msg_error[$t+1] = 'Le Champ '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération';
//                        $this->getUser()->setFlash('error','Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
//                        $this->addLog('Le Field '.$field_name.' n\'est pas valide, s\'il vous plaît utiliser le Software Modeler pour résoudre ce problème, mettre Ã* jour le serveur de production et recommencez cette opération');
                    }
                    else
                    {
                        $msg_error[$t+1] = 'The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation';
//                        $this->getUser()->setFlash('error','The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
//                        $this->addLog('The field '.$field_name.' is not valid, please use form modeler software to resolve this issue, update the production server and retry this operation');
                    }
                    $hasProblems = true;
                }
 
                ///////////
 
                if($fieldTypeNewRecord != false && $hasProblems == false)
                {
                    $fieldTypeNewRecord->setPageTypeId($pageTypeId);
                    $fieldTypeNewRecord->setPositionX((int)$field_x);
                    $fieldTypeNewRecord->setPositionY((int)$field_y);
                    $fieldTypeNewRecord->setPositionW((int)$field_w);
                    $fieldTypeNewRecord->setPositionH((int)$field_h);
                    $fieldTypeNewRecord->setFieldTypeName((String)$field_name);
                    die($fieldTypeNewRecord);
                    $fieldTypeNewRecord->save();
 
                    if ($culture == 'fr')
                    {
                        $msg_notice[($t+1).'-'.($j+1)] = 'Le champ  '.$fieldTypeNewRecord->getFieldTypeName().' est enregistré.';
                    }
                    else
                    {
                        $msg_notice[$t+1] = 'The field  '.$fieldTypeNewRecord->getFieldTypeName().' was created.';
                    }
                }
                else
                {
                    //	die('empty field type new record '.$hasProblems);
                }
            }
           $t++;
            unset($tmp);
        }
    }
    $this->memoSuccesInsertCenters = $msg_notice;
    $this->memoFailedInsertCenters = $msg_error;
    //die();
    return $hasProblems;
 
}
Je ne sais pas qu'est ce que je doit modifier pour obtenir le bon résultat.
farhaenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 12h15   #5
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
Rien ne s'est passé donc à priori il ne rentre dans aucune de tes conditions. Aucun die('toto') ou die('test') n'est apparu ? (si jamais la fin de l'exécution de ton script mène à une page blanche et que tu as mis des die() sans message dedans tu ne verras pas la différence)

Ensuite ta variable $fieldTypeNewRecord a l'air de servir un peu à tout et n'importe quoi, d'abord c'est un booleen, ensuite tu lui donnes un champ text ou int, et ensuite tu lui passes un objet. En matière de bonnes pratiques on a vu mieux.

Par contre si tu souhaite afficher son contenu au moment du die, un die($fieldTypeNewRecord); ne fonctionnera pas si c'est un objet.

Tente plutôt un
Code :
var_dump($fieldTypeNewRecord);die;
Maintenant le but est de vérifier à partir de quel bloc "if" tu bloques.
Donc pour chacun de tes save(), tu vas mettre un die() après chaque condition if et foreach possible dans lequel il est imbriqué et dans lequel il doit passer, puis les retirer les uns après les autres afin de savoir quelle condition n'est pas respectée.

Une fois que tu sauras sur quelle condition tu bloques, il s'agira alors de dumper les résultats que tu compares et voir s'ils correspondent bien aux résultats attendus. Si c'est le cas, c'est peut-être ta condition qui est mauvaise, sinon c'est que les données qui te sont envoyées ont un souci.

Debugger c'est toujours plus facile quand on sait sur quelle ligne ça bloque et c'est précisemment ce qu'on te demande pour pouvoir t'aider.
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 13h25   #6
Invité de passage
 
Inscription : mars 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 60
Points : 1
Points : 1
Bonjour,
J'ai passé quelques jours pour bien comprendre le code développé.Mon but est d'enregistrer les donner dans une table.Le probléme est que le chargement du fichier ne se fait pas:c'est à dire que à partir de:
Code :
$xml = simplexml_load_file(sfConfig::get('sf_upload_dir').'/tmpUpload/xml/'.$fileName);//on charge le fichier
le code se bloque,donc il n'est pas possible de faire le traitement.
farhaenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 14h32   #7
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
Est-ce que l'attribut $filename est bien renseigné au moment de l'appel de la méthode processXmlFile ?

Fais un pour voir déjà s'il est renseigné, si tu n'as pas oublié l'extension du fichier ou ce genre de détails...

Il serait judicieux également de remplacer le chemin de ton simplexml_load_file par le chemin en dur pour être sur que c'est juste la génération du path qui bloque et non le fichier xml par exemple.
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 15h10   #8
Invité de passage
 
Inscription : mars 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 60
Points : 1
Points : 1
J'ai vérifié avec:
Code :
1
2
3
4
private function processXmlFile($fileName,$formTypeId,$fieldTypeId=false,$forcedConfirm=false){
     die($fileName);
    $culture = sfContext::getInstance()->getUser()->getCulture();
    $xml = simplexml_load_file(sfConfig::get('sf_upload_dir').'/tmpUpload/xml/'.$fileName);//on charge le fichier
si le nom du fichier est mis en considération ou non et il m'a affiché le nom exact du fichier que j'ai utilisé(1-TEST-P002_474.xml).
Qu'est ce que je doit faire pour que le traitement sera appliqué à ce fichier(enregistrement de son contenue dans la base de donnée?
farhaenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 15h13   #9
Invité de passage
 
Inscription : mars 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 60
Points : 1
Points : 1
Est il possible que le probléme est du à
Code :
$xml = simplexml_load_file(sfConfig::get('sf_upload_dir').'/tmpUpload/xml/'.$fileName);
car la variable $xml ne retourne rien.
Comment je peux résoudre ceci?
farhaenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 15h48   #10
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
Si ton script s’arrête sur cette ligne comme tu l'as dit précédemment, il y a de grandes chances pour que cette ligne soit responsable de ton problème !

Essaye comme je te l'ai dit de mettre le path de ton fichier en dur et vois si ça bloque toujours (et au passage, compare le avec ce que TOI tu génères comme chemin).
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 16h32   #11
Invité de passage
 
Inscription : mars 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 60
Points : 1
Points : 1
J'ai essayé avec
Code :
1
2
3
$xml=simplexml_load_file('/uploads/tmpUpload/'.$filename);//on charge le fichier
 
 die($xml);
et rien n'est retourné.
farhaenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 16h58   #12
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
Bon visiblement tu as l'air un peu perdu sur ta ligne et tu ne comprends pas bien ce que tu fais alors essaye donc voir ça :

Code :
1
2
3
4
5
6
7
if (file_exists('/uploads/tmpUpload/1-TEST-P002_474.xml')) {
    $xml = simplexml_load_file('/uploads/tmpUpload/1-TEST-P002_474.xml');
 
    print_r($xml);
} else {
    exit('Echec lors de l\'ouverture du fichier 1-TEST-P002_474.xml.');
}
La : de deux choses l'une, ou bien tu rentres dans le if c'est que ton fichier existe et s'il ne t'affiche rien c'est que ton xml est vide ou mal formé.

Ou bien tu ne rentres pas dans le if c'est que ton fichier n'existe pas à cet endroit ou est illisible et dans ce cas c'est le fichier même qui est à remettre en cause.
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h49.


 
 
 
 
Partenaires

Hébergement Web