Comunidad de diseño web y desarrollo en internet online

PHP no ejecuta funciones al enviarle variables desde AS 2

Citar            
MensajeEscrito el 15 Jun 2012 12:34 am
Hola a todos!

Trataré de ser muy breve.

Envío una variable desde el SWF (AS 2.0) al archivo PHP, el envío lo hago a través de sendAndLoad, con el método POST y lo recibe también con POST el PHP, hasta ahí todo está bien e incluso ejecuta las consultas MYSQL y los resultados se almacenan en otras variables del mismo PHP :wink:.

Pero el problema se me presenta cuando trato de ejecutar otra línea del PHP donde hago un llamado a una clase que agregué con la sentencia "include", la cual funciona simplemente con los datos almacenados en las variables PHP, que salen de dicha consulta.

Lo curioso es :? , que sí escribo una línea de código en el PHP donde de manera arbitraria (algunos lo llaman código rigido) le asigno un valor a la variable (el que debería venir del POST), la clase se ejecuta sin ningún problema, pero si el valor viene del SWF al PHP (como debería) y el PHP la emplea para ejecutar la consulta MYSQL simplemente luego de eso, no pasa nada.

Si alguien me pudiera orientar sobre cual puede ser el problema le estaré muy agradecido.

Por felipe_004

3 de clabLevel



 

opera
Citar            
MensajeEscrito el 18 Jun 2012 01:44 pm
Usualmente eso ocurre porque intentas acceder a la variable antes de que haya sido cargada, para saber que ha sido cargada tienes que esperar el evento onLoad del LoadVars

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Jun 2012 08:02 pm
Pues para poder ayudarte inserta el codigo que estas usando !!!!!

Por hax_1000

Claber

211 de clabLevel



Genero:Masculino  

Actionscript, PHP.

opera
Citar            
MensajeEscrito el 20 Jun 2012 12:22 am
Les agradezco mucho el interés y la rapidez con la que contestaron y sí Jorge creo que tienes razón, puesto que estoy tratando de llevar los datos a otro SWF que está empotrado en el principal como un clip de película. :)

hax_1000, la razón por la que no puse el código es porque siempre advierten hay que ser fiel con preguntar exclusivamente en este foro lo que a AS 2.0 se refiera y como mi problema tiene que ver también con PHP no me atrevía a hacerlo, pero voy a tener listo el código lo más pronto posible para que me puedan ayudar un poco más, porque la verdad no sé como lograr hacer lo que necesito.

De nuevo muchas gracias y en unas horas estaré subiendo el código. :)

Por felipe_004

3 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Jun 2012 10:30 pm
Hola a todos!

Les voy a publicar el código de una vez por todas, disculpen la tardanza, verán que no es muy complejo lo programado.

Lo primero que hay que aclarar es eso del SWF empotrado, quiero decir con eso que existe en mi SWF un clip de película interno (disculpen si los molesto con esa explicación), con el siguiente código asociado al objeto:

Código ActionScript :

onClipEvent(load)
{
   _root.data="prueba_1.php";//
}


:oops: (no sé como controlar este objeto antes, como lo sugirió Jorge)

Las siguientes líneas están escritas en la parte más global y determinan el tamaño del clip de película interno y el valor inicial de la variable id_departamento (que envío por POST al PHP):

Código ActionScript :

OFC._xscale=53;//correcto 53
OFC._yscale=50;//correcto 50
OFC._lockroot=true;//correcto
_global.enviaDatos = new LoadVars();
_global.recibeDatos = new LoadVars();
enviaDatos.id_departamento=0;
recibeDatos.onLoad=function()
{
   _root.OFC.loadMovie("ARCHIVOS/OFC/open-flash-chart.swf",OFC);
}


Como podrán ver el onLoad anterior únicamente se ejecuta la línea que carga el clip de película interno (pensé que así lo podría controlar Jorge pero al parecer no :( )

La función siguiente tiene el botón que utilizo para enviar al PHP la variable id_departamento:

Código ActionScript :

on(press)
{
enviaDatos.id_departamento=1;
enviaDatos.sendAndLoad("prueba_1.php",recibeDatos,"POST");
_root.OFC._visible=true;
_root.OFC.loadMovie("ARCHIVOS/OFC/open-flash-chart.swf",OFC);
}


Y el archivo PHP es el siguiente:

Código PHP :

<?php
include_once('ofc-library/open-flash-chart.php' );
include("conecta.php");
//------ VARIABLES RECIBIDAS -------
$id_departamento = $_POST['id_departamento'];
//--------------------------------------
echo 'id_departamento='.$id_departamento;
//--------------------------------------
$Consulta="SELECT departamento.nom_departamento As depto, inversion.nom_inversion As inversion, inv_depto.anio_inv_depto As year, inv_depto.valor_inv_depto As valor FROM inv_depto, inversion, departamento WHERE inv_depto.id_departamento=$id_departamento AND inv_depto.id_departamento=departamento.id_departamento ORDER BY year";
$Query = mysql_query($Consulta);
$primero=mysql_num_rows($Query);
while( $row = mysql_fetch_array($Query))
{
  $data[]      =   $row["valor"];
  $year[]      =   $row["year"];
  $departamento   =   $row["depto"];
  $inversion   =   $row["inversion"];
}
$g = new graph();
$g->title($departamento,50,'#000000');
$g->set_y_legend('Millones de pesos',35,'#000000');
$g->set_y_label_style(35,'#000000');
$g->set_y_max(300);
$g->set_y_min(0);
$g->y_label_steps(6);
$g->y_axis_colour('#0000c8','#808080');
$g->line_hollow(5,10,'#0000c8',$inversion,35);
$g->set_data( $data );
$g->set_x_label_style(35,'#000000',2,1);
$g->set_x_labels($year);
$g->set_x_tick_size(5);
$g->x_axis_colour('#0000c8','#808080');
$g->set_tool_tip('$'.'#val#');
$g->set_bg_colour('#ffffff');
// display the data
echo $g->render();
?>


Bueno espero que de este modo me puedan ayudar un poco más con este problema. muchas gracias.

Por felipe_004

3 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Jun 2012 10:53 pm
ok !, le heche un ojo al codigo ! y y bueno me enfocandome en el titulo de este tema !.
dices que no se ejecuta la funcion del PHP !!.

y esque mira veo esto !.

para mandar las variables al PHP !!. porque definiste las variables como global !!.
normal mente se definirian asi !l:

var enviaDatos:LoadVars=new LoadVars;
var recibeDatos:LoadVars=new LoadVars;

//asi que prueva si es eso !!. y la inicializacion de variables ponla junto antes del envio de datos !.
asi como abajo !.


Código ActionScript :

on(press)
{

var enviaDatos:LoadVars=new LoadVars;
var recibeDatos:LoadVars=new LoadVars;

enviaDatos.id_departamento=1;
enviaDatos.sendAndLoad("prueba_1.php",recibeDatos,"POST");
_root.OFC._visible=true;
_root.OFC.loadMovie("ARCHIVOS/OFC/open-flash-chart.swf",OFC);

}


Ahora !, el tener las dos variables y el tener sendAndLoad("blabla..", recibeDatos, "POST");
el poner la varible recibeDatos !, es porque la funcion sendAndLoad envia y estara esperando una respuesta del PHP !!.

y lo otro que noto es que en el archivo php !. tienes en la linea de codigo no 7.
tienes echo 'id_departamento='.$id_departamento;

al usar sendAndLoad("blabla..", recibeDatos, "POST");
ejecutas el PHP y esta al pendiente de una respuesta ! y la comunicacion con flash !, y la manera de responderles es por medio de un echo !!.

y tu pusiste un hecho en la linea no 7 !. practicamente se ejecuta el script.php y al poner un hecho das respuesta a flash y se cancela la comunicacion con flash !.

no puedes poner echo ´s !!.
solo debes usar un echo al final del script para responder a flash, es todo !.

no se si me di a enteder o te hice mas bolas !!.
lee dos veces desde arriba jaja !, saludos !.

Por hax_1000

Claber

211 de clabLevel



Genero:Masculino  

Actionscript, PHP.

opera
Citar            
MensajeEscrito el 20 Jun 2012 11:00 pm
aa y para recibir la respuesta en flash ! debes tener una funcion !.

Código ActionScript :

recibeDatos.onLoad=function(exito)
{
if(exito)
{
 // se recibio respueta del php !.
}
else
{
// no se encontro el script.php
}


pero no puedes pasar a flash lo siguiente !.

echo $g->render();

-------------------------------------------------------------------------------
para retornar a flash valores es de la siguiente manera !.

echo "var1=1&var2=2";

y la manera de resivirlas en flash es !.

Código ActionScript :

recibeDatos.onLoad=function(exito)
{
if(exito)
{
 // se recibio respueta del php !.
trace(this.var1);
trace(this.var2);
}
else
{
// no se encontro el script.php
}

Por hax_1000

Claber

211 de clabLevel



Genero:Masculino  

Actionscript, PHP.

opera
Citar            
MensajeEscrito el 25 Jun 2012 02:28 am
Hola a todos!

De nuevo gracias a todos por leer el problema y tratar de ayudarme. hax_1000 muchas gracias por la sugerencia y les comento que pasó.

Seguí con las pautas que me dijo "hax_1000" y cambié la declaración de las dos variables a tipo local y las ubiqué justo antes del sendAndLoad.

También eliminé la línea del echo del PHP, pero tengo que aclarar que la publiqué en el foro por error, puesto que la tenía únicamente para hacer pruebas y saber si efectivamente el FLASH estaba comunicado con PHP, sin embargo para obedecer a lo sugerido por hax_1000 la quité definitivamente.

el código PHP quedó de la siguiente manera:

Código PHP :

<?php
include_once('ofc-library/open-flash-chart.php' );
include("conecta.php");
//------ VARIABLES RECIBIDAS -------
$id_departamento = $_POST['id_departamento'];
//--------------------------------------
$Consulta="SELECT departamento.nom_departamento As depto, 
inversion.nom_inversion As inversion, 
inv_depto.anio_inv_depto As year, 
inv_depto.valor_inv_depto As valor 
FROM inv_depto, inversion, departamento 
WHERE inv_depto.id_departamento=$id_departamento 
AND inv_depto.id_departamento=departamento.id_departamento 
ORDER BY year";
$Query = mysql_query($Consulta);
$primero=mysql_num_rows($Query);
while( $row = mysql_fetch_array($Query))

{
  $data[]      =   $row["valor"];
  $year[]      =   $row["year"];
  $departamento   =   $row["depto"];
  $inversion   =   $row["inversion"];
}
$g = new graph();
$g->title($departamento,50,'#000000');
$g->set_y_legend('Millones de pesos',35,'#000000');
$g->set_y_label_style(35,'#000000');
$g->set_y_max(300);
$g->set_y_min(0);
$g->y_label_steps(6);
$g->y_axis_colour('#0000c8','#808080');
$g->line_hollow(5,10,'#0000c8',$inversion,35);
$g->set_data( $data );
$g->set_x_label_style(35,'#000000',2,1);
$g->set_x_labels($year);
$g->set_x_tick_size(5);
$g->x_axis_colour('#0000c8','#808080');
$g->set_tool_tip('$'.'#val#');
$g->set_bg_colour('#ffffff');
// display the data
echo $g->render();
?>


Y el código AS 2.0 de esta manera:

Código ActionScript :

on(press)
{
var enviaDatos = new LoadVars();
var recibeDatos = new LoadVars();
enviaDatos.id_departamento='1';
enviaDatos.sendAndLoad("prueba_1.php",recibeDatos,"POST");
}


La mala noticia es que el problema persiste, pero quiero estar sero de algo nuevo que comentó hax_1000 y es lo siguiente: (con tu permiso hax_1000 te voy a parafrasear)

"al poner un echo das respuesta a flash y se cancela la comunicacion con flash !... "
"...solo debes usar un echo al final del script para responder a flash, es todo !."

Así lo hice y nada, simplemente sí le envió la variable al PHP para que PHP procese algo que pertenece a una función del mismo PHP no la procesa (ni siquiera procesa condicionales if si se relacionan con esa variable), cosa que no ocurre con el código de la consulta MYSQL lo cual sí se ejecuta con la variable que envío desde AS 2.0 y pertence al archivo PHP.

Esto está muy extraño!!! :? Sigo buscando a alguien que le haya ocurrido algo similar.., por favor no pierdan el interés :(

Por felipe_004

3 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Jun 2012 08:44 am
Noto otras cosas !; bueno lo de la inicializacion de la variable ponla por fuera del boton !.

Código ActionScript :

var enviaDatos = new LoadVars();
var recibeDatos = new LoadVars();

on(press)
{
enviaDatos.id_departamento='1';
enviaDatos.sendAndLoad("prueba_1.php",recibeDatos,"POST");
}


y creo que lo avia mencionado !. el como tiene que ser la respuesta para que flash la lea !.

no puede mandar a flash una funcion tal como quieres ! . echo $g->render();

tienes aque envia a flash o numeros o texto !:
mira el mensaje de arriba donde mencione como debes responder a flash !, y como es la funcion para que flash reciba la respuesta !.

Por hax_1000

Claber

211 de clabLevel



Genero:Masculino  

Actionscript, PHP.

opera
Citar            
MensajeEscrito el 25 Jun 2012 08:01 pm
Entendido hax_1000, pero la línea no es para comunicar el PHP con FLASH, sino para que PHP ejecute una función del mismo PHP, la cual está funcionando únicamente si y solo si, el valor de la variable en el PHP se le asigna valor de 1 en el PHP

de esta forma:

Código PHP :

$id_departamento = 1;


Cosa que no ocurre cuando viene del FLASH (como debería ser)

de la forma en la que lo necesito:

Código PHP :

$id_departamento = $_POST['id_departamento'];


(mil disculpas sí desde el principio no fui tan directo en señalar esto, pero considero que el problema exigía contextualizar un poco)

Creo que ahora sí hemos llegado al meollo del asunto. :)

Por felipe_004

3 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Jun 2012 08:39 pm
Disculpa, también hay que decir que ya declaré las variables fuera del objeto botón en una capa superior y sucede exactamente igual :(

Por felipe_004

3 de clabLevel



 

opera
Citar            
MensajeEscrito el 26 Jun 2012 04:27 pm
pues el asunto es que echo $g->render(); flash lo toma como su respuesta pero no lo entiende !. porque no encuentra la variable !!.

te digo que para retornar a flash tendrias que poner primero una linea:

//donde se le asigne el valor a $g.
$g->render();

//luego otra donde le respondas a flash correctamente !.
echo "respuesta=".$g;

y en flash la recibes con la variable que asignaste desde flash !. la variable seria "respuesta", la cual tiene asignado el valor que le diste de $g.

Por hax_1000

Claber

211 de clabLevel



Genero:Masculino  

Actionscript, PHP.

opera

 

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