Comunidad de diseño web y desarrollo en internet online

No me puedo conectar a la base de datos con AIR

Citar            
MensajeEscrito el 09 Feb 2010 09:25 pm
hola a todos, fijense que estoy haciendo un sistema en flex, en realidad cuando intento ejecutar en una aplicacion de escritorio ya no me sirve, porque no me enlaza con la base de datos o el metodo post no me sirve o no se la verdad, pero siempre me da un error.

La conexion no la estoy haciendo por wizard y ya no se que hacer, alguien me puede ayudar por favor
el codigo y la base de datos estan aca:
http://depositfiles.com/files/20omnbnac

el nombre de usuario es: min
la contraseña: 123
la db se llama: biblioteca

ayudenme por favor!!!

Por min

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Feb 2010 05:18 pm
¿A que BD te quieres conectar? ¿Que error recibes?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Feb 2010 09:53 pm
ese es el problema, no recibo ningun error, (la base de datos por cierto se llama: biblioteca), creo que simplemente no esta recibiendo el valor porque siempre se va al "if" donde no se encuentra el Id o la contrasenia, pero en si no me da ningun error.
Si borro la conexion.php entonces entonces no pasa absolutamente nada (significa que el archivo si lo esta leyendo), pero no se porque no me funciona, porque en web siempre me ha servido :s

me podrias ayudar porfavor????? los archivos los he dejado aca http://depositfiles.com/files/20omnbnac
http://depositfiles.com/files/20omnbnac
http://depositfiles.com/files/20omnbnac

Por min

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Feb 2010 09:19 am

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Feb 2010 03:17 am
pues el problema que tengo es que he creado una clase conexion.php y este se comunica con flex (se que lo hace, porque al quitarlo no ejecuta ninguna accion programada dentro de la clase conexion), pero lo que falla, es que las variables nunca llegan a su destino, ni siquiera llegan a variables de flex, o para realizar comparaciones... osea que no me hace nada :S

los archivos los he dejado aca: http://www.megaupload.com/?d=1GRBECUD

y la trato de conectar a una base de datos de una tan sola tabla (para probar por supuesto) que tiene dos campos, usuarios y contraseña, pero hemos hecho hasta lo imposible y no hemos podido :s

nos podrias ayudar por favor???????????

Por min

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Feb 2010 05:29 pm
Hola, en lugar de dejar los archivos para descarga, deberías postear el código pertinente, casi nadie descarga archivos porque acarrea muchos inconvenientes y estamos para ayudar, que no es lo mismo que trabajar gratis.

Ahora, describe un poco más el tipo de conexión, el motor de bases de datos que usas, y en general toda la información que nos pueda ser útil para detectar la raiz de tu problema.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 14 Feb 2010 06:41 pm
bueno, lo siento, disculpen...

en si el problema que tengo es que no da ningun error, pero tampoco es capaz de pasar las variables de mysqlite las variables de flex, por lo menos la clase conexioon.php tendria que estar bien ya que la he utilizado en proyectos web pero no me funciona en mi aplicacion de escritorio...

Código ActionScript :

<mx:Script>
      <![CDATA[
         
         import codigo.AccesoADatos;
         import mx.controls.*;
         import mx.events.*;

         var accd:AccesoADatos= new AccesoADatos();
         
         public function Comprobar ():void
         {
            var user:String= this.usuario.text;
            var pass:String= this.contrasenia.text;
            
            
            var s:String= "SELECT * FROM administradores WHERE (id ='" + user + "' AND contrasenia= '" + pass + "')" ;
            
            var campos:Object = {'id':String, 'contrasenia':String, 'privilegio':String, 'vigente':String};
            
            accd.consultaSQL(s, campos, respuesta);
         }
         
         private function respuesta(e:Object):void
         {
            if (e.HayError)
             {
                 Alert.show("Hay un error: " + e.metadatos, "Error");
             }
              else 
              {
                 if (accd.Total() > 0)
                 {
                    var s:String= "Usuario encontrado y el privilegio es: " + accd.Datos()[0].privilegio;
                     
                    Alert.show(s, "Acceso");
                 } else {
                    Alert.show("Usuario NO fue encontrado", "Acceso");
                 }                 
              }
         }
         
      ]]>
   </mx:Script>



Y LAS CLASES CONEXION SON ESTAS:


Código PHP :

<?php
/**
 * connection settings
 * replace with your own hostname, database, username and password 
 */
$hostname_conn = "localhost";
$database_conn = "biblioteca";
$username_conn = "min";
$password_conn = "123";

$conn = mysql_pconnect($hostname_conn, $username_conn, $password_conn) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_conn, $conn);
mysql_query("SET NAMES 'utf8'");

?>



MI CLASE DE ACCESO A DATOS

Código ActionScript :

package codigo
{
   import mx.collections.ArrayCollection;
   import mx.controls.Alert;
   import mx.managers.CursorManager;
   import mx.rpc.AsyncToken;
   import mx.rpc.events.*;
   import mx.rpc.http.HTTPService;
   
   public class AccesoADatos
   {
      private var _gateway:HTTPService = new HTTPService();
      private var _datos:ArrayCollection = new ArrayCollection();
      private var _campos:Object;
      private var _total:int;
      
      public function AccesoADatos(URL: String= "codigo/consultas.php")
      {
         this._gateway.url = URL;
          this._gateway.method = "POST";
          this._gateway.useProxy = false;
          this._gateway.resultFormat = "e4x";
          
          this._gateway.addEventListener(ResultEvent.RESULT, OnResultado);
          this._gateway.addEventListener(FaultEvent.FAULT, OnFault);
          
          this._campos= {};
          this._total= 0;
      }
      
      public function Datos():ArrayCollection
      {
         return this._datos;
      }
      
      public function Total():int
      {
         return this._total;
      }
      
      private function OnResultado(e:ResultEvent):void
      {
          var topass:Object = {};
          
          topass.originalEvent = e;
      
          if (e.result.datos.elements("error").length() > 0)
          {
              topass.HayError = true;
              topass.datos = e.result.data;
          }
          else
          {
              topass.HayError = false;
              topass.metadatos = e.result.metadatos;
              topass.datos = e.result.datos;
              
              this._datos.removeAll();
            this._total= 0;
              for each(var row:XML in topass.datos.row) 
              {         
                  var temp:* = {};
                  
                  for (var key:String in this._campos) 
                  {
                      temp[key] = row[key];
                  }
               
                  this._datos.addItem(temp);
                  this._total++;
              }
              topass.datos= this._datos;
          }
          
          e.token.handler.call(null, topass);
          
          CursorManager.removeBusyCursor();
      }
      
      private function OnFault(e:FaultEvent):void
      {
         var errorMessage:String = "Error en la conexión: " + e.fault.faultString; 
          if (e.fault.faultDetail)
          {
            errorMessage += "\n\nDetalle: " + e.fault.faultDetail; 
          }
          Alert.show(errorMessage);   
          CursorManager.removeBusyCursor();       
      }
      
      private function SepararCampos(campos:Object):String
      {
         var cmp:String;
         for (var campo:String in campos) 
            {
               if (cmp == null)
                  cmp= campo
               else
                   cmp= cmp + ', ' + campo;
            }
            return cmp;
      }
      
      public function consultar(tabla:String, campos:Object, condicion:String, evento:Function):void
      {
         this._campos= campos;
         this._gateway.request['tabla'] = tabla;
         this._gateway.request['campos'] = SepararCampos(campos);
         this._gateway.request['condicion'] = condicion;
         this._gateway.request['metodo'] = "CONSULTA";
          
         CursorManager.setBusyCursor();
         
         var llamada:AsyncToken = this._gateway.send();
          llamada.request_params = this._gateway.request;
         llamada.handler = evento;
      }
      
      public function consultaSQL(CadenaSQL:String, campos:Object, evento:Function):void
      {
         this._campos= campos;
         this._gateway.request['SQL'] = CadenaSQL;
         this._gateway.request['metodo'] = "SQL";
          
         CursorManager.setBusyCursor();
         
         var llamada:AsyncToken = this._gateway.send();
          llamada.request_params = this._gateway.request;
         llamada.handler = evento;
      }
      
      public function Administrar(consulta:String, evento:Function):void
      {
         this._gateway.request['consulta'] = consulta;
         this._gateway.request['metodo'] = "ADMIN";
         
         CursorManager.setBusyCursor();
         
         var llamada:AsyncToken = this._gateway.send();
          llamada.request_params = this._gateway.request;
         llamada.handler = evento;
      }
      
      public function Encuesta(tabla:String, consultaP1:String, consultaP2:String, evento:Function):void
      {
         this._gateway.request['tabla'] = tabla;
         this._gateway.request['consultap1'] = consultaP1;
         this._gateway.request['consultap2'] = consultaP2;
         this._gateway.request['metodo'] = "ADMIN";
         
         CursorManager.setBusyCursor();
         
         var llamada:AsyncToken = this._gateway.send();
          llamada.request_params = this._gateway.request;
         llamada.handler = evento;
      }
                  
      public function DatosParaCombo(cmpKey:String, cmpLabel:String, LblConKey:Boolean= false, AgregarOtro:Boolean= false, LblOtro:String= '', KeyOtro:String= ''):ArrayCollection
      {
         var arr:ArrayCollection= new ArrayCollection;
         
         for (var i:int= 0; i<this._total; i++)
         {
            var temp:*= {};
            if (LblConKey){
               temp['label']= this._datos[i][cmpKey] + " - " + this._datos[i][cmpLabel];
            }else{
               temp['label']= this._datos[i][cmpLabel];
            }
            temp[cmpKey]= this._datos[i][cmpKey];
            temp[cmpLabel]= this._datos[i][cmpLabel];
            arr.addItem(temp);
         }
         
         if (AgregarOtro)
         {
            var tmpotro:*= {};
            tmpotro['label']= LblOtro;
            tmpotro[cmpKey]= KeyOtro;
            arr.addItem(tmpotro);
         }
         
         return arr; 
      }
   }
}




Y MI CLASE CONSULTAS:

Código PHP :

<?php
require_once(dirname(__FILE__) . "/conexion.php");
require_once(dirname(__FILE__) . "/functions.inc.php");
require_once(dirname(__FILE__) . "/XmlSerializer.class.php");

$ret = array(
   "datos" => array("error" => "Sin operar"), 
   "metadatos" => array()
);

$tabla= @$_REQUEST["tabla"];
$campos= @$_REQUEST["campos"];
$condicion= @$_REQUEST["condicion"];
$cadena= LimpiarPlecas(@$_REQUEST["consulta"]);
$cadenaSQL= LimpiarPlecas(@$_REQUEST["SQL"]);

$condicion= LimpiarPlecas($condicion);

function LimpiarPlecas($cnd) {
   $LPs= "";
   $LPc= "";
   for ($i= 0; $i<strlen($cnd); $i++)
   {
      $LPc= $cnd[$i];
      if ($LPc == "\\"){
         $LPs= $LPs."";
      } else {
         $LPs= $LPs.$cnd[$i];
      }
   }
   return $LPs;
}

if (@$_REQUEST["metodo"] == "SQL"){

   $consulta = mysql_query($cadenaSQL, $conn);

   
   if ($consulta) {
      $datos_ar = array();
      
      while ($registros = mysql_fetch_assoc($consulta)) {
         array_push($datos_ar, $registros);
      }
      
      $ret = array("datos" => $datos_ar, "metadatos" => array());
   } else {
      $ret = array(
         "datos" => array("error" => mysql_error()), 
         "metadatos" => array()
      );
   }
} 

if (@$_REQUEST["metodo"] == "CONSULTA"){
   if ($condicion == ''){
      $s= "SELECT $campos FROM $tabla";
   } else {
      $s= "SELECT $campos FROM $tabla WHERE $condicion";
   }
   
   $consulta = mysql_query($s, $conn);
   if ($consulta) {
      $datos_ar = array();
      
      while ($registros = mysql_fetch_assoc($consulta)) {
         array_push($datos_ar, $registros);
      }
      
      $ret = array("datos" => $datos_ar, "metadatos" => array());
   } else {
      $ret = array(
         "datos" => array("error" => mysql_error()), 
         "metadatos" => array()
      );
   }
} 

if (@$_REQUEST["metodo"] == "ADMIN"){
   
   $consulta = mysql_query($cadena, $conn);
   if ($consulta) {
      $ret = array("datos" => array("ok" => "true"), "metadatos" => array());
   } else {
      $ret = array(
         "datos" => array("error" => mysql_error()), 
         "metadatos" => mysql_error()
      );
   }
} 

$serializer = new XmlSerializer();
echo $serializer->serialize($ret);
die();
?>

Por min

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Feb 2010 02:01 pm
Si quieres conectar en local usando PHP, tiene que haber alguien que lo ejecute. Por ejemplo si tienes un servidor local, usarías

String= "http://localhost/codigo/consultas.php"

De esa forma el PHP se ejecuta

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Feb 2010 03:30 pm
pero en donde coloco eso? a que parametro??? consultas.php ya lo coloque en mi servidor y la ruta se encuentra en la configuracion del sistema.
Como estoy utilizando el Xamp le he colocado http://htdocs/

Por min

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Feb 2010 03:44 pm
A diferencia de un proyecto Web en donde el servidor interpreta rutas relativas a un raíz y usa HTTP para todo, un archivo ejecutable no tiene ninguna relación con un servidor web, es decir no sabe que tienes XAMPP ni cual es su directorio raíz. Ahora si usas HTTPService y una ruta completa a un servidor Web, entonces la aplicación usará esos datos, pero no tiene un contexto web como lo puede tener una p{agina que carga en un navegador

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Feb 2010 03:56 pm
osea, lo que dice solisarg es que el problema viene estando en

Código :

public function AccesoADatos(URL: String= "codigo/consultas.php")
porque un programa corriendo en air no toma esa ruta relativa como una ruta al servidor, debería ser algo como esto:

Código :

public function AccesoADatos(URL: String= "http://httpdocs/codigo/consultas.php")
aunque francamente no me parece prudente que hagas las consultas desde air, las consultas deberían estar en el php, lejos del alcance del usuario.

Y ya que estás usando php y mysql, te recomiendo que mires Zend AMF o amfphp, te ahorrarían mucho trabajo, todo lo que has hecho lo podrías hacer con menos de la mitad de ese código.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 15 Feb 2010 05:16 pm
el error que me da es el siguiente:

Error en la conexión: HTTP request error

Detalle: Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://htdocs/codigo/consultas.php" errorID=2032]. URL: http://htdocs/codigo/consultas.php

y si no pongo la ruta del output folder es el siguiente:

Error en la conexión: HTTP request error

Detalle: Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://codigo/consultas.php" errorID=2032]. URL: http://codigo/consultas.php

Por min

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Feb 2010 05:24 pm
Abre el PHP directamente en un navegador y mira que la salida sea correcta

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Feb 2010 05:26 pm
muchas gracias! ya resolvi el problema, la solucion era como ustedes me habian dicho, por ser una aplicacion de escritorio flex no sabe que tiene acceso a muchas cosas aun utilizando httpservices y la solucione con :

public function AccesoADatos(URL: String= "C:/xampp/conexion.php")

muchisimas gracia solisarg y Xyrer por su ayuda!!!

Por min

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Feb 2010 08:02 pm
oops, igual me descaché, me faltó el localhost XD, pero bueno, menos mal ya funcionó

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome

 

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