Bonjour tout le monde,
Voilà mon code MXML:
Mon code ActionScript:
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 <?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" showEffect="{IrisEffectId}"> <!-- On fait appel au fichier ActionScript contenant toutes les fonctions et les packages Actionscript utilisés --> <mx:Script source="../actionscript/amfphp/upload.as"/> <!-- RemoteObject: accès service distant AMFPHP --> <mx:RemoteObject id="ROService" showBusyCursor="true" source="classif_amfphp.traitement" destination="amfphp"> <mx:method name="traitementMajPonctuelle" result="traitementMajPonctuelleResult(event)" /> </mx:RemoteObject> <!--Effet permettant de rendre les transitions de l'interface plus douces--> <mx:Iris id="IrisEffectId" duration="400"/> <mx:TitleWindow title="Transfert du fichier" y="230" horizontalCenter="0"> <mx:HBox width="100%" paddingTop="10"> <mx:VBox height="100%" width="100"> <mx:Button label="Upload" click="{upload()}" id="button1" themeColor="0xf37021"/> </mx:VBox> <mx:Label text="Fichiers CSV uniquement" id="label1"/> </mx:HBox> <mx:Spacer top="10"/> <mx:HRule width="325" horizontalCenter="0" verticalCenter="-150"/> <mx:Spacer top="10"/> <mx:HBox width="100%"> <mx:VBox height="100%" width="100"> <mx:Button label="Traitement" toolTip="Lancer le traitement pour la 'Classification des Sites Radio'" click="{traitementMajPonctuelle()}" themeColor="0xf37021" fillColors="[0xf37021,0xf37021]" fillAlphas="[1.0, 1.0, 1.0, 1.0]"/> </mx:VBox> <mx:Label text="Lancement de la MàJ ponctuelle" paddingTop="4"/> </mx:HBox> <mx:TextArea width="327" height="134" id="textarea1" horizontalCenter="0" verticalCenter="-44" text="Cette fenêtre vous permet d'effecuer les ajustements de priorités, demandés par les régions." editable="false" fontSize="11" color="#2434CD" /> </mx:TitleWindow> <mx:Label text="Ajustement de priorités" styleName="titre2" horizontalCenter="0" y="195"> </mx:Label> </mx:Canvas>
Ma classe PHP est la suivante:
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 [Embed(source="../../css/icones/Down32x32.png")] private var infoIconeClass:Class; /* On fait appel aux différents packages ActionScript utilisés */ import flash.events.DataEvent; import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.rpc.events.ResultEvent; // Personnaliser le curseur "busy" import flash.net.FileFilter; /* Déclaration des variables */ public var fileRef:FileReference = new FileReference(); /* Déclaration des variables faisant le lien avec les vues */ [Bindable] private var fichierAC: ArrayCollection; /*La classe FileFilter permet dindiquer quels fichiers du système de lutilisateur sont répertoriés dans la boîte de dialogue de recherche de fichiers qui saffiche lors de lappel de FileReference.browse() ou FileReferenceList.browse() Syntaxe: [Description (chaîne de caractères), extensions de fichier à proposer à l'utilisateur (*.CSV)] */ public var typesDocuments:FileFilter = new FileFilter("Fichier CSV uniquement(*.csv;)", "*.csv;"); public function upload():void { // listen for the file selected event // listen for the upload complete event fileRef.addEventListener(Event.SELECT, selectHandler); fileRef.addEventListener(Event.COMPLETE, completeHandler); fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteHandler); // browse for the file to upload // when user selects a file the select handler is called try { var success:Boolean = fileRef.browse([typesDocuments]); } catch (error:Error) { trace("Unable to browse for files."); } } // when a file is selected you upload the file to the upload script on the server public function selectHandler(event:Event):void { var request:URLRequest = new URLRequest("http://OBERON/classif/test/flex/uploads/file_upload.php") try { // upload file fileRef.upload(request); //textarea1.text = "uploading " + fileRef.name + "..."; textarea1.text = fileRef.name; //Alert.show( "Upload du fichier fileRef.name réalisé et accepté"); } catch (error:Error) { trace("Unable to upload file."); } } // dispatched when file has been given to the server script. does not receive a response from the server public function completeHandler(event:Event):void { Alert.show("Fichier \""+fileRef.name+"\" transféré avec succès! ", "", Alert.OK, this, null, infoIconeClass); } /*private function initialisation():void { fileRef = new FileReference(); fileRef.addEventListener(Event.SELECT, selectHandler); fileRef.addEventListener(Event.COMPLETE, completeHandler); fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteHandler); //ROService.upload_fichier(); //datagrid_players.addEventListener(DelEvent.DEL_PLAYER, delListPlayers); } */ // dispatched when file has been uploaded to the server script and a response is returned from the server // event.data contains the response returned by your server script public function uploadCompleteHandler(event:DataEvent):void { trace("uploaded... response from server: \n" + String(event.data)); textarea1.text += event.data as String; } // méthode de récupération de tous les joueurs private function traitement_fichierResult(evt:ResultEvent):void { fichierAC = ArrayCollection(evt.result); } private function traitementMajPonctuelleResult(evt:ResultEvent):void { fichierAC = ArrayCollection(evt.result); } /* "Fonction AS faisant appel à la fonction "traitement_fichier" contenu dans la classe "traitement" du fichier "traitement.php" function as --> class traitement -> function traitement_fichier */ private function traitementFichier():void { ROService.traitement_fichier(); } private function traitementMajPonctuelle():void { ROService.traitementMajPonctuelle(); }
Ma fonction "traitementMajPonctuelle" effectue l'import de mon fichier "maj.csv" vers une BDD. Lorsque je fais appel à ma fonction "traitementMajPonctuelle" via le bouton "traitement", au bout d'un moment j'ai l'erreur suivante:
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 <?php class traitement { function traitementMajPonctuelle() { /*================== Début de traitement du fichier maj.csv //==================*/ $fp = fopen("../../../classif/test/flex/uploads/maj.csv","r"); //lecture if (!$fp) { echo "Echec de l'ouverture du fichier"; exit; } else { // votre code; echo "C'est OK"; $hostname = "localhost"; // nom du serveur $database = "classif"; // nom de la base de données $username = "****"; // nom d'utilisateur !!! ATTENTION, ne pas utiliser l'utilisateur root, //dans ce cas, tous les visiteurs auraient tous les droits sur la base $password = "****"; // mot de passe (aucun par défaut mais il est conseillé d'en mettre un) $db = mysql_connect($hostname, $username, $password) or die ("Impossible de se connecter à la base de données, veuillez vérifier les informations de connexion"); //===================== // Initialisation //===================== mysql_select_db($database,$db); while (!feof($fp)) // teste la fin du fichier téléchargé, { // Tant qu'on est pas arrivé à la fin du fichier on continue... $ligne = fgets($fp); // récupère la ligne courante sur laquelle se trouve le pointeur du fichier $liste = explode(";",$ligne); // on place les élements séparés par des points virgule dans un tableau. // ";" étant le séparateur pour un fichier de type CSV // premier élément $liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null; $liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null; $champs1=$liste[0]; $champs2=$liste[1]; $champs1_=rtrim($champs1); // la fonction PHP rtrim() supprime les espaces (ou d'autres caractères) de fin de chaîne $champs2_=rtrim($champs2); // fonction très important sinon toutes les informations insérés seront suivies de "\n\r". // ceci a un impact direct sur l'opération de comptage du nombre total de chaque priorité... // pour eviter qu'un champ "nom" du fichier soit vide if ($champs1!='') { // requete et insertion ligne par ligne // champs1 id en general dc on affecte pas de valeur $query = "REPLACE INTO majPonctuelle (site_theorique,priorite_finale) VALUES('$champs1_','$champs2_')"; $result= mysql_query($query); if (mysql_error()) { echo 'ERREUR DE REQUETE SUR LA BASE'; fclose($fp); // fermeture du fichier exit(); } else { } } } fclose($fp); // fermeture du fichier /*================== Fin de traitement du fichier maj.csv //==================*/ } } } }?>
Quand je teste ma fonction dans le Browser AmfPHP, j'ai l'erreur suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 [RPC Fault faultString="Channel disconnected" faultCode="Client.Error.DeliveryInDoubt" faultDetail="Channel disconnected before an acknowledgement was received"] at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:220] at mx.rpc::Responder/fault()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:53] at mx.rpc::AsyncRequest/fault()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:103] at NetConnectionMessageResponder/channelDisconnectHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:646] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.messaging::Channel/disconnectSuccess()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\Channel.as:1091] at mx.messaging.channels::NetConnectionChannel/internalDisconnect()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:163] at mx.messaging.channels::AMFChannel/internalDisconnect()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\AMFChannel.as:312] at mx.messaging.channels::AMFChannel/statusHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\AMFChannel.as:382]
Et toutes les lignes de mon fichier CSV ne sont pas importées. Quelqu'un saurait d'ou ça vient? Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul. at RawAmfService/readData() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete()
Partager