Comunidad de diseño web y desarrollo en internet online

Problema combinado AS,XML,PHP.

Citar            
MensajeEscrito el 22 Sep 2008 10:18 am
Buenos dias.
Mi problema es el siguiente. Quiero obtener una matriz de resultados desde PHP. Como PHP no puede pasar matrices a flash a traves de loadVars, que el objeto que estoy utilizando, creo dentro del PHP un sistema de etiquetas XML que deja todas las variables ordenaditas para q las pueda utilizar en flash como si fuese una matriz.
Los resultados en PHP son consecuencia de buscar en una base de datos y todo funcionaba correctamente cuando el parametro para la busqueda estaba fijado en el PHP. Ahora q intento pasarlo desde flash no funciona.

este es el codigo en flash

Código :

var invEnvio:LoadVars=new LoadVars;
var vacia:LoadVars=new LoadVars;
var myXML:XML=new XML
invEnvio.mail="inventario";
invEnvio.sendAndLoad("http://localhost/phpflash/invRec2.php",vacia,"POST");
gotoAndPlay(2);

En el fotograma 2

Código :

vacia.onLoad=function(exito){
   aid=this.id;
   trace("la id es:"+aid);
   }
stop();
gotoAndPlay(3);

En el fotograma 3

Código :

myXML.onLoad=function(){
   for(i=2;i<numeroLineas+1;i++){
      miClip[i]=_root.createEmptyMovieClip("miClip"+i,500-i);
      numTLin=Number(this.childNodes[i].childNodes[0].firstChild.nodeValue);
      //trace(numTLin);
      longTLin=Number(this.childNodes[i].childNodes[1].firstChild.nodeValue);
      impTLin=Number(this.childNodes[i].childNodes[2].firstChild.nodeValue);
      miClip[i]._y=12*i;
      miClip[i].soyBoton(numTLin,longTLin,impTLin);
      }
   for(i=numeroLineas+2;i<numeroLineas+numeroResistencias+1;i++){
      miClip[i]=_root.createEmptyMovieClip("miClip"+i,500-i);
      numTOtro=Number(this.childNodes[i].childNodes[0].firstChild.nodeValue);
      valorTOtro=Number(this.childNodes[i].childNodes[1].firstChild.nodeValue);
      miClip[i].soyBoton2(numTOtro,valorTOtro);
      miClip[i]._y=12*(i-numeroLineas+1);
      miClip[i]._x=128;
      }
   }
myXML.load("http://localhost/phpflash/invRec2.php");


El codigo PHP que parece funcionar es este

Código :

<?PHP



$mail=$_POST['mail'];
$con=mysql_connect("localhost","root","root") or die ("No se ha podido");
mysql_select_db("alumnos",$con) or die ("no se ha podido conectar");
$sqlid="select id from datos where mail='".$mail."'";
$resultado2=mysql_query($sqlid);
$id=mysql_result($resultado2,0);//localiza el usuario activo
echo"&id=".$id;
$consultaLinea="select numero,longitud,valor from lineas where id='".$id."'";//pillo los resultados q necesito
$lineas=mysql_query($consultaLinea);
$consultaResistencia="select numero,valor from resistencias where id='".$id."'";//pillo los resultados q necesito
$resistencias=mysql_query($consultaResistencia);
echo"<?xml version=\"1.0\"?>\n";
while($row=mysql_fetch_row($lineas)){
   echo"<linea>
      <numero>$row[0]</numero>
      <longitud>$row[1]</longitud>
      <valor>$row[2]</valor>
   </linea\n>";
}
while($rowR=mysql_fetch_row($resistencias)){
   echo"<resistencia>
      <numero>$rowR[0]</numero>
      <valor>$rowR[1]</valor>
   </resistencia\n>";
}
?>


Y digo q parece funcionar porque la pantalla de salida de flash muestra los siguientes mensajes.

la id es:74<?xml version="1.0"?>
<linea>

<numero>0</numero>

<longitud></longitud>

<valor></valor>

</linea
><linea>

<numero>9</numero>

<longitud>9999</longitud>

<valor>9999</valor>

</linea
><linea>

<numero>3</numero>

<longitud>20</longitud>

<valor>9999</valor>

</linea
><resistencia>

<numero>0</numero>

<valor></valor>

</resistencia
><resistencia>

<numero>6</numero>

<valor>50</valor>

</resistencia
>
numeroLineas3

El problema es que cuando hago el myXML.onLoad(), los parametros relativos a XML aparecen como undefined.

Espero haberme explicado con claridad.
Gracias

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Sep 2008 10:25 am
Considera usar Remoting para pasar matrices, ya que las pasas directamente. Parsear XML casi siempre es una cuestión de que sobra o falta un childNode, un firstChild o cualquier otro elemento.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Sep 2008 10:53 am
Intente usar remoting pero me supero ampliamente, jejeje.
No es cuestion de falta de childNodes porq cuando fijaba en PHP la id sobre la q se tenia q buscar todo funcionaba bien.
Creo q es algun fallo con los loadVars que hace q las cosas no se carguen bien, o mas bien q los eventos se ejecutan cuando quieren.
Gracias

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Sep 2008 11:37 am
Usualmente los onLoad son fiables. Ejecuta directamente el query en la base de datos para ver si devuelve resultados. Usa un sniffer como http://www.charlesproxy.com para ver que pasas en el back-end

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Sep 2008 11:57 am
La base de datos los devuelve, y los datos llegan a flash porq aparecen en la pantalla de salida. El problema es q parece q no los tuviera disponibles para hacer cosas con ellos.

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Sep 2008 12:07 pm
Entonces es un problema de rutas, no estás llegando al elemento que contiene la info (objeto XML, Loadvars o el array donde juntas todo)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Sep 2008 12:39 pm
He cambiado el código siguiendo un post de este foro, pero aun así no consigo que funcione. No obstante ahora parece todo un poco más claro y lo podreis seguir mejor para echarme una mano.

Código :

vacia.onLoad=function(exito){
   aid=this.respuesta;
   trace("la id es:"+aid);
   myXML.ignoreWhite=true;
   myXML.parseXML(vacia.respuesta.toString());
   trace("paso el parseo");
   trace(myXML);
   trace(mxXML.childNodes[1].childNodes[0].firstChild.nodeValue);}


y lo que muestra flash es lo siguiente:
la id es:<?xml version="1.0"?>
<linea>

<numero>0</numero>

<longitud></longitud>

<valor></valor>

</linea
><linea>

<numero>9</numero>

<longitud>9999</longitud>

<valor>9999</valor>

</linea
><linea>

<numero>3</numero>

<longitud>20</longitud>

<valor>9999</valor>

</linea
><resistencia>

<numero>0</numero>

<valor></valor>

</resistencia
><resistencia>

<numero>6</numero>

<valor>50</valor>

</resistencia
>

eso antes del hacer el parse, osea trace("la id es:"+aid);

Y esto despues del parse:

paso el parseo
<?xml version="1.0"?><linea><numero>0</numero><longitud /><valor /></linea><linea><numero>9</numero><longitud>9999</longitud><valor>9999</valor></linea><linea><numero>3</numero><longitud>20</longitud><valor>9999</valor></linea><resistencia><numero>0</numero><valor /></resistencia><resistencia><numero>6</numero><valor>50</valor></resistencia>

Sin embargo no es posible acceder a los hijos, y no se porque.

Gracias.

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Sep 2008 12:44 pm
Ya se porque no accedia, habia puesto mxXML en lugar de myXML. Es q soy un poco mendrugo.
Gracias por la ayuda Jorge.

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Sep 2008 12:48 pm
Cuando te pases a AS3, el compilador mismo te evitará este tipo de problemas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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