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

Flex Discussion :

Probleme mise a jour ID objet après insertion en BDD en AS3/FLEX


Sujet :

Flex

  1. #1
    Invité
    Invité(e)
    Par défaut Probleme mise a jour ID objet après insertion en BDD en AS3/FLEX
    Bonjour,

    Petit soucis pour actualisé l'identifiant (id) de mon objet "Voiture" après insertion de l'objet en base.

    Mon Alerte affichant l'id de voiture (idVoiture) dans le fichier "VoitureAS3.as"
    var idVoiture:String = String(obj_voiture.id);
    Alert.show('Après ajout : ' + idVoiture);

    Affiche 0 au lieu de la valeur de l'identifiant ajouter.

    IHM :



    Code SQL Table Voiture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE DATABASE `testvoiture` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
     
    CREATE TABLE `testvoiture`.`voiture` (
    `id` INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `vitesse` INT( 3 ) NOT NULL ,
    `couleur` VARCHAR( 15 ) NOT NULL
    ) ENGINE = MYISAM ;
    Code de la classe PHP (pour amfphp) :

    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
     
    <?php
    class ServiceVoiture
    {
            protected $serveur = 'localhost';
            protected $utilisateur = 'root';
            protected $motDePasse = 'mdproot';
            protected $baseDeDonnees = 'testvoiture';
            protected $connexion = null;
            
            /**
             * Liste des services
             */
            public function __construct()
            {
            }
            
            protected function connect()
            {
                    $this->connexion = mysql_connect($this->serveur, $this->utilisateur, $this->motDePasse);
                    $selectDB = mysql_select_db($this->baseDeDonnees,$this->connexion);
            }
            
            protected function disconnect()
            {
                    if($this->connexion != null) 
                    {
                            mysql_close($this->connexion);
                    }
            }
            
            /**
             * Service qui permet d'obtenir la liste des voitures
             * 
             * @return array Tabeau d'objet
             */
            public function serviceListerVoitures()
            {
                    //Connexion à la base de données
                    $this->connect();
                    
                    //Requête
                    $requete = 'SELECT * FROM voiture';
                    
                    //Stockage du résultat
                    $resultat = mysql_query($requete);
                    
                    //Alimentation d'un tableau avec la liste des voitures
                    while($voiture = mysql_fetch_object($resultat))
                    {
                            $tableauVoitures[] = $voiture;
                    }
                    
                    //Déconexion de la base de donnée
                    $this->disconnect();
                    
                    //Envoi du tableau
                    return $tableauVoitures;
            }
            
            /**
             * Service permettant d'ajouter une nouvelle voiture
             * 
             * @param $vitesse      int Vitesse de la voiture
             * @param $couleur  String Coueur de la voiture
             * @return int Identifiant de la voiture ajoutée
             */
            public function serviceAjoutVoiture($vitesse, $couleur)
            {               
                    //Connexion à la base de données
                    $this->connect();
                    
                    //Requête SQL
                    $requete = "INSERT INTO voiture (vitesse, couleur) VALUES ($vitesse, '$couleur')";                              
     
                    
                    //Stockage du résultat
                    $resultat = mysql_query($requete);              
                    
                    $lastID = mysql_insert_id();
                    
                    //Déconexion de la base de donnée
                    $this->disconnect();
                    
                    //Envoi de la réponse
                    return $lastID;
            }               
            
    }
     
    ?>
    Code fichier Voiture.mxml :

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
     
    	<mx:Script source="VoitureAS3.as"> </mx:Script>
     
    	<mx:Canvas label="cv_voiture" width="100%" height="100%" creationComplete="listerVoitures();">
     
    		<mx:DataGrid id="dg_voitures" x="10" y="10" height="200" dataProvider="{tableauVoitures}" >
    			<mx:columns>
    				<mx:DataGridColumn headerText="Id" dataField="id" width="70"/>
    				<mx:DataGridColumn headerText="Vitesse" dataField="vitesse" width="70"/>
    				<mx:DataGridColumn headerText="Couleur" dataField="couleur" width="100"/>
    			</mx:columns>
    		</mx:DataGrid>
    		<mx:Panel x="260" y="10" width="305" height="200" layout="absolute" title="Nouvelle Voiture" id="pn_voiture">
    			<mx:Form x="10" y="10" width="265" height="87">
    				<mx:FormItem label="Vitesse :" required="true">
    					<mx:TextInput id="txt_vitesse"/>
    				</mx:FormItem>
    				<mx:FormItem label="Couleur" required="true">
    					<mx:TextInput id="txt_couleur"/>
    				</mx:FormItem>
    			</mx:Form>
    			<mx:Button x="99" y="105" label="Ajouter" id="btn_ajouter" click="ajouterVoiture()"/>
    		</mx:Panel>
     
    	</mx:Canvas>
     
    </mx:Application>
    Code de la classe Voiture Action Script 3 (Voiture.as) :

    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
     
    package com.exemple
    {
    	import flash.events.Event;
    	import flash.events.EventDispatcher;
     
    	import mx.controls.Alert;
    	import mx.rpc.events.FaultEvent;
    	import mx.rpc.events.ResultEvent;
    	import mx.rpc.remoting.mxml.RemoteObject;
     
    	public class Voiture extends EventDispatcher
    	{
    		private var _id:int;
    		private var _vitesse:int;
    		private var _couleur:String;
     
    		public function Voiture(p_id:int, p_vitesse:int, p_couleur:String)
    		{
    			_id = p_id;
    			_vitesse = p_vitesse;
    			_couleur = p_couleur;
    		}
     
    		[Bindable("monID")]
    		public function get id():int{
    			return _id;
    		}
     
    		public function set id(param:int):void
    		{
    			_id = param;
    			dispatchEvent(new Event("monID"));
    		}
     
    		public function get vitesse():int{
    			return _vitesse;
    		}
     
    		public function set vitesse(param:int):void
    		{
    			_vitesse = param;
    		}
     
    		public function get couleur():String
    		{
    			return _couleur;
    		}
     
    		public function set couleur(param:String):void
    		{
    			_couleur = param;
    		}
     
     
    		public function ajouter(param:String):void
    		{
    			var service:RemoteObject =  new RemoteObject();
    			service.endpoint = param;
    			service.showBusyCursor = true;
    			service.destination = "amfphp";
    			service.source = "ServiceVoiture";
     
    			// Récupère l'id de la voiture inséré
    			service.serviceAjoutVoiture.addEventListener("result",resultatOKAjoutVoiture);
    			service.serviceAjoutVoiture.addEventListener("fault",resultatKOAjoutVoiture);
    			service.serviceAjoutVoiture(_vitesse, _couleur);
    		}
     
    		public function resultatOKAjoutVoiture(e:ResultEvent):void
    		{		
    			id = int(e.result);
    			Alert.show("Dans classe Voiture : " + String(id));
    		}
     
    		public function resultatKOAjoutVoiture(e:FaultEvent):void
    		{
    			Alert.show(e.fault.faultString, 'Error');
    		}		
     
     
    	}
    }
    Code Action Script 3 du fichier VoitureAS3.as :

    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
     
    import com.exemple.Voiture;
    import mx.controls.Alert;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.remoting.mxml.RemoteObject;
     
    /**************************************************
     * URL de AMFPHP
     **************************************************/
     
    public var URL:String = "http://localhost/amfphp/gateway.php";
     
     
    /**************************************************
     * Appel du service de listing des voitures
     **************************************************/
     
    [Bindable]
    public var tableauVoitures:Array;
     
    public function listerVoitures():void
    {
    	var service:RemoteObject = new RemoteObject();
    	service.endpoint = URL;
    	service.showBusyCursor = true;
    	service.destination = "amfphp";
    	service.source = "ServiceVoiture";
    	service.serviceListerVoitures.addEventListener("result",resultatOKListerVoiture);
    	service.serviceListerVoitures.addEventListener("fault",resultatKOListerVoiture);
    	service.serviceListerVoitures();
    }
     
    public function resultatOKListerVoiture(e:ResultEvent):void
    {
    	tableauVoitures = e.result as Array;
    }
     
    public function resultatKOListerVoiture(e:FaultEvent):void
    {
    	Alert.show(e.fault.faultString, 'Error');
    }
     
     
    /**************************************************
     * Ajout d'une voiture
     **************************************************/
     
    public function ajouterVoiture():void
    {
    	var id:int = 0;
    	var vitesse:int = int(txt_vitesse.text);
    	var couleur:String = txt_couleur.text;
     
    	//Instanciation de la classe Voiture
    	var obj_voiture:Voiture = new Voiture(id, vitesse, couleur);
     
    	//Appel de la méthode d'ajout
    	obj_voiture.ajouter(URL);
     
            //Afficher la valeur de l'identifiant de l'objet voiture ajouter.
    	var idVoiture:String = String(obj_voiture.id);
    	Alert.show('Après ajout : ' + idVoiture);
     
    	//Mise à jour du tableau des voitures
    	listerVoitures();
    }
    Pour les sources : Voiture.zip

    Merci d'avance.
    Dernière modification par Invité ; 24/08/2009 à 22h00.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Bonsoir,

    essaie plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var idVoiture:String = obj_voiture.id.toString();
    [EDIT]
    La documentation expliquant la conversation String vers int et inversement.
    [/EDIT]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci, mais : idVoiture, vaut toujours 0 (dans Alert) même avec cette modification.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Je n'avais pas tout lu désolée
    Au moment où tu affiches ton Alert tu n'as pas encore rechargé ta liste.
    Tu as le même problème dans ta datagrid au moment de l'affichage dans la datagrid ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu as le même problème dans ta datagrid au moment de l'affichage dans la datagrid ?
    Je n'ai aucun problème avec mon datagrid ;-)

    Vu que ma fonction listerVoitures() appellé après l'ajout d'un nouveau objet Voiture en BDD, met a jour mon tableau "tableauVoiture" liée au dataprovider de mon datagrid.

    Au moment où tu affiches ton Alert tu n'as pas encore rechargé ta liste.
    Mon Alert n'a rien a voir avec la datagrid j'aurai pu m'en passer (c'est juste pour voir que une nouvelle voiture a bien été ajouté en base) et seulement mettre les deux champs d'input (txt_vitesse, txt_couleur).

    J'ai besoin de cet "obj_voiture.id" (avec la bonne valeur) pour faire d'autre traitement après (exemple ajout d'objet dans des tables associatives).

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Mais pour voir l'id il faut que tu récupères l'objet dans la base de données. Or le fait de mettre à jour dans la base ne vas pas mettre à jour ton id côté Flex. Il faut le recharger pour ça donc faire une nouvelle requête ou le récupérer dans l'évènement result comme tu le fais avec listerVoiture.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je voulais éviter une requête justement en plus ;-)

    Donc pour ça l'id est récupéré dans le result de la classe Voiture.as (Voiture.as)

    public function ajouter(param:String):void
    {
    var service:RemoteObject = new RemoteObject();
    service.endpoint = param;
    service.showBusyCursor = true;
    service.destination = "amfphp";
    service.source = "ServiceVoiture";

    //Insert et Récupère l'id de la voiture inséré
    service.serviceAjoutVoiture.addEventListener("result",resultatOKAjoutVoiture);
    service.serviceAjoutVoiture.addEventListener("fault",resultatKOAjoutVoiture);
    service.serviceAjoutVoiture(_vitesse, _couleur);
    }

    public function resultatOKAjoutVoiture(e:ResultEvent):void
    {
    // Mise a jour de l'id après insertion
    id = int(e.result);
    Alert.show("Dans classe Voiture : " + String(id));
    }

    public function resultatKOAjoutVoiture(e:FaultEvent):void
    {
    Alert.show(e.fault.faultString, 'Error');
    }
    Alert.show("Dans classe Voiture : " + String(id));

    A la bonne valeur dans la classe Voiture. (l'id est mis a jour)

    Mais j'arrive pas a avoir la bonne valeur, à l'extérieur dans mon fichier VoitureAS3.as , j'ai 0 dedant.

  8. #8
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Visiblement l'id que tu affiches est différent.

    Lorsque tu affiches l'id dans Alert.show("Dans classe Voiture : " + String(id));,
    tu récupères la valeur de retour du service soit mysql_insert_id().

    Alors que dans VoitureAs3.as, tu récupères l'id de l'objet que tu viens de créer (soit ici 0), et non celui inséré en base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            var id:int = 0;
     
    	var obj_voiture:Voiture = new Voiture(id, vitesse, couleur);
     
    //	obj_voiture.ajouter(URL);
     
    	var idVoiture:String = String(obj_voiture.id);
    	Alert.show('Après ajout : ' + idVoiture);
    N'oubliez pas avant de poster :

  9. #9
    Membre averti Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Points : 310
    Points
    310
    Par défaut
    je pense aussi que l'ID que tu affiche est different de celui que tu recupere, pourquoi tu passe pas par une class Model dans la quelle tu sauvgarde les données transverse à ton application comme ID, cette classe est un singleton donc tu as une seule reference dans l'application

    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
    package toto.toto.toto
    {
    public class ApplicationState
    {
       // tu declare ton ID il sera visible dans toute l'appli par l'instanstion d'objet de type ApplicationState
     
     
    /**
    	 * Constructor.
    	 */
    	public function ApplicationState(enforcer:SingletonEnforcer)
    	{
    		if(instance != null)
    			throw new Error("This instance can be declared just once");
    	}
     
    	/**
    	 * Returns the Singleton instance.
    	 */
    	public static function getInstance():ApplicationState
    	{
    		if ( !instance )
    			instance = new ApplicationState(new SingletonEnforcer());
    		return instance;
    	}
     
    }
    }
     
     
     
    internal class SingletonEnforcer {}
    http://www.m-ataf.com (En cours de construction)

  10. #10
    Invité
    Invité(e)
    Par défaut
    oui, c'est bien ça mon problème "Krazymins" ;-)

    je pensais que faire un simple dispatchEvent sur la fonction set id() et un bindable sur la fonction get id() dans la classe Voiture.as suffirait a faire actualisé l'id dans le script VoitureAS3.as


    Je vais essayer de mettre en place ce que tu proposes "samy2525", soit une class Model. (je suis tout de même débutant en Flex et pas un adepte des Pattern )

  11. #11
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Ah désolé, je pensais que tu ne comprenais pas pourquoi tu avais 0 dans ta valeur.

    Effectivement tu peux créer un model représentant un singleton.

    Ou bien créer une classe VoitureEvent, qui étend la classe Event, et dans laquel tu places des variables (id au moins).Ensuite tu dispatch cet event et avec un listener tu recupere la valeur de l'id.

    Ca rejoint un peu ce que dit samy2525 mais ici on se base directement sur un event qui transporte des données, et que l'on peut catcher de n'importe où.

    fichier VoitureEvent.as
    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
     
     
     
    package org.events
    {
       public class VoitureEvent extends Event
       {
         static const ID_SUBMITTED_RESULT = "idSubmittedResult";
         static const ID_SUBMITTED_FAILURE = "idSubmittedFailure";
     
         private var _id:int;
         public get id():int{return _id;}
         public set id(i:int):void{_id = id;}
       }
    }

    fichier Voiture.as
    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
     
    import org.events;
     
    public function resultatOKAjoutVoiture(e:ResultEvent):void
    { 
            // Mise a jour de l'id après insertion
            id = int(e.result);
            Alert.show("Dans classe Voiture : " + String(id));
            // création d'un nouvel event (VoitureEvent)
            var evt:VoitureEvent = new VoitureEvent(VoitureEvent.ID_SUBMITTED_RESULT);
            // on affecte le nouvel id
            evt.id = id;
            // on dispatch l'event
            dispatchEvent(evt);
    }
    Et dans VoitureAs3.as :
    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
     
    import org.events;
     
       public function ajouterVoiture():void
       {
    	var id:int = 0;
    	var vitesse:int = int(txt_vitesse.text);
    	var couleur:String = txt_couleur.text;
     
    	var obj_voiture:Voiture = new Voiture(id, vitesse, couleur);
    	obj_voiture.ajouter(URL);
            // on écoute sur l'objet voiture l'event que l'on veut catcher 
            obj_voiture.addEventListener(VoitureEvent.ID_SUBMITTED_RESULT, displayId);
        }
     
        public function dispayId(e:VoitureEvent)
       {
            // on récupère l'id de l'event que l'on vient d'attraper
            var idVoiture:String = String(e.id);
            Alert.show('Après ajout : ' + idVoiture);
       }
    N'oubliez pas avant de poster :

  12. #12
    Invité
    Invité(e)
    Par défaut
    Je me suis peut être mal exprimer :
    dans VoitureAs3.as, c'est l'id de l'objet inséré en base que je veux.

    Krazymins Ta solution marche pas

    petites corrections du code du fichier : VoitureEvent.as en passant ;-)

    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
     
    package org.events;
    {
    	import flash.events.Event;
     
    	public class VoitureEvent extends Event
    	{
    		public function VoitureEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
    		{
    			super(type, bubbles, cancelable);
    		}
     
    		public static const ID_SUBMITTED_RESULT:String = "idSubmittedResult";
       		public static const ID_SUBMITTED_FAILURE:String = "idSubmittedFailure";
     
       		private var _id:int;
       		public function get id():int{return _id;}
      	 	public function set id(i:int):void{_id = id;}
    	}
    }

  13. #13
    Invité
    Invité(e)
    Par défaut
    Pour ce que tu me disais "samy2525" c'est à ça que tu pensais ??
    (Fichier VoitureSingleton.as à la place de Voiture.as)

    si c'est pas ça , je capte pas. Tu peux donnée le code, STP?

    fichier VoitureSingleton.as

    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
     
    package com.exemple
    {
    	import mx.controls.Alert;
    	import mx.rpc.events.FaultEvent;
    	import mx.rpc.events.ResultEvent;
    	import mx.rpc.remoting.mxml.RemoteObject;
     
    	public class VoitureSingleton
    	{
    		private static var _instance:VoitureSingleton = null;
     
    		public var id:int;
    		public var vitesse:int;
    		public var couleur:String;
     
    		public function VoitureSingleton()
    		{
    		}
     
    		public static function getInstance():VoitureSingleton
    		{
    			if(_instance == null)
    			{
    				_instance = new VoitureSingleton();
    			}
    			return _instance;
    		}
     
    		public function ajouter(param:String):void
    		{
    			var service:RemoteObject =  new RemoteObject();
    			service.endpoint = param;
    			service.showBusyCursor = true;
    			service.destination = "amfphp";
    			service.source = "ServiceVoiture";
     
    			// Récupère l'id de la voiture inséré
    			service.serviceAjoutVoiture.addEventListener("result",resultatOKAjoutVoiture);
    			service.serviceAjoutVoiture.addEventListener("fault",resultatKOAjoutVoiture);
    			service.serviceAjoutVoiture(vitesse, couleur);
    		}
     
    		public function resultatOKAjoutVoiture(e:ResultEvent):void
    		{		
    			id = int(e.result);
    			Alert.show("Dans classe Voiture : " + String(id));
    		}
     
    		public function resultatKOAjoutVoiture(e:FaultEvent):void
    		{
    			Alert.show(e.fault.faultString, 'Error');
    		}			
     
    	}
    }
    et dans le fichier VoitureAS3.as :

    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
     
    public function ajouterVoiture():void
    {
    	var id:int = 0; // Valeur initial
    	var vitesse:int = int(txt_vitesse.text);
    	var couleur:String = txt_couleur.text;
     
    	//Instanciation de la classe Anime
    	var obj_voiture:Voiture = VoitureSingleton.getInstance();
     	obj_voiture.id = id;
     	obj_voiture.vitesse = vitesse;
     	obj_voiture.couleur = couleur;
     
    	//Appel de la méthode d'ajout
    	obj_voiture.ajouter(URL);
     
    	//Id après ajout que je veux
    	var idVoiture:String = String(obj_voiture.id);
     
    	Alert.show('Après ajout : ' + idVoiture);
    }
    Si c'est ça, bah : j'ai toujours 0

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Bon j'ai pas tout lu mais première remarque dans ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	//Appel de la méthode d'ajout
    	obj_voiture.ajouter(URL);
     
    	//Id après ajout que je veux
    	var idVoiture:String = String(obj_voiture.id);
     
    	Alert.show('Après ajout : ' + idVoiture);
    C'est normal que tu ais 0 comme valeur.
    En effet tu lis la valeur obj_voiture.id avant d'avoir reçu le résultat de la requête.

    Par contre est-ce que dans l'événement resultatOKAjoutVoiture tu as également 0 ?
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  15. #15
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Je me suis peut être mal exprimer :
    dans VoitureAs3.as, c'est l'id de l'objet inséré en base que je veux.

    Krazymins Ta solution marche pas

    petites corrections du code du fichier : VoitureEvent.as en passant ;-)
    Si tu as fait un copier coller sous flex builder c'est pas étonnant, je l'ai tappé en mode texte directement car faute de compilo sous la main.

    Ce que je te donnais c'était plus un piste qui devrait marcher à 2-3 erreurs de syntaxe prêt
    N'oubliez pas avant de poster :

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jylaxx Voir le message
    Bon j'ai pas tout lu mais première remarque dans ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	//Appel de la méthode d'ajout
    	obj_voiture.ajouter(URL);
     
    	//Id après ajout que je veux
    	var idVoiture:String = String(obj_voiture.id);
     
    	Alert.show('Après ajout : ' + idVoiture);
    C'est normal que tu ais 0 comme valeur.
    En effet tu lis la valeur obj_voiture.id avant d'avoir reçu le résultat de la requête.

    Par contre est-ce que dans l'événement resultatOKAjoutVoiture tu as également 0 ?
    j'ai la bonne valeur id dans resultatOKAjoutVoiture

  17. #17
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Krazymins Ta solution marche pas
    Héhé je veux bien que tu me dises pourquoi

    (j'ai quelque chose de similaire sous les yeux qui marche très bien)
    C'était un soucis de syntaxe ou quelquechose comme ça ?
    quel est ton message d'erreur?
    N'oubliez pas avant de poster :

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j'ai la bonne valeur id dans resultatOKAjoutVoiture
    Et donc ton problème est résolu, NON ?
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Krazymins Voir le message
    Héhé je veux bien que tu me dises pourquoi

    (j'ai quelque chose de similaire sous les yeux qui marche très bien)
    C'était un soucis de syntaxe ou quelquechose comme ça ?
    quel est ton message d'erreur?
    Bah, j'ai toujours 0
    Mon pc est peut être hanté lol



    fichier VoitureEvent.as :

    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
     
    package com.exemple
    {
    	import flash.events.Event;
     
    	public class VoitureEvent extends Event
    	{
    		public function VoitureEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
    		{
    			super(type, bubbles, cancelable);
    		}
     
    		public static const ID_SUBMITTED_RESULT:String = "idSubmittedResult";
       		public static const ID_SUBMITTED_FAILURE:String = "idSubmittedFailure";
     
       		private var _id:int;
       		public function get id():int{return _id;}
      	 	public function set id(i:int):void{_id = id;}
    	}
    }
    fichier Voiture.as :

    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
     
    package com.exemple
    {
    	import flash.events.Event;
    	import flash.events.EventDispatcher;
     
    	import mx.controls.Alert;
    	import mx.rpc.events.FaultEvent;
    	import mx.rpc.events.ResultEvent;
    	import mx.rpc.remoting.mxml.RemoteObject;
     
    	public class Voiture extends EventDispatcher
    	{
    		private var _id:int;
    		private var _vitesse:int;
    		private var _couleur:String;
     
    		public function Voiture(p_id:int, p_vitesse:int, p_couleur:String)
    		{
    			_id = p_id;
    			_vitesse = p_vitesse;
    			_couleur = p_couleur;
    		}
     
    		[Bindable("monID")]
    		public function get id():int{
    			return _id;
    		}
     
    		public function set id(param:int):void
    		{
    			_id = param;
    			dispatchEvent(new Event("monID"));
    		}
     
    		public function get vitesse():int{
    			return _vitesse;
    		}
     
    		public function set vitesse(param:int):void
    		{
    			_vitesse = param;
    		}
     
    		public function get couleur():String
    		{
    			return _couleur;
    		}
     
    		public function set couleur(param:String):void
    		{
    			_couleur = param;
    		}
     
     
    		public function ajouter(param:String):void
    		{
    			var service:RemoteObject =  new RemoteObject();
    			service.endpoint = param;
    			service.showBusyCursor = true;
    			service.destination = "amfphp";
    			service.source = "ServiceVoiture";
     
    			// Récupère l'id de la voiture inséré
    			service.serviceAjoutVoiture.addEventListener("result",resultatOKAjoutVoiture);
    			service.serviceAjoutVoiture.addEventListener("fault",resultatKOAjoutVoiture);
    			service.serviceAjoutVoiture(_vitesse, _couleur);
    		}
     
    		public function resultatOKAjoutVoiture(e:ResultEvent):void
    		{ 
    		        // Mise a jour de l'id après insertion
    		        id = int(e.result);
    		        Alert.show("Dans classe Voiture : " + String(id));
     
    		        // création d'un nouvel event (VoitureEvent)
    		        var evt:VoitureEvent = new VoitureEvent(VoitureEvent.ID_SUBMITTED_RESULT);
     
    		        // on affecte le nouvel id
    		        evt.id = id;
     
    		        // on dispatch l'event
    		        dispatchEvent(evt);
    		}
     
     
    		public function resultatKOAjoutVoiture(e:FaultEvent):void
    		{
    			Alert.show(e.fault.faultString, 'Error');
    		}		
     
     
    	}
    }
    fichier voitureAS3.as :

    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
     
    // ActionScript file
    import com.exemple.Voiture;
    import com.exemple.VoitureEvent;
     
    import mx.controls.Alert;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.remoting.mxml.RemoteObject;
     
    /**************************************************
     * URL de AMFPHP
     **************************************************/
     
    public var URL:String = "http://localhost/amfphp/gateway.php";
     
     
    /**************************************************
     * Appel du service de listing des voitures
     **************************************************/
     
    [Bindable]
    public var tableauVoitures:Array;
     
    public function listerVoitures():void
    {
    	var service:RemoteObject = new RemoteObject();
    	service.endpoint = URL;
    	service.showBusyCursor = true;
    	service.destination = "amfphp";
    	service.source = "ServiceVoiture";
    	service.serviceListerVoitures.addEventListener("result",resultatOKListerVoiture);
    	service.serviceListerVoitures.addEventListener("fault",resultatKOListerVoiture);
    	service.serviceListerVoitures();
    }
     
    public function resultatOKListerVoiture(e:ResultEvent):void
    {
    	tableauVoitures = e.result as Array;
    }
     
    public function resultatKOListerVoiture(e:FaultEvent):void
    {
    	Alert.show(e.fault.faultString, 'Error');
    }
     
     
    /**************************************************
     * Ajout d'une voiture
     **************************************************/
     
    public function ajouterVoiture():void
    {
    	var id:int = 0;
    	var vitesse:int = int(txt_vitesse.text);
    	var couleur:String = txt_couleur.text;
     
    	var obj_voiture:Voiture = new Voiture(id, vitesse, couleur);
    	obj_voiture.ajouter(URL);
     
    	// on écoute sur l'objet voiture l'event que l'on veut catcher 
    	obj_voiture.addEventListener(VoitureEvent.ID_SUBMITTED_RESULT, displayId);
    }
     
    public function displayId(e:VoitureEvent):void
    {
    	// on récupère l'id de l'event que l'on vient d'attraper
    	var idVoiture:String = String(e.id);
    	Alert.show('Après ajout : ' + idVoiture);
    }
    je veux bien, que tu me donnes ton dossiers projet avec les sources si ça marche chez toi ;-)

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Bonsoir,
    Je ne sais pas si c'est une erreur de copier coller mais dans ton code tu déclares i puis tu utilises id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      	 	public function set id(i:int):void{_id = id;}
    Ton 0 vient probablement de là ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. pb de mise à jour de somme apres insertion
    Par Calimero33 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/07/2010, 07h31
  2. probleme mise a jour des paquets
    Par raphsimo dans le forum Debian
    Réponses: 1
    Dernier message: 10/02/2009, 00h27
  3. [AJAX] Mise a jour d'un div pendant l'execution
    Par jinpol dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/08/2007, 14h31
  4. [CKEditor] Probleme pour afficher le code html apres insertion dans bdd
    Par Pepito2030 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 28/12/2006, 21h52
  5. Problème mise à jour SUDO avec apt
    Par byloute dans le forum Debian
    Réponses: 6
    Dernier message: 27/10/2005, 09h14

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