Comunidad de diseño web y desarrollo en internet online

Duda tutorial Flex

Citar            
MensajeEscrito el 04 Sep 2007 08:57 pm
Hola! Estoy empezando con el flex, y he visto este tuto (de la seccion tutoriales) [url] http://www.cristalab.com/tutoriales/204/tutorial-de-flex-2-con-weborb-php-y-acceso-a-base-de-datos[/url]

El caso es que llevo todo el dia intentado adaptarlo a mi proyecto pero no hay forma. Les dejo el codigo:

Código :


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="*" backgroundGradientColors="[#ffffff, #f0f0f0]" backgroundGradientAlphas="[1, 1]" verticalScrollPolicy="auto" >
   
   
   
   <mx:states>
      <mx:State name="panel_error">
         <mx:RemoveChild target="{linkbutton1}"/>
         <mx:RemoveChild target="{label1}"/>
         <mx:AddChild position="lastChild">
            <mx:LinkButton label="www.ahorrardinero.es" click="navigateToURL(new URLRequest('http://www.ahorrardinero.es'),'_blank')" color="#0080ff" id="linkbutton0" bottom="68" right="158" width="145"/>
         </mx:AddChild>
         <mx:AddChild position="lastChild">
            <mx:Label text="(c) 2007 Global Finanzas. Todos los derechos reservados" left="10" bottom="70" width="325" id="label0"/>
         </mx:AddChild>
         <mx:RemoveChild target="{panel_id}"/>
         <mx:AddChild position="lastChild">
            <mx:Panel width="422" height="225" layout="absolute" horizontalCenter="20" verticalCenter="-78.5" title="Error de conexión" fontFamily="Verdana" fontWeight="bold" cornerRadius="10" color="#000000" backgroundColor="#ffffff" id="panel_error" backgroundAlpha="1.0" alpha="1.0">
               <mx:Label y="90" text="e-mail:" horizontalCenter="-113"/>
               <mx:TextInput y="86" width="187" fontFamily="Verdana" horizontalCenter="13.5"/>
               <mx:Button y="135" label="Aceptar" width="112" horizontalCenter="-126" id="button0" />
               <mx:Button x="282" y="135" label="Volver atrás" click="atras()"/>
               <mx:TextArea borderColor="#ffffff" x="10" y="10" width="382" height="72" color="#ff0000">
                  <mx:text>Se ha producido un error al intentar conectar al usuario. El login o clave no son correctos. Puede ingresar su e-mail para recibir los datos de acceso por correo, o bien puede volver a intentar conectarse mediante el botón "Volver atrás"</mx:text>
               </mx:TextArea>
            </mx:Panel>
         </mx:AddChild>
      </mx:State>
   </mx:states>
   
   <mx:Panel width="422" height="225" layout="absolute" horizontalCenter="20" verticalCenter="-78.5" title="Identificación de usuario" fontFamily="Verdana" fontWeight="bold" cornerRadius="10" color="#000000" backgroundColor="#ffffff" id="panel_id">
      <mx:Label y="50" text="Login:" horizontalCenter="-113"/>
      <mx:TextInput y="46" width="187" fontFamily="Verdana" horizontalCenter="13.5" id="login"/>
      <mx:Label y="93" text="Clave:" horizontalCenter="-113"/>
      <mx:TextInput y="89"  width="187" fontFamily="Verdana" horizontalCenter="13.5" id="clave"/>
      <mx:Button y="125" label="Aceptar" width="112" horizontalCenter="23.5" id="btnAceptar" click="onButtonPress(event);" />
   </mx:Panel>
   <mx:Image y="58" source="imagenes/Logo_Grande.gif" horizontalCenter="-17.5"/>
   <mx:Label text="Extranet Global Finanzas" styleName="appTitle" fontSize="20" color="#c0c0c0" left="10" top="10" fontStyle="italic"/>
   <mx:LinkButton label="www.ahorrardinero.es" click="navigateToURL(new URLRequest('http://www.ahorrardinero.es'),'_blank')" color="#0080ff" id="linkbutton1" bottom="10" right="158" width="145"/>
   <mx:Label text="(C) {a.getFullYear()} Global Finanzas. Todos los derechos reservados" left="10" bottom="12" width="459" id="label1"/>

<!--
Usaremos el remoteObject para acceder a nuestro servicio en php. En "destination" ponemos el 
id que hemos definido en remoting-config.xml. Ponemos el parámetro showBusyCursor en true para
que nos salga un relojito en el cursor mientras estamos esperando las operaciones.
-->
<mx:RemoteObject id="remoteObject" destination="misquerys" showBusyCursor="true">
    <!--
    Definimos listeners distintos result y el mismo de fault (error) para cada una de las funciones
    de la clase de php. Los listeners se invocarán cuando se complete la función y devuelva un 
    resultado, event.result.
    
    -->

<mx:method name="consulta" result="consulta_Result(event)" fault="onFault(event)"/>

</mx:RemoteObject>




<!--Funciones -->

<mx:Script>
    <![CDATA[ 
    

       
 //Importamos la clase ArrayCollection, que usaremos en el DataProvider.
    import mx.collections.ArrayCollection;
   
    //Importamos las clases para trabajar con los remoteObjects de WebOrb
    import mx.rpc.remoting.*;
    import mx.controls.*;
    import mx.rpc.events.*
    //Importamos los detectores de eventos
    import flash.events.Event; 

        //
  ///////////////////////////////////////////////////////
       import mx.controls.Alert;    //Control "Alerta"
      public var Alerta:Alert;
     
///////////////////////

[Bindable]
        private var resultado:ArrayCollection
        
        
 //Al ejecutarse una consulta...
        private function consulta_Result(event:ResultEvent):void{
            //rellenamos la variable resultado con los datos obtenidos en la consulta,
            //tratando de convertirlos en un Array usando el operador "as".
            resultado=new ArrayCollection(event.result as Array);
            //Si hay al menos un registro...
            if (event.result){
                estadotxt.text="Consulta completada";
            //Si no...
            }else{
                estadotxt.text="No hay registro que mostrar";
            }
        }
        //        
        //Muestra el error al no poder ejecutarse alguna función
        public static function onFault(event:FaultEvent):void 
    {
      Alert.show(event.fault.faultString, 'Error');
    }
        
        
     //Esto pasará cada vez que se pusle un botón:
    private function onButtonPress(event:Event):void{   
             
        remoteObject.dame_user(escape(login.text),escape(clave.text));
            estadotxt.text="Consultando...";
    }
        
        
        
        
        
        
        
        
        
 
////////// Volver atras para reintentar identificarse

public function atras():void{
currentState="";
}
//Año actual para mostrar en el copyright
public var a:Date=new Date();

///////////////
    ]]>
</mx:Script>
   <mx:Text x="183" y="289" text="Text" id="estadotxt" width="323"/>



         
<!--Fin de las funciones-->
</mx:Application>


Al pulsar le boton "Aceptar", me llama a la funcion "onButtonPress" y nada mas, el texto "estadotxt" se queda "Consultando..."

Alguien sabe porque no funciona??? :crap:

Mil gracias desde ya

Por Prometeo2006

122 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Sep 2007 01:16 pm
¿Probaste primero si te salía el tutorial tal como es?
De todas formas, lee por aquí:
http://www.cristalab.com/foros/viewtopic.php?t=41777&highlight=weborb
http://www.cristalab.com/foros/viewtopic.php?t=40709&highlight=weborb
http://www.cristalab.com/foros/viewtopic.php?t=44963&highlight=weborb

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 05 Sep 2007 02:30 pm
Hola ! Antes de nada, mil gracias por tu ayuda :)

Te comento: El ejemplo lo he probado tal y como viene en el tuto, siguiendo todos los pasos, y todo funciona perfectamente, sin problemas. El caso es que quiero adaptarlo para que me compruebe los datos de acceso de la tabla "usuarios", es decir, que verifique si el login y la clave son corrrectos, los tipico. Este es el codigo que uso:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="*" backgroundGradientColors="[#ffffff, #f0f0f0]" backgroundGradientAlphas="[1, 1]" verticalScrollPolicy="auto"  fontFamily="Verdana">
   

   <mx:Panel width="422" height="225" layout="absolute" horizontalCenter="20" verticalCenter="-78.5" title="Identificación de usuario" fontFamily="Verdana" fontWeight="bold" cornerRadius="10" color="#000000" backgroundColor="#ffffff" id="panel_id">
      <mx:Label y="50" text="Login:" horizontalCenter="-113"/>
      <mx:TextInput y="46" width="187" fontFamily="Verdana" horizontalCenter="13.5" id="login"/>
      <mx:Label y="93" text="Clave:" horizontalCenter="-113"/>
      <mx:TextInput y="89"  width="187" displayAsPassword="true" fontFamily="Verdana" horizontalCenter="13.5" id="clave"/>
      <mx:Button y="125" label="Aceptar" width="112" horizontalCenter="23.5" id="btnAceptar" click="onButtonPress(event);" />

   </mx:Panel>
   <mx:Image y="58" source="imagenes/Logo_Grande.gif" horizontalCenter="-17.5"/>
   <mx:Label text="Extranet Global Finanzas" styleName="appTitle" fontSize="20" color="#c0c0c0" left="10" top="10" fontStyle="italic"/>
   <mx:LinkButton label="www.ahorrardinero.es" click="navigateToURL(new URLRequest('http://www.ahorrardinero.es'),'_blank')" color="#0080ff" id="linkbutton1" bottom="10" right="158" width="145"/>
   <mx:Label text="(C) {a.getFullYear()} Global Finanzas. Todos los derechos reservados" left="10" bottom="12" width="459" id="label1"/>


<mx:RemoteObject id="remoteObject" destination="misquerys" showBusyCursor="true">


<mx:method name="dame_user"  result="dame_user_Result(event)" fault="onFault(event)"/>

</mx:RemoteObject>

<!--Funciones -->

<mx:Script>
    <![CDATA[ 
           
 //Importamos la clase ArrayCollection, que usaremos en el DataProvider.
    import mx.collections.ArrayCollection;
   
    //Importamos las clases para trabajar con los remoteObjects de WebOrb
    import mx.rpc.remoting.*;
    import mx.controls.*;
    import mx.rpc.events.*
    //Importamos los detectores de eventos
    import flash.events.Event; 

        //
  ///////////////////////////////////////////////////////
       import mx.controls.Alert;    //Control "Alerta"
      public var Alerta:Alert;
     
///////////////////////

[Bindable]
        private var resultado:ArrayCollection
        
        
 //Al ejecutarse una consulta...
        private function dame_user_Result(event:ResultEvent):void{
            //rellenamos la variable resultado con los datos obtenidos en la consulta,
            //tratando de convertirlos en un Array usando el operador "as".
            resultado=new ArrayCollection(event.result as Array);
            //Si todo salió bien...
            if (event.result){
                estadotxt.text="User OK!!!";
               
            //Si no...
            }else{
                estadotxt.text="No hay user!";
            }
        }
        //        
        //Muestra el error al no poder ejecutarse alguna función
        public static function onFault(event:FaultEvent):void 
    {
      Alert.show(event.fault.faultString, 'Error');
    }
        
        
     //Esto pasará cada vez que se pusle el botón:
    private function onButtonPress(event:Event):void{   
        remoteObject.dame_user(escape(login.text),escape(clave.text));
        estadotxt.text="Consultando...";

    }
        
   ]]>
</mx:Script>
   <mx:Text text="Text" id="estadotxt" width="323" horizontalCenter="19" verticalCenter="98" color="#008000" fontWeight="bold" fontSize="12" fontFamily="Arial"/>
   



         
<!--Fin de las funciones-->
</mx:Application>




Como digo, al insertar un login y una clave, siempre me duvuelve el mensaje "User OK!" aunque los datos no sean correctos. La funcion "dame_user" del PHP es esta:

Código :

function dame_user($login,$clave){
                $login = utf8_encode($login);
                $clave = utf8_encode($clave);
                $sql= "SELECT * FROM usuarios WHERE login='".$login."' AND clave='".$clave."' LIMIT 1";
                return $this->query($sql,0); //retornamos el id de nuestro registro insertado

        }




Alguna idea ? :crap:

Gracias de nuevo por todo!!

Código :

					

Por Prometeo2006

122 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Sep 2007 04:01 pm

Prometeo2006 escribió:


Al pulsar le boton "Aceptar", me llama a la funcion "onButtonPress" y nada mas, el texto "estadotxt" se queda "Consultando..."


Como digo, al insertar un login y una clave, siempre me duvuelve el mensaje "User OK!" aunque los datos no sean correctos.


Veo que has avanzado ^^

Ahora se trata de comprobar qué es lo que devuelve la función a Flex (puedes usar el debugger para eso) y ver donde está el fallo.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 05 Sep 2007 04:42 pm
Hola de nuevo! :)

Muchas gracias por tu ayuda, pero la verdad es que no me sale ni a la de tres... :crap:

Te cuento: He probado usando una de las funciones de tu ejemplo, y me inserta el registro en la BBDD de pruebas, la del tuto, aunque el texto "estadotx" se queda en "Consultando..."

Por otro lado, usando la funcion

Código :

function dame_user($login,$clave){
                $login = utf8_encode($login);
                $clave = utf8_encode($clave);
                $sql= "SELECT * FROM usuarios WHERE login='".$login."' AND clave='".$clave."' LIMIT 1";
                return $this->query($sql,0); //retornamos el id de nuestro registro insertado

        }


Por supuesto, cuando uso esta función, cambio los datos de conexión a mi BBDD. Al pulsar el boton "Aceptar" (con independencia de las variables que le pase) que sale "Consultando..." y "User OK!", es decir, que no me dice si el login y la clave son correctos.

Si no supone mucha molestia, Me podrías poner un ejemplo? Dos input para introducir el login y la clave, y un boton para validar. Siento molestar tanto, pero Flex me parece my interesante, y me gustaria empezar a desarrollar algo :wink:

Muchas gracias de nuevo!!![/code]

Por Prometeo2006

122 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Sep 2007 09:46 pm
Mira si esto te sirve:
http://www.cristalab.com/foros/viewtopic.php?t=30603&highlight=login+flex

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 06 Sep 2007 08:36 am
Hola de nuevo! Muchas gracias por tu ayuda y sobre todo por tu paciencia... :oops:

He leido el tuto que me pones, pero prefiero el metodo de los "RemoteObjects" que usas en tu tuto, me parece mas facil, sobre todo para empezar. Te ruego que le eches un vistazo al codigo que te pongo, a ver si ves donde está el "gato", porque lo probado incluso poniendo en el php una funcion para sumar dos numeros, y siempre igual: EL estado del texto "estadotxt" siempre es "Consultando..."

Código :

<mx:RemoteObject id="remoteObject" destination="misquerys" showBusyCursor="true">
  <mx:method name="dame_user"  result="dame_user_Result(event)" fault="onFault(event)"/>
</mx:RemoteObject>

<!--Funciones -->

<mx:Script>
    <![CDATA[ 
          
 //Importamos la clase ArrayCollection, que usaremos en el DataProvider.
    import mx.collections.ArrayCollection;
       //Importamos las clases para trabajar con los remoteObjects de WebOrb
    import mx.rpc.remoting.*;
    import mx.controls.*;
    import mx.rpc.events.*
    //Importamos los detectores de eventos
    import flash.events.Event; 
  ///////////////////////////////////////////////////////
      import mx.controls.Alert;    //Control "Alerta"
      public var Alerta:Alert;
     
///////////////////////

[Bindable]
        private var resultado:ArrayCollection
        
        
 //Al ejecutarse una consulta...
        private function dame_user_Result(event:ResultEvent):void{
            //rellenamos la variable resultado con los datos obtenidos en la consulta,
            //tratando de convertirlos en un Array usando el operador "as".
            resultado=new ArrayCollection(event.result as Array);
            //Si todo salió bien...
            if (event.result){
                estadotxt.text="User OK!!!";
               
            //Si no...
            }else{
                estadotxt.text="No hay user!";
            }
        }
        //        
        //Muestra el error al no poder ejecutarse alguna función
        public static function onFault(event:FaultEvent):void 
    {
      Alert.show(event.fault.faultString, 'Error');
    }
                
     //Esto pasará cada vez que se pusle el botón:
    private function onButtonPress(event:Event):void{   
        remoteObject.dame_user(escape(login.text),escape(clave.text));
        estadotxt.text="Consultando...";

    }
             



Que opinas ? Muchas gracias de nuevo.[/code]

Por Prometeo2006

122 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Sep 2007 04:21 pm
Hola de nuevo! Por fin!!! :D Después de releer deteninademente tu tuto y consultar la web de WebOrb, parece que estoy sacandole punta al tema...

De todas formas, muchas gracias por tu ayuda, si alguna vez pasas por Alicante, te invito a una cerveza :wink:

Saludos!

Por Prometeo2006

122 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Sep 2007 01:14 am
Puedes poner donde estaba el problema, porque de hecho, no consigo verlo.

Y gracias XD

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 07 Sep 2007 06:49 am
Hola! El problema estaba en el php, uno de mis despistes...

Por cierto, un par de preguntillas, ya que estamos...Esto no me funciona, me sale el "Channel disconnected":

Código :

<?php

class funciones{

//Función para conectar a la BBDD

function conectarBBDD(){
$conexion = mysql_pconnect("localhost","root", "root") or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db("globalfinanzas",$conexion);
}

// Funci�n para validar usuario (login)

function validar_user($login,$clave){

conectarBBDD();

$sql="SELECT * FROM usuarios WHERE login='$login' and clave='$clave' ";
$consulta = mysql_query($sql, $conexion) or die(mysql_error());
$row_consulta = mysql_fetch_assoc($consulta);
 //
    
    mysql_close($conexion);
    
     return $row_consulta;
     

}

}  
 ?>


Sin embargo, esto si que funciona:

Código :

<?php

class funciones{


// Funci�n para validar usuario (login)

function validar_user($login,$clave){
$conexion = mysql_pconnect("localhost","root", "root") or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db("globalfinanzas",$conexion);
$sql="SELECT * FROM usuarios WHERE login='$login' and clave='$clave' ";
$consulta = mysql_query($sql, $conexion) or die(mysql_error());
$row_consulta = mysql_fetch_assoc($consulta);
 //
    
    mysql_close($conexion);
    
     return $row_consulta;
     

}

}  
 ?>


Alguan idea? Por cierto, Como se consulta el array "resultado"? Es que tengo esto (en la funcion "validar_user_Result"):

Código :

 resultado=new ArrayCollection(event.result as Array);
  
            //Si todo salió bien...
            if (event.result){
               if(resultado[0]){
                estadotxt.text="User OK!";
                                 }else{
                                       estadotxt.text="user no valido!";
                                 }
             
                      //Si no...
            }else{
             estadotxt.text="Error de aplicación";
            }


Pero me sale una ventana de flash con una lista de errores, Que puedo hacer?

Por Prometeo2006

122 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Sep 2007 09:49 pm
en tu codigo php

para acceder a la funcion de conexion que esta definida en la clase
debes poner

Código :

function validar_user($login,$clave){
 $this -> conectarBBDD();


y tu pones:

Código :

function validar_user($login,$clave){
conectarBBDD();

Por pinocho

78 de clabLevel



Genero:Masculino  

Luna City

firefox
Citar            
MensajeEscrito el 26 Sep 2007 07:59 am
Hola! Muchas gracias por tu respuesta, pero el error sigue igual: "Channel disconected"

Por Prometeo2006

122 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.