Bonjour

Voila j ai une fonction pour créer un fichier excel par lot

Ma fonction à deux paramètres
$id du projet
List_idkit la liste des id des kits à traiter
Pour chaque idkit de la liste (c est un tableau) que je parcours via un foreach
Je fais une requête sur mysql pour récupérer les informations sur l idkit
| =>> Il me retourne plusieurs résultats.
|=>> j exploite ses resultats via un while

Mon problème c est qu il ne rentre jamais dans ce while je ne sais pas pourquoi. et il ne me provoque aucun erreur ???

Merci de votre aide.

list_idkit :
Array
(
[1] => 39
[5] => 40
[9] => 41
)
Il lance bien la requête pour chaque idkit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
SELECT e.id_etd, ep.id_prepa, es.id_site, ep.id_app, es.nom_site, ep.d_prepa, ep.d_crea_p, p.nom, p.prenom, e.nom_etd, e.ecglab, a.num_med, a.sn, a.sni, m.lib_mod, k.nom_kit FROM etude_prepa AS ep, etude_site AS es, contact_site AS cs, personne AS p, etude AS e, appareils AS a, modele AS m, etude_kit_c AS kc, etude_kit_p AS kp, etude_kit AS k WHERE ep.id_site = es.id_site AND es.id_site = cs.id_site AND cs.id_per = p.id_per AND es.id_etd = e.id_etd AND ep.id_app = a.id_app AND a.id_mod = m.id_mod AND ep.id_prepa = kc.id_prepa AND kc.id_kp = kp.id_kp AND kp.id_kit = k.id_kit AND k.id_kit = 39 ORDER BY m.lib_mod ASC
 
SELECT e.id_etd, ep.id_prepa, es.id_site, ep.id_app, es.nom_site, ep.d_prepa, ep.d_crea_p, p.nom, p.prenom, e.nom_etd, e.ecglab, a.num_med, a.sn, a.sni, m.lib_mod, k.nom_kit FROM etude_prepa AS ep, etude_site AS es, contact_site AS cs, personne AS p, etude AS e, appareils AS a, modele AS m, etude_kit_c AS kc, etude_kit_p AS kp, etude_kit AS k WHERE ep.id_site = es.id_site AND es.id_site = cs.id_site AND cs.id_per = p.id_per AND es.id_etd = e.id_etd AND ep.id_app = a.id_app AND a.id_mod = m.id_mod AND ep.id_prepa = kc.id_prepa AND kc.id_kp = kp.id_kp AND kp.id_kit = k.id_kit AND k.id_kit = 40 ORDER BY m.lib_mod ASC
 
SELECT e.id_etd, ep.id_prepa, es.id_site, ep.id_app, es.nom_site, ep.d_prepa, ep.d_crea_p, p.nom, p.prenom, e.nom_etd, e.ecglab, a.num_med, a.sn, a.sni, m.lib_mod, k.nom_kit FROM etude_prepa AS ep, etude_site AS es, contact_site AS cs, personne AS p, etude AS e, appareils AS a, modele AS m, etude_kit_c AS kc, etude_kit_p AS kp, etude_kit AS k WHERE ep.id_site = es.id_site AND es.id_site = cs.id_site AND cs.id_per = p.id_per AND es.id_etd = e.id_etd AND ep.id_app = a.id_app AND a.id_mod = m.id_mod AND ep.id_prepa = kc.id_prepa AND kc.id_kp = kp.id_kp AND kp.id_kit = k.id_kit AND k.id_kit = 41 ORDER BY m.lib_mod ASC
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
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
 
function fileprepa_kit($id, $list_idkit=array() ) {
    // PHPExcel
    include_once './data/phpexcel/Classes/PHPExcel.php';
    // on inclut la classe nécessaire à la lecture du fichier template
    // PHPExcel_IOFactory
    include_once './data/phpexcel/Classes/PHPExcel/IOFactory.php';
    // compteur et suivis  d erreur.
    $err = array();
    $i = 1;
 
       print("<pre>");
        print_r($list_idkit);
       print("</pre>");
 
    // liste des enregistrements appareil en preparation.
 
    foreach($list_idkit as $idkit) {
 
        //$idkit = $list_idkit[$i];
 
        $strSQL_prepakit = 'SELECT e.id_etd, ep.id_prepa, es.id_site, ep.id_app, es.nom_site, ep.d_prepa, ep.d_crea_p, p.nom, p.prenom, e.nom_etd, e.ecglab, a.num_med, a.sn, a.sni, m.lib_mod, k.nom_kit
                            FROM etude_prepa AS ep, etude_site AS es, contact_site AS cs, personne AS p, etude AS e, appareils AS a, modele AS m, etude_kit_c AS kc, etude_kit_p AS kp, etude_kit AS k
                            WHERE ep.id_site = es.id_site
                            AND es.id_site = cs.id_site
                            AND cs.id_per = p.id_per
                            AND es.id_etd = e.id_etd
                            AND ep.id_app = a.id_app
                            AND a.id_mod = m.id_mod
                            AND ep.id_prepa = kc.id_prepa
                            AND kc.id_kp = kp.id_kp
                            AND kp.id_kit = k.id_kit
                            AND k.id_kit = '.$idkit.'
                            ORDER BY m.lib_mod ASC';
        //
        // debug
        //
        echo $strSQL_prepakit.' </br>';
 
        $res_prepakit = requete_SQL($strSQL_prepakit);
 
            print("<pre>");
            print_r($res_prepakit);
            print("</pre>");
        while( $tabl_prepa = mysql_fetch_array($res_prepakit) ) {
 
            // récupérartion des données de la requête :
            $idetd = $tabl_prepa['id_etd'];
            $idprepa = $tabl_prepa['id_prepa'];
            $idsite = $tabl_prepa['id_site'];
            $idapp = $tabl_prepa['id_app'];
            $nom_site = $tabl_prepa['nom_site'];
            $dp = explode("-",$tabl_prepa['d_prepa']);
            $dprepa = $dp[2].'-'.$dp[1].'-'.$dp[0];
            $dc = explode(" ",$tabl_prepa['d_crea_p']);
            $dcd = explode("-",$dc[0]);
            //$dch = explode(":",$dc[1]);
            $d = $dcd[2].$dcd[1].$dcd[0];
            //$h = $dch[0].$dch[1].$dch[2];
            $dcrea = $d.'_'.$dc[1];
            $contact = $tabl_prepa['nom'].' '.$tabl_prepa['prenom'];
            $etude = $tabl_prepa['nom_etd'];
            $client = $tabl_prepa['ecglab'];
            $num_med = $tabl_prepa['num_med'];
            $sn = $tabl_prepa['sn'];
            $sni = $tabl_prepa['sni'];
            $modele = $tabl_prepa['lib_mod'];
            $nomkit = $tabl_prepa['nom_kit'];
 
            //on instancie un objet de lecture
            $objReader = PHPExcel_IOFactory::createReader('Excel2007');
 
            // le fichier template de l etude.
            $template = $etude.'_'.$modele;
 
            //
            // Debug echo
            //
            echo $template.' </br>';
            $template = valideChaine($template);
            echo $template.' </br>';
 
 
            //on charge le fichier qu'on veut lire
            $objPHPExcel = $objReader->load('./file/etd/etude_pharmatest/configuration_files/setuptemplate/'.$template.'.xlsx');
 
            // Set properties info dans les propietes du fichier
 
 
            echo "<p>".date('H:i:s') . " Set properties</p>";
            $objPHPExcel->getProperties()->setCreator("User")
    							 ->setLastModifiedBy("User")
    							 ->setTitle("Document de Preparation ".$num_med)
    							 ->setSubject("Modele ".$modele." Site : ".$nom_site)
                ->setDescription("Office 2007 XLSX.\r\n")
    							 ->setKeywords("e".$idetd."_p".$idprepa."_s".$idsite."_a".$idapp)
    							 ->setCategory("idetude idprepa idsite idapp");
 
 
            //on modifie ce fichier Device Preparation Form
            echo "<p>".date('H:i:s') . " Set setCellValue</p>";
            $objPHPExcel->getActiveSheet()->setCellValue('B1',' # '.$idprepa.' / Device Preparation Form');
            $objPHPExcel->getActiveSheet()->setCellValue('B3',' '.$modele.'');
            $objPHPExcel->getActiveSheet()->setCellValue('B10',' '.$etude.' / '.$idetd.'');
            $objPHPExcel->getActiveSheet()->setCellValue('C5',' '.$num_med.' / '.$idapp.'');
            $objPHPExcel->getActiveSheet()->setCellValue('C6',' '.$sn.' ');
            $objPHPExcel->getActiveSheet()->setCellValue('C7',' '.$sni.' ');// Internal
            $objPHPExcel->getActiveSheet()->setCellValue('C8','  ');// Version
            $objPHPExcel->getActiveSheet()->setCellValue('C12',' '.$client.' ');
            $objPHPExcel->getActiveSheet()->setCellValue('C13',''.$nom_site.' / '.$idsite.'');
            $objPHPExcel->getActiveSheet()->setCellValue('C14',' '.$idkit.' - '.$nom_kit.' '); // Kit
            $objPHPExcel->getActiveSheet()->setCellValue('C15',''.$contact.'');
            $objPHPExcel->getActiveSheet()->setCellValue('C19','USER');
            $objPHPExcel->getActiveSheet()->setCellValue('C20',''.$dprepa.'');
 
            //on crée un nouveau fichier
            echo "<p>".date('H:i:s') . " Set createWriter</p>";
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
            // compatibilité avec office 2003
            echo "<p>".date('H:i:s') . " Set setOffice2003Compatibility</p>";
            $objWriter->setOffice2003Compatibility(true);
            // on le sauve  DANS LE FICHIER
            $fichiername = $dcrea.'_'.$i.'_'.$nom_site.'_'.$kp.'_'.$num_med.'.xlsx';
 
            //
            // Debug echo
            //
            echo "<p>".$fichiername.' </br>';
 
            $fichiername = valideChaine($fichiername);
            echo $fichiername.' </br>';
            $dosetd = valideChaine($etude);
            $dossite = valideChaine($nom_site);
 
            echo $dossite.' </br>';
 
            // teste l existence du repertoire ou le cree
            $path = './file/etd/'.$dosetd.'/configuration_files/'.$dossite.'/kit/';
            IsDir_or_CreateIt($path);
 
            $chemin =$path.$fichiername;
            echo $chemin.' </p>';
 
            echo "<p>".date('H:i:s') . " Set save</p>";
            $objWriter->save($chemin);
 
             echo "<p>".$req_up_file.' </p>';
 
            if ( file_exists($chemin) ) {
                $req_up_file = "UPDATE etude_prepa SET file_prepa = '$fichiername' WHERE id_prepa ='$idprepa'";
                mysql_query($req_up_file) or die ('Erreur <br>".$req_up_file."<br>"'.$req_up_file.'"<br>"'.mysql_errno().' : ' . mysql_error());
                echo '# '.$i.''.$req_up_file.' </br>';
            } else {
                $err[$i][] = $chemin;
            }
 
            //$objWriter->Null;
            //$objPHPExcel->Null;
            $i++;
        }
    }
 
    return $err;
}