Comunidad de diseño web y desarrollo en internet online

xml generado con as3 y php no se vuelve a cargar en as

Citar            
MensajeEscrito el 31 Ago 2011 09:08 pm
Hola a todos. Aca llevo unos dias con un problema en php y no conozco mucho de esto puesto que lo mio es as, pero he tenido que entrar en este tema para un proyecto en el que estoy.

El tema es el siguiente, cargo un xml externo con as3, lo modifico, lo envio a php y este lo sobreescribe en el servidor. Si embargo, el php me crea unos backslash delante de todas las comillas del xml dejándolo inutulizable.

Aca esta un sustrato del as para ver si alguien sabe como solucionar este problema

Código ActionScript :

import flash.events.MouseEvent;
flash.events.KeyboardEvent;
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.sendToURL;

// Crear menu de modos ----------------------------------
var modoXML:XML;
var XMLRuta:String = "xmls/modo.xml";
var XMLlamado:URLRequest = new URLRequest(XMLRuta);
var XMLCargador:URLLoader = new URLLoader(XMLlamado);
XMLCargador.addEventListener(Event.COMPLETE, XMLCargado);

function XMLCargado(e:Event):void
{
   modoXML = new XML(e.target.data);
   montarmenu1();
}
function montarmenu1():void
{
   var boton:ElementoMenu;
   for (var i:uint = 0; i < (modoXML.section.length() - 1); i++)
   {
      boton = new ElementoMenu();
      boton.Texto_txt.text = modoXML.section[i]. @ name;
      boton.nomm = i;
      boton.addEventListener(MouseEvent.MOUSE_UP, selectxml);
      boton.x = 50;
      boton.y = 50 + (i * 25);
      boton.buttonMode = true;
      boton.mouseChildren = false;
      addChild(boton);

   }
}

//Crear menu 2 -----------------------------------------------------------------
var ultimoXML:Number = 0;
var xmlselect:String = "";

function selectxml(e:MouseEvent)
{

   //borrar menus2 anteriores
   for (var i:uint = (ultimoXML + 1); i > 1; i--)
   {
      stage.removeChildAt(i-1);
   }

   //cargar segundo xml
   var xmlselect:String = "xmls/" + e.currentTarget.nomm + ".xml";
   tes.text = xmlselect;//*-*-*-*-*-*-*
   var datos:XML;
   var XMLlamado2:URLRequest = new URLRequest(xmlselect);
   var XMLCargador2:URLLoader = new URLLoader(XMLlamado2);
   XMLCargador2.addEventListener(Event.COMPLETE, XMLCargado2);

   function XMLCargado2(e2:Event):void
   {
      datos = new XML(e2.target.data);
      ultimoXML = datos.item.length();
      montarmenu2();
   }

   //crear nuevos menus2
   function montarmenu2():void
   {
      var boton2:ElementoMenu;
      for (var i:uint = 0; i < datos.item.length(); i++)
      {
         boton2 = new ElementoMenu();
         boton2.Texto_txt.text = datos.item[i]. @ name;
         boton2.nombre = xmlselect
         boton2.contenido = datos;
         boton2.addEventListener(MouseEvent.MOUSE_UP, formulario);
         boton2.x = 220;
         boton2.y = 50 + (i * 25);
         boton2.buttonMode = true;
         boton2.mouseChildren = false;
         stage.addChild(boton2);
      }
   }
}

// Activacion del Formulario --------------------------------------------------------
function formulario(e2:MouseEvent)
{
   var nombre:String = e2.currentTarget.nombre;
   var datos:XML = XML(e2.currentTarget.contenido);

   // Ejecutar funcion uploadfile con tecla enter ----------------------------------
   txtdesc.addEventListener(KeyboardEvent.KEY_UP, onkeydown);
   function onkeydown(event:KeyboardEvent):void
   {
      switch (event.keyCode)
      {
         case Keyboard.ENTER :
            uploadfile();
      }
   }

   // Ejecutar funcion uploadfile con mouse -----------------------------------------
   btnupload.addEventListener(MouseEvent.MOUSE_UP, onmousedown);
   function onmousedown(event:MouseEvent):void
   {
      uploadfile();
   }

   // Funcion para subir el archivo y escribir el xml --------------------------------
   function uploadfile():void
   {
      if (txtname.text != "" && txtdesc.text != "")
      {
         var valname:String = txtname.text;
         var valdesc:String = txtdesc.text;

         var newwork:XML = <item></item>;
         newwork. @ name = valname;
         newwork. @ desc = valdesc;
         datos.prependChild(newwork);

         /// Enviar datos al archivo php ---------------------------------------
         var enviar:URLRequest = new URLRequest("savexml1.php");
         var recibir:URLLoader = new URLLoader();

         var variables:URLVariables = new URLVariables();
         variables.nombre = nombre;
         variables.archivo = datos;

         enviar.method = URLRequestMethod.POST;
         enviar.data = variables;

         recibir.dataFormat = URLLoaderDataFormat.VARIABLES;
         recibir.addEventListener(Event.COMPLETE,Respuesta);
         recibir.addEventListener(IOErrorEvent.IO_ERROR,HayError);

         recibir.load(enviar);
         tes.text = "Subiendo archivos...";
      }
      else
      {
         tes.text = "llena todos los campos";
      }

   }
}
//Funcion que se ejecuta al recibir una respuesta del PHP, recibiendo la variable resultado. 
function Respuesta(event:Event)
{
   tes.text = event.target.data.resultado;
}

//Función que se ejectuta cuando no se puede cargar el PHP
function HayError(event:IOErrorEvent):void
{
   tes.text = "Error al subir archivos";
}

stop();


disculpen si esta un poco largo, lo puse asi para si le era util a alguien , esta comentado todo y la parte esencial es donde comento
// Funcion para subir el archivo y escribir el xml --------------------

Y aca el php, muy basico que es donde me imagino deba estar el lio

Código PHP :

<?php 

   $nombre = $_POST['nombre'];
   $xml = $_POST['archivo'];
   
   echo "resultado= $xml";
   
   $file = fopen($nombre,"wb");
    fwrite($file, $archivo);
    fclose($file);
   
?> 


Aca pongo ademas el xml inicial

Código XML :

<gallery>   
   <item url='galeria/3_impreso/Grandes/1.jpg' thumb='galeria/3_impreso/Pequeñas/1.jpg' name = 'Foto de prueba' desc = 'Descripcion de prueba de esta imagen en modowebsite' ></item>
</gallery>


y el que me genrael php

Código XML :

<gallery>
  <item name=\"prueba\" desc=\"prueba\"/>
  <item url=\"galeria/3_impreso/Grandes/1.jpg\" thumb=\"galeria/3_impreso/Pequeñas/1.jpg\" name=\"Foto de prueba\" desc=\"Descripcion de prueba de esta imagen en modowebsite\"/>
</gallery>


Como ven aparece el dichoso backslash delante de todas las comillas y no se puede utilizar ese xml mas nunca en la vida.
Agradezco cualquier ayuda y podria enviarle los archivos al que desee si asi los puede revisar mejor pq la verdad ahora mismo no tengo idea de como subirlos aqui.

Por Yanesrod

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Ago 2011 10:34 pm
Hola, pasaba por aqui y me parecio interesante tu pregunta. asique hice un busqueda por San Google y en contré esto en la página PHP(que es una fuente inagotable de sabiduria PHP esta pagina AS deeveria tener una asi porque la de Adobe se queda corta de información ). Si lees la pregunta numero 4 es lo que tu estas buscando. Segun el comentario es una directiva de PHP que se llama magic_quotes_gdc . tambien si sigues el hilo de las funciones que alli te aparecen una que saca todas la barras invertidas y es:

Código PHP :

 stripslashes($str);

en la variable $str tendrias que poner el texto que recibe del . swf para parsearlo. (ten en cuenta la version de PHP si lees los conceptos de esta funcion pude que no de lo mismo en la versión 4 que en la version 5, alli lo esplican muy bien y con ejemplos )
La verdad que PHP es algo muy bonito y muy completo. Si lo has tocado ya no podras dejarlo.

Una forma muy práctica y más versatil (a mi gusto) de hacer lo que quieres es usar una base de datos (Mysql).Pero eso es otro cantar. Espero haberte ayudado y saludos.

Por maximil13

70 de clabLevel



Genero:Masculino  

Programador, estudiante de sistemas.

firefox
Citar            
MensajeEscrito el 31 Ago 2011 11:59 pm
maximil13 Voy a probar, he leido ya el enlace que me diste, y es exactamente lo que me pasa, esto debe solucionarlo. Mañana te comento como me fue y te agradezco mucho la ayuda.

Me has ahorrado un gran trabajo pues ahora estaba haciendo dos php uno para salvar el xml en un temporal y otro para abrirlo y guardarlo en la ubicacion deseada, ya que mediante
$xml = $GLOBALS["HTTP_RAW_POST_DATA"];
no me adjunta los slashes, que son propios de POST y GET, pero igual dos archivos en ves de uno, toda una candanga innecesaria.
Gracias por todo y te comento

Por Yanesrod

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Sep 2011 01:42 am
Funciona perfecto.
Todo tan facil como stripslashes($str);

Por Yanesrod

2 de clabLevel



 

firefox

 

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