Comunidad de diseño web y desarrollo en internet online

PHP, FLEX, MYSQL, weborb PRPBLEMAS

Citar            
MensajeEscrito el 09 Oct 2010 08:13 am
Hola a todos no se que estare asiendo mal .. les muestro lo que tengo a travez de una imagen

[img]http://l4c.me/fotos/shinodax/phpyflex[/img]

y los codigo

PHP

Código PHP :

<?php

class misquerys{

        
        function insertar($nombre,$comentarios){
                $nombre = utf8_encode($nombre);
                $comentarios = utf8_encode($comentarios);
                $sql= "INSERT INTO prueba (id,nombre,comentarios) VALUES ('','".$nombre."','".$comentarios."')";
                return $this->query($sql,1); //retornamos el id de nuestro registro insertado

        }
        
        function eliminar ($id){
                $sql= "DELETE FROM prueba WHERE id='".$id."' LIMIT 1";
                return $this->query($sql,0);
        }
        
        function modificar ($id,$nombre,$comentarios){
                $nombre = utf8_encode($nombre);
                $comentarios = utf8_encode($comentarios);
                //creamos la cadena de nuestra sentencia(query) SQL

                $sql = "UPDATE `prueba` SET `nombre` ='".$nombre."', `comentarios` ='".$comentarios."' WHERE `id` =".$id." LIMIT 1;";
                return $this->query($sql,0);
        }
        
        function consulta (){
                $sql = "SELECT * FROM prueba ORDER BY id ";
                return $this->query($sql,0);
        }
        
        function query ($sql, $accion){
                $conex= mysql_connect("localhost","root","aranibar") or die("no se puede conectar porque ".mysql_error());
                mysql_select_db("flexphp");
                $result= mysql_query($sql,$conex);
                if ($accion && result){
                        $result= mysql_insert_id();
                }
                mysql_close($conex);
                return $result;
        }

}

?>




FLEX

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<!--
Definimos la aplicación añadiendo una función creationComplete que realizará una consulta con el
remote que definiremos.
-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    creationComplete="remoteObject.consulta()">


<!--



                ****************LAYOUT*****************



-->
<!--El componente Panel es un contenedor "bonito" en el que además podemos poner un título. Lo usaremos para contener toda la 
aplicación, y usando un tamaño relativo del 100% haremos que se adapte al espacio del que dispone, al igual que con el resto de 
los componentes-->
<mx:Panel title="Operaciones de Bases de Datos con Flex2" width="100%" x="0" height="100%" y="0">
    <!--El contenedor VBox fuerza a todos los componentes que tiene dentro a posicionarse uno debajo de otro. 
    Podemos usarlo para posicionar los componentes que iremos añadiendo.
    A este VBox le damos un nombre de instancia (id) ya que lo usaremos después para agregarle componenentes-->
    <mx:VBox x="0" y="0" width="100%" height="100%" horizontalAlign="center" id="vbox1">
        <!--El componente DataGrid será el encargado de mostrar la información de los registros. Haceoms que ocupe todo
        el espacio disponible (que además del tamaño de la ventana estará determinado por los componentes que tengamos en cada estado)
        Al seleccionar otro elemento, hacemos que cambie una variable, que después necesitaremos para seleccionar el datagrid.
        -->
        <mx:DataGrid width="100%" id="datagrid" height="100%" change="{dgIndex=datagrid.selectedIndex}">
            <mx:columns>
                <!--Colocamos 3 columnas, cuyo atributo dataField será el nombre de la propiedad
                del correspondiente item que querramos mostrar, aunque aquí más bien lo usaremos como apuntador, ya que definimos una función
                para mostrar los datos.
                 -->
                <mx:DataGridColumn headerText="ID" dataField="id" sortCompareFunction="numericSort"/>
                <mx:DataGridColumn headerText="Nombre" dataField="nombre" labelFunction="dataGridLabelFunction"/>
                <mx:DataGridColumn headerText="Comentarios" dataField="comentarios" labelFunction="dataGridLabelFunction"/>
            </mx:columns>
        </mx:DataGrid>
        <!--El contenedor Grid es semejante a una tabla de html. Aquí lo he usado para que los botones se distribuyan
        en función del espacio disponible.
         -->
        <mx:Grid width="100%" horizontalAlign="center" id="buttonsGrid">
            <mx:GridRow width="100%" height="100%" horizontalAlign="center" id="gridrow1">
                <mx:GridItem width="100%" height="100%" horizontalAlign="center">
                    <mx:Button label="Consultar" id="btnConsultar" click="onButtonPress(event);"/>
                </mx:GridItem>
                <mx:GridItem width="100%" height="100%" horizontalAlign="center">
                    <mx:Button label="Insertar" id="btnInsertar" click="onButtonPress(event);"/>
                </mx:GridItem>
                <mx:GridItem width="100%" height="100%" horizontalAlign="center">
                    <mx:Button label="Modificar" id="btnModificar" click="onButtonPress(event);"/>
                </mx:GridItem>
                <mx:GridItem width="100%" height="100%" horizontalAlign="center">
                    <mx:Button label="Eliminar" id="btnEliminar" click="onButtonPress(event);"/>
                </mx:GridItem>
            </mx:GridRow>
        </mx:Grid>
        <!--Un componente HBox hace lo mismo que un VBox pero en horizontal (los componentes se 
        alinean uno al lado de otro)-->
        <mx:HBox width="100%">
            <mx:Label text="Estado:"/>
            <mx:Label id="estadotxt" text="cargando..."/>
        </mx:HBox>
    </mx:VBox>
</mx:Panel>
<!--Los estados de Flex permiten alternar rápidamente entre diferentes conjuntos de componentes.
En ActionScript cambiamos de estado con la propiedad currentState="nombreEstado", y al estado 
inicial nos referimos con una cadena vacía ""-->
<mx:states>
    <mx:State name="commands">
        <!--Dentro de la etiqueta AddChild colocamos los componentes que incluiremos en el nuevo estado.
        además usamos el parámetro relativeTo, para referirnos al contenedor en el que colocaremos los componentes
        y position, para indicarle que será al final. De todas formas, si trabajas en modo diseño, esto lo hace el 
        FlexBuilder sólo-->
        <mx:AddChild relativeTo="{vbox1}" position="lastChild">
            <mx:VBox width="100%" horizontalAlign="center">
                <mx:HBox width="100%" horizontalAlign="center">
                    <mx:VBox>
                        <mx:Label text="ID" id="idlbl"/>
                        <mx:TextInput id="idtxt" editable="false"/>
                    </mx:VBox>
                    <mx:VBox>
                        <mx:Label text="Nombre" id="nombrelbl"/>
                        <mx:TextInput id="nombretxt"/>
                    </mx:VBox>
                    <mx:VBox>
                        <mx:Label text="Comentarios" id="comentarioslbl"/>
                        <mx:TextInput id="comentariostxt"/>
                    </mx:VBox>
                </mx:HBox>
                <mx:Label text="¿Desea insertar este registro?" id="preguntatxt"/>
                <mx:HBox width="100%" horizontalAlign="center">
                    <mx:Button label="Sí" id="btnSi" click="onButtonPress(event);"/>
                    <mx:Button label="No" id="btnNo" click="onButtonPress(event);"/>
                </mx:HBox>
            </mx:VBox>
        </mx:AddChild>
        <mx:SetProperty target="{datagrid}" name="enabled" value="false"/>
        <mx:RemoveChild target="{buttonsGrid}"/>
    </mx:State>
</mx:states>


<!--***************CÓDIGO*****************-->


<!--
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:method name="insertar" result="insertar_Result(event)" fault="onFault(event)"/>   
    <mx:method name="modificar" result="modificar_Result(event)" fault="onFault(event)"/>
    <mx:method name="eliminar" result="eliminar_Result(event)" fault="onFault(event)"/>
</mx:RemoteObject>
<!-- En la etiqueta Script irán todas las funciones que utilizaremos.-->
<mx:Script>
    <![CDATA[ 
    //Importamos la clase ArrayCollection, que usaremos en el DataProvider.
    import mx.collections.ArrayCollection;
    //Importamos la clase para trabajar con las comlumnas del dataGrid, que será necesaria para definir
    //función con la que rellenaremos el dataGrid
    import mx.controls.dataGridClasses.DataGridColumn;
    //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;
        //Una variable que necesitaremos para saber qué operación realizar
        private var action:Number;
        //
        //
        //
        //Esta variable servirá para definir el índuce en el que tendrá que estar el datagrid
        //alrealizar una consulta
        private var dgIndex:int=0;
        //
        //
        //Esta variable contiene el resultado de la petición. Su tipo de datos será
        // ArrayCollection, el recomendado para dataProviders.
        //El metatag Bindable hará que la variable se pase por referencia:
        //si ella cambia, las demás cambian.
        [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);
            //Rellenamos el dataGrid con los datos que hemos recibido
            datagrid.dataProvider=resultado;
            //Si hay al menos un registro...
            if (resultado[0]){
                estadotxt.text="Consulta completada";
                //Seleccionamos el primer elemento del datagrid.
                datagrid.selectedIndex=dgIndex;
                //Mostramos los botones de Eliminar y Modificar por si estaban deactivados
                btnModificar.enabled=btnEliminar.enabled=true;
            //Si no...
            }else{
                //Desactivamos los botones de Eliminar y Modificar
                btnModificar.enabled=btnEliminar.enabled=false;
                estadotxt.text="No hay registro que mostrar";
            }
        }
        //
        //
        //
        //El resultado de insertar un registro:
        private function insertar_Result(event:ResultEvent):void{
            //Si todo salió bien...
            if (event.result){
                estadotxt.text = "La inserción se realizó exitosamente"; 
                dgIndex=datagrid.dataProvider.length;
                //Volvemos a cargar los datos actulizados
                remoteObject.consulta();
            } else {
                estadotxt.text = "La inserción no fue completada, intente de nuevo";
            }
        }
        //Lo mismo para las funciones modificar y eliminar
        private function modificar_Result(event:ResultEvent):void{
            if (event.result){
                estadotxt.text = "La modificación se realizó exitosamente"; 
                remoteObject.consulta();
            } else {
                estadotxt.text = "La modificación no fue completada, intente de nuevo";
            }
        }
        private function eliminar_Result(event:ResultEvent):void{
            if (event.result){
                estadotxt.text = "El registro se eliminó correctamente"; 
                remoteObject.consulta();
            } else {
                estadotxt.text = "El registro no se eliminó, la operación falló";
            }
        }
        //
        //
        //
        //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{
        //Según el botoón que hayamos pulsado...
        switch (event.target){ 
            case btnConsultar:
                remoteObject.consulta();
                estadotxt.text="Consultando..."
                break;
            case btnInsertar:
                //Usamos la variable action para saber a cuál de las acciones posibles nos referimos,
                //para evaluarlas después, al presionar el botón Si
                    action = 1;
                    //Nos ponemos en el estado donde están todos los menús
                currentState="commands";
                    //No necesitamos que se pueda insertar el id
                    idtxt.text="##";
                    //Borramos los otros campos de texto
                    nombretxt.text= "";
                    comentariostxt.text= "";
                    preguntatxt.text="¿Desea insertar este registro?";
                    nombretxt.editable=true;
                    comentariostxt.editable=true;
                    break;
                case btnModificar:
                    //Nos ponemos en el estado donde están todos los menús
                currentState="commands";
                    //Mostramos el elemento seleccionado en el DataGrid, con los carácteres codificados
                    //correctamente
                    idtxt.text= datagrid.selectedItem.id.toString();
                    nombretxt.text= unescape(datagrid.selectedItem.nombre);
                    comentariostxt.text= unescape(datagrid.selectedItem.comentarios);
                    action = 2;
                    preguntatxt.text="¿Desea modificar este registro?";
                    nombretxt.editable=true;
                    comentariostxt.editable=true;
                    break;
                case btnEliminar:
                    //Nos ponemos en el estado donde están todos los menús
                currentState="commands";
                    idtxt.text= datagrid.selectedItem.id.toString();
                    nombretxt.text= unescape(datagrid.selectedItem.nombre);
                    comentariostxt.text= unescape(datagrid.selectedItem.comentarios);
                    action = 3; 
                    preguntatxt.text="¿Desea eliminar este registro?";
                    nombretxt.editable=false;
                    comentariostxt.editable=false;
                    break;
                case btnSi:
                    switch (action){
                        //Si la acción es...
                        case 1:
                            //Realizamos la función php que hemos pedido.
                            remoteObject.insertar(escape(nombretxt.text), escape(comentariostxt.text));
                            break;
                        case 2:
                            remoteObject.modificar(idtxt.text,escape(nombretxt.text), escape(comentariostxt.text));
                            break;
                        case 3:
                            remoteObject.eliminar(idtxt.text);
                            break;
                    }
                    //Volvemos al estado principal
                    currentState="";
                    break;
                case btnNo:
                    currentState="";
                    break;
                    
        }
    }
    //Función para mostrar correctamente el DataGrid
    public function dataGridLabelFunction(item:Object, column:DataGridColumn):String{
        //Devuelve lo mismo, pero aplicando un unescape
        return unescape(item[column.dataField].toString());
    }
    //Función para ordenar los datos de la columna id de manera numérica, no alfabética:
    public function numericSort(a:*,b:*):int{
        var nA:Number=Number(a.id);
        var nB:Number=Number(b.id);
        if (nA<nB){
            return -1;
        }else if (nA>nB){
            return 1;
        }else {
            return 0;
        }
    } 
    ]]>
</mx:Script>
</mx:Application>


SON CODIGO DE UN EJEMPLO DE UN TUTORIAL

EN WEB-INF TENGO LO SIGUIENTE:

services-config.xml

Código XML :

<?xml version="1.0" encoding="UTF-8"?>
<services-config>

    <services>
        <service-include file-path="remoting-config.xml" />
        <service-include file-path="messaging-config.xml" />
    </services>

    <channels>
        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="weborb.php" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>false</polling-enabled>
            </properties>
        </channel-definition>
        
        <channel-definition id="my-rtmp" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="weborb.php" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>false</polling-enabled>
            </properties>
        </channel-definition> 
        
        <channel-definition id="weborb-rtmp" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="weborb.php" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>false</polling-enabled>
            </properties>
        </channel-definition>

        <channel-definition id="my-amf-absolute" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="http://localhost/weborb/PHP/weborb.php" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>false</polling-enabled>
            </properties>
        </channel-definition>
        
        <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
            <endpoint uri="weborb.php" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
        </channel-definition>

        <channel-definition id="my-air-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="http://localhost:80/Weborb/weborb.php" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>false</polling-enabled>
            </properties>
        </channel-definition>
        
        <channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="weborb.php" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>true</polling-enabled>
                <polling-interval-seconds>1</polling-interval-seconds>
            </properties>
        </channel-definition> 
        
    </channels>

</services-config>



remoting-config.xml

Código XML :

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">

    <adapters>
        <adapter-definition id="php-object" default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
        <channel ref="my-rtmp"/>
        <channel ref="my-amf-absolute"/>
    </default-channels>

    <destination id="AccountBalanceDestination">
      <properties>
        <source>Weborb.Examples.AccountBalance</source>
      </properties>
      <security>
        <security-constraint>
          <auth-method>Custom</auth-method>
          <roles>
            <role>examplesuser</role>
          </roles>
        </security-constraint> 
      </security> 
    </destination> 
        
    <destination id="PrimitiveTest">
        <properties>
            <source>Weborb.tests.PrimitiveTest</source>
        </properties>
    </destination>
    
    <destination id="DatabaseTestMsSql">
        <properties>
            <source>Weborb.tests.DatabaseTestMsSql</source>
        </properties>
    </destination>  
    
    <destination id="DatabaseTestMySql">
        <properties>
            <source>Weborb.tests.DatabaseTestMySql</source>
        </properties>
    </destination>  
     
    <destination id="MultipleArgsTest">
        <properties>
            <source>Weborb.tests.MultipleArgsTest</source>
        </properties>
    </destination>
    
    <destination id="StringsTest">
        <properties>
            <source>Weborb.tests.StringsTest</source>
        </properties>
    </destination>    
    
    <destination id="PrimitiveArrayTest">
        <properties>
            <source>Weborb.tests.PrimitiveArrayTest</source>
        </properties>
    </destination>   
    
    <destination id="ComplexTypesTest">
        <properties>
            <source>Weborb.tests.ComplexTypesTest</source>
        </properties>
    </destination>   
    
    <destination id="InfoServiceDestination">
        <properties>
            <source>InfoService</source>
        </properties>
    </destination>       
    
    <destination id="SecureTest">
        <properties>
            <source>Weborb.Examples.AccountBalance</source>
        </properties>
        <security>
          <security-constraint>
            <auth-method>Custom</auth-method>
            <roles>
              <role>examplesuser</role>
            </roles>
          </security-constraint> 
        </security>         
    </destination>   

    <destination id="WeborbManagement">
        <properties>
            <source>Weborb.Management.ManagementService</source>
        </properties>
    </destination>  
    
     <destination id="WeborbSecurity">
        <properties>
            <source>Weborb.Management.SecurityService</source>
        </properties>
    </destination>
  
     <destination id="WeborbConfiguration">
        <properties>
            <source>Weborb.Management.ConfigurationService</source>
        </properties>
    </destination>    

     <destination id="WDMFCodeGen">
        <properties>
            <source>Weborb.Management.DataManagement.Codegen.AppHandler</source>
        </properties>
    </destination>    

    <destination id="GenericDestination">
        <properties>
            <source>*</source>
        </properties>
    </destination> 

    <destination id="GenericAIRDestination">
        <channels>
          <channel ref="my-air-amf"/>
        </channels>    
        <properties>
            <source>*</source>
        </properties>
     </destination> 
     
     
    <destination id="BusinessIntelligenceDestination">
        <properties>
            <source>Weborb.Management.RBIManagementService</source>
        </properties>
        <channels>
            <channel ref="my-amf"/>         
        </channels>
    </destination>
   
   <destination id="misquerys">
       <properties>
       <source>misquerys</source>
       </properties>
       </destination>

     
</service>



NUEVAMNETE ME ESTOY VOLVIENDO LOCO XD :oops:

Por shinodax

41 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Oct 2010 12:47 am
tienes dos opciones te vuevles completamente loco... o respiras profundamente y vas a leer el primer post
cualquier libro te servirá...ejecutas los ejemplos tomas notas ves como funciona el remoting y su protocolo
luego has lo paso a paso regresa cuando ya estes mas cuerdo...

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Oct 2010 02:27 am
gracias compadre ...

Al final intale el wampServer :D.. me funciona ... OK

gracias de todos modos xD

Por shinodax

41 de clabLevel



 

firefox

 

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