Error en contador Flash
Hola!!!
Tengo un contador en flash, que me ejecuta un php que escribe en un txt las visitas realizadas. Después el flash visualiza el número del txt. En local me funciona bien, pero cuando lo subo al servidor, en el TextField me pone undefined. Os paso el código del flash, ya que el php si que me ejecuta, porque veo que en el txt me va sumando.
<code>loadVariablesNum ("contador.php?ran="+random(999), 0);
var cont = new LoadVars();
cont.load("contador.txt");
this.createTextField("contador",1,300,455,100,100);
cont.onLoad=function(){
contador.text=this.contad;
tf = contador.getTextFormat();
//modificamos las propiedades relevantes
tf.size = 26;
tf.color = 0xD7D7D7;
tf.font = "harrison";
contador.setTextFormat(tf);
contador.selectable=false;
}</code>
Si alguien me puede guiar un poco, y lo mas seguro que será una chorrada, pero no lo veo.
Un saludo y gracias!! :D
vega_vega
GRACIAS!!!!!Solucionado!!!!
Bueno, tenías razón, lo hacia m al, con una llamada suficiente. Por si a alguien le pasa lo mismo, os paso como me ha quedado el código de flash y php.
FLASH:<code>_root.createTextField("contador",1,300,0,120,50);
var cont:LoadVars = new LoadVars();
cont.load("contador.php");
cont.onLoad=function(){
contador.text=this.contad;
tf = contador.getTextFormat();
tf.size = 26;
tf.font = "harrison";
tf.type="dynamic";
tf.type="static";
tf.selectable=false;
tf.textColor = 0x000000;
tf.length=4;
contador.setTextFormat(tf);
}</code>
PHP:<code>$filename = "contador.txt";
$archivo = file($filename,"r"); //abrimos txt en modo lectura
$contad = $archivo[0];
$contad++;
$fp = fopen( $filename,"w"); //abrimos txt en modo escritura
fwrite($fp, $contad);
fclose($fp); //cerramos txt
echo "&contad=".$contad;</code>
Muchas gracias, de verdad, ya no se si me estaba volviendo loca o que.
Un saludo y hasta la proxima!!!!!! :D
elsuricatorojo
A ver, mirando de nuevo tu código creo que lo que quieres hacer es:
1) Llamas mediante loadVariablesNum a contador.php el cual abre un txt le suma 1 al valor y lo guarda.
2) Llamas mediante loadVars al txt y cargas el valor ya actualizado.
Me da que lo que hace cuando falla es:
1) Llamas mediante loadVariablesNum a contador.php el cual abre un txt le suma 1 al valor y lo manda a guardar pero el servidor no hace esta petición en el momento sino que tarda un poquito.
2) Llamas mediante loadVars al txt y dependiendo de si al servidor la ha dado tiempo guardar la nueva versión del .txt puedes o no leer el archivo por lo que a veces te da un valo y otras te da undefined. (Vamos a suponer que no le ha dado tiempo)
3) El Servidor termina de guardar el txt.
4) Ves que falla y flash pinta undefined y miras el txt llamandolo directamente en el navegador y ves que está bien el valor actualizado, por lo que no sabes que ha pasado.
Yo lo haría así:
1) Instancio un LoadVars y defino el evento onLoad.
2) Llamo a contador.php mediante load()
3) El php lee un .txt y le suma 1 y lo manda a guardar actualizado y pinta con un echo el resultado en plan "contad=36".
4) Recibo el nuevo valor en la función asociada al onLoad recuperando el valor con this.contad.
Es decir, no hagas 2 llamadas, haz solo una a un php. De esta forma no dependes de lo rápido o lento que lo guarde para que el método sea consistente. Aún así lo suyo sería utilizar un pequeña BBDD y no abrir y cerrar el archivo.
Asegurate que el php te pinta un modelo de datos tipo "varible=valor" es decir, algo como "contad=36". Si solo te pinta "36" vamos mal.
Lo de que falle al llegar a 10 no se porque puede ser ¿En el txt se va acumulando bien las visitas? ¿en el fla el textfield permite 2 carateres?
vega_vega
Gracias, pero sigue sin querer funcionar. Lo he puesto como me has dicho, y sigue sin actualizar las entradas y además ha llegado a 10 y se ha puesto a 0, ya no se que hacer, me está volviendo loca. Seguiré probando, y gracias por ayudarme. Saludos!!!!
Edito: me habia comido la "l" de loadVariablesNum("contador.php?ran="+random(999), 0);, pero bueno que no funciona tampoco como debería de ser. Le tengo que dar al F5 para que se vea, porque la primera vez que entro no aparece nada. No se si falta algo o que. Saludos!!
elsuricatorojo
No se si tendrá que ver pero...
Yo definiría la función del evento onLoad antes de hacer el load:
<code>
oadVariablesNum("contador.php?ran="+random(999), 0);
var cont = new LoadVars();
this.createTextField("contador",1,300,0,120,50);
cont.onLoad=function(){
contador.text=this.contad;
tf = contador.getTextFormat();
//modificamos las propiedades relevantes
tf.size = 26;
tf.font = "harrison";
tf.type="dynamic";
tf.type="static";
tf.selectable=false;
tf.textColor = 0x000000;
contador.setTextFormat(tf);
}
cont.load("contador.txt");
</code>
Esto podría explicar pq a veces funciona y otras no ya que dependería de cuan rápido se ha hecho la carga y si esta se ha colado en el "load" y la definición del evento "onLoad" se ejecutaría un "onLoad" vacio... madre mia me he dado yo mismo dolor de cabeza
vega_vega
Después de muchas pruebas, he conseguido "ver" el número, pero si ejecuto yo manualmente primero el txt. Entonces el problema está que no me hace bien el Load en flash. Hay otra manera de ejecutar este txt?
<code>
loadVariablesNum("contador.php?ran="+random(999), 0);
var cont = new LoadVars();
cont.load("contador.txt");
this.createTextField("contador",1,300,0,120,50);
cont.onLoad=function(){
contador.text=this.contad;
tf = contador.getTextFormat();
//modificamos las propiedades relevantes
tf.size = 26;
tf.font = "harrison";
tf.type="dynamic";
tf.type="static";
tf.selectable=false;
tf.textColor = 0x000000;
contador.setTextFormat(tf);
}</code>
Así es como tengo el código ahora, espero que alguien me pueda hechar una mano, y gracias por lo de antes xavib.
Un saludo!! :D
vega_vega
nada o undefined, según le venga el aire
xavib
y el trace tampoco te devuelve nada?
vega_vega
Bueno, ahora no aparece el undefined, he puesto contad. Pero ahora no se ve nada.
Edito: otra vea aparece el undefined
xavib
y si en el onLoad de cont trazas this.contad o contad a pelo te traza undefined, si?
vega_vega
A! y se me ha olvidado, están todos los permisos, de escritura, lectura,.. activados.
vega_vega
Hola!!
Si que existe ya que si ejecuto el txt veo que me ha sumado la visita. En el contador.php tengo lo siguiente:
<code>$filename = "contador.txt";
$archivo = file($filename,"r"); //abrimos txt en modo lectura
$contador = $archivo[0];
$contador++;
$fp = fopen( $filename,"w"); //abrimos txt en modo escritura
fwrite($fp, $contador);
fclose($fp); //cerramos txt
</code>
Gracias.
xavib
Lo primero... contador.txt existe en el servidor?
Y lo segundo, qué hay en contador.php? Porqué lo llamas con loadVariablesNum?