Comunidad de diseño web y desarrollo en internet online

Ayuda con XML, y PHP

Citar            
MensajeEscrito el 22 May 2013 05:20 pm
Hola esto del XML es un poco enredoso para mi, no le entiendo del todo, mi problema es que tengo un PHP
que guarda registros en una base de datos bien definida y todo, funciona bastante bien. Pero los datos los gestionaba con post y get.

Problema, ahora quieren que se haga con XML, ni siquiera entiendo del todo como funciona, promer complicacion, recivir el XML, no tengo ni idea, segunda complicacion tratarlo para evaluar si los valores son correctos, creo tener idea, y por ultimo contestar un XML, eso ya lo encontre en google y es muy facil
literal coloco echo y voy escribiendo el XML.

Ultima complicacion... crear php de prueba para verificar funcionamiento. Lo curioso es que parece aver informacion de todo tipo pero nada concreto...

La ayuda que requiero es la siguiente: (ejemplo completo de XML "envio, recepcion, manipulacion y respuesta" ), mi aportacion es la siguiente encontre cosas como Curl, etc.. pero no me queda, lo ultimo que tengo es un pseudo envio que no puedo transformar en XML, enlaces con informacion:

http://www.phpbsd.net/2007/02/09/leyendo-xml-desde-php-con-simplexml/

Ubps no encuentro todos los demas enlaces pero aqui esta mi codigo actual, aver si me dicen en que estoy mal.:

Código :

<?php
//Codigo que supuestamente envia el XML
$prexml=$_POST['xmlenv'];

$prexml="<?xml version='1.0' encoding='utf-8'?>
<dataCliente>
  <nombreCli>prueba1</nombreCli>
  <direccionCli>dat2</direccionCli>
  <telefonoCli>dat3</telefonoCli>
  <rfcCli>dat4</rfcCli>
  <grupo>dat5</grupo>
  <nombreAg>dat6</nombreAg>
  <serieVe>dat7</serieVe>
  <marca>dat8</marca>
  <modelo>dat9</modelo> 
</dataCliente>";

if(!isset($prexml)){
  echo "Error: No se detecto contenido XML, en la llamada";
}
//echo "antes de Enviar <br><br>".$prexml.'<br><br><br>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'url_del que recibe');
curl_setopt($ch, CURLOPT_POSTFIELDS,$prexml);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$resultado = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
 echo $resultado;
?>

Codigo que supuestamente resive:

Código :

extract($_POST);
/* inicializamos una variable vacia que contendra los datos */
$concatenamos = "";
foreach ($_POST as $campo => $valor){
$concatenamos.= "$campo -> $valor<br>";
}
echo "<font color='#FF0000'>".$concatenamos."</font><br>";

$xml = simplexml_load_string($valor);

foreach ($xml->dataCliente as $dat)
  echo $dat->nombreCli.' ';


Otro de los problemas que creo que tengo es como llegan los datos que supuestamente envio, como que se ejecutan en HTML o algo asi. ayuda de favor.

Por rod00x3

Claber

595 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 May 2013 01:35 pm
mira lo que estas haciendo, esta mal.pero esta bien planteado,
*primero lo que haces con CURL es simular un envio POST de un formulario
pero como al formulario no le estas poniendo los NAMES correspondientes osea las variables que contendran tu XML
*segundo la intereaccion de ambos scripts se realizan en el mismo servidor?? osea un es www.sitio.com/envio.php y www.otro.com/recive.php osea la intereaccion es asi?? o los 2 scripts pertenecen al mismo lugar

bueno te mando la correcion de ambos scripts , pruebalo y comentas

Código PHP :

<?php
//Codigo que supuestamente envia el XML
$prexml=$_POST['xmlenv'];

$prexml="<?xml version='1.0' encoding='utf-8'?>
<dataCliente>
  <nombreCli>prueba1</nombreCli>
  <direccionCli>dat2</direccionCli>
  <telefonoCli>dat3</telefonoCli>
  <rfcCli>dat4</rfcCli>
  <grupo>dat5</grupo>
  <nombreAg>dat6</nombreAg>
  <serieVe>dat7</serieVe>
  <marca>dat8</marca>
  <modelo>dat9</modelo> 
</dataCliente>";

if(!isset($prexml)){
  echo "Error: No se detecto contenido XML, en la llamada";
}
//echo "antes de Enviar <br><br>".$prexml.'<br><br><br>';
//importante hayq ue darle el nombre de variable cuando se envia por POST
$DATOS_POST = array("xml" => $prexml);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'url_del que recibe');
curl_setopt($ch, CURLOPT_POSTFIELDS,$DATOS_POST);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$resultado = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
 echo $resultado;
?>

y el que recive

Código PHP :

/* Esto esta errado
extract($_POST);
/* inicializamos una variable vacia que contendra los datos *//*
$concatenamos = "";
foreach ($_POST as $campo => $valor){
$concatenamos.= "$campo -> $valor<br>";
}
echo "<font color='#FF0000'>".$concatenamos."</font><br>";
*/
//con esto verificamos que la variable existe y tambien que no este vacia
if(!empty($_POST['xml']))
{
  //mostramos el contenido del XML 
  echo "<font color='#FF0000'>".$_POST['xml']."</font><br>";
  $xml = simplexml_load_string($_POST['xml']);

  foreach ($xml->dataCliente as $dat)
  {
    echo $dat->nombreCli.' ';
  }
}

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 May 2013 02:45 pm
ashh no entiendo del todo esto, antes que nada gracias por tu respuesta, respondiendo a tu pregunta ambos scrips estan en el mismo servidor pero diferente carpeta.

Yo sere el servidor, es decir tengo que esperar a que llamen a mi script y responder con XML, el codigo de el que envia trate de hacerlo para corroborar que si resivo un xml, lo mas chistoso es que en cualquier busqueda que pones referente a "Como leer XML con PHP "en google, yahoo, bing, etc..
te debuelve infinidad de ejemplos pero todos siempre son sobre lo mismo
1.- El XML que cargas esta en el servidor y lo cargas con SimpleXMLElement, simplexml_load_string, o$objDOM = new DOMDocument();
$objDOM->load.

2.- Se presupone que en una variable ya esta cargado el contenido XML, y usa algunas de las instrucciones citadas arriba para manipular.

Pero jamas dicen como se resive el maldito XML, y como lo pasas a una variable para crear el objeto. LES COMPARTO lo mas cerca de mi solucion que encontre, parece funcionar en pruebas actuales.
el que envia:

Código :

$prexml=<<<XML
<?xml version='1.0' encoding='utf-8'?>
<dataCliente>
  <nombreCli>elementos</nombreCli>
  <direccionCli>dat2</direccionCli>
  <telefonoCli>dat3</telefonoCli>
  <rfcCli>dat4</rfcCli>
  <grupo>dat5</grupo>
  <nombreAg>dat6</nombreAg>
  <serieVe>dat7</serieVe>
  <marca>dat8</marca>
  <modelo>dat9</modelo> 
</dataCliente>
XML;
//$prexml=htmlspecialchars($prexml);

if(!isset($prexml)){
  echo "Error: No se detecto contenido XML, en la llamada";
}
//echo "antes de Enviar <br><br>".$prexml.'<br><br><br>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'reXml.php');
curl_setopt($ch, CURLOPT_POSTFIELDS,$prexml);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$resultado = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
 echo $resultado;


El que responde:

Código :

extract($_POST);
/* inicializamos una variable vacia que contendra los datos */
$concatenamos = "";

foreach ($_POST as $campo => $valor){
$concatenamos.= "$campo -> $valor<br>";
}
echo "<font color='#FF0000'>".$concatenamos."</font><br>";
//$valor=htmlspecialchars($valor);

$valor=substr($valor,28);
$valor="<?xml version='1.0' encoding='utf-8'?>".$valor;
echo htmlentities($valor);

//$dd2 = new DOMDocument();
//$dd2->loadXML($valor);

$sxe = new SimpleXMLElement($valor);
echo $sxe->nombreCli.' ';


Aclaro el $valor=substr($valor,28); y la concatenacion de $valor="<?xml version='1.0' encoding='utf-8'?>".$valor; es porque los datos no me llegaban bien y con todo y que use echo htmlentities($valor);
al enviar y al resivir, me llegaba truncada la cabecera y no me permitia crear el XML, de este modo si me
permitio trabajar pero no creo que este bien.

Espero que sirva pero si alguien sabe como hacerlo correctamente lo agradecere, en post no se ni que variable usar o como usar, por que no se como me la enviaran.

Por rod00x3

Claber

595 de clabLevel



Genero:Masculino  

firefox

 

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