Programación Web y Scripting > PHP

 Ayuda! Pxp Y Xml

(1/4) > >>

parandroide:
Hola. Estoy haciendo un guestbook que guarda los registros en un archivo xml, mismo que es manipulado (leído y escrito) por un script php usando las funciónes simplexml. Cuando es leido, devuelve el contenido en html para ser desplegado tal cual en la página a través de una petición XMLHttpRequest. Todo funciona bien, guarda, devuelve y despliega los mensajes perfectamente. El xml es como el siguiente:


--- Código: Text --- <mensajes>   <mensaje>      <nombre>nick/nombre--1</nombre>      <contacto>web/mail--1</contacto>      <cuerpo>mensaje--1</cuerpo>   </mensaje>   <mensaje>      <nombre>nick/nombre--2</nombre>      <contacto>web/mail--2</contacto>      <cuerpo>mensaje--2</cuerpo>   </mensaje>   <mensaje>      <nombre>nick/nombre--3</nombre>      <contacto>web/mail--3</contacto>      <cuerpo>mensaje--3</cuerpo>   </mensaje></mensajes>  
y el php quelee los mensajes es este:


--- Código: Text --- <?phpheader("Content-Type: text/html; charset=iso-8859-1");$mensajes = simplexml_load_file('mensajes.xml');$mensaje = $mensajes->mensaje;if ($mensaje) {foreach ($mensaje as $entrada) {    if ($entrada->contacto != ''){      echo "<div id='mensaje'><div class='datos'><a href='$entrada->contacto'>$entrada->nombre</a> dijo</div>";      echo "<div class='entrada'>$entrada->cuerpo</div>";      echo "</div>";   } else {      echo "<div id='mensaje'><div class='datos'>$entrada->nombre dijo</div>";      echo "<div class='entrada'>$entrada->cuerpo</div></div>";      }}}?>  
No soy muy avanzado en php ni en xml, y mi problema (ojalá me puedan ayudar) es que no sé cómo hacer que los mensajes nuevos aparezcan primero, ya que en el xml los nuevos registros van quedando hasta abajo, antes de </mensajes>, o que php al momento de leerlos que los muestre en el orden contrario en el que se encuentran, esto es, primero los nuevos (los de abajo). No sé, tal vez es algo muy simple y yo me estoy rompiendo la cabeza de más, pero bueno, para saberlo vine aquí, a que por favor me ayuden uds. grandes gurús de la programación web jeje. Saludos.

Mollense:
Nunca he trabajado con xml pero se me ocurre esto que debería funcionar...
En vez imprimir los datos directamente, deberías guardarlos en un arreglo y luego recorrerlo desde el final al principio tomando los datos e imprimiendolos.-

Saludos

PD: Si hay una mejor solución pe gustaría conocerla  :smartass:

Mollense:

--- Cita de: "parandroide" ---
--- Código: Text --- &#60;?phpheader(&#34;Content-Type: text/html; charset=iso-8859-1&#34;);&#036;mensajes = simplexml_load_file('mensajes.xml');&#036;mensaje = &#036;mensajes-&#62;mensaje;if (&#036;mensaje) {foreach (&#036;mensaje as &#036;entrada) {    if (&#036;entrada-&#62;contacto != ''){      echo &#34;&#60;div id='mensaje'&#62;&#60;div class='datos'&#62;&#60;a href='&#036;entrada-&#62;contacto'&#62;&#036;entrada-&#62;nombre&#60;/a&#62; dijo&#60;/div&#62;&#34;;      echo &#34;&#60;div class='entrada'&#62;&#036;entrada-&#62;cuerpo&#60;/div&#62;&#34;;      echo &#34;&#60;/div&#62;&#34;;   } else {      echo &#34;&#60;div id='mensaje'&#62;&#60;div class='datos'&#62;&#036;entrada-&#62;nombre dijo&#60;/div&#62;&#34;;      echo &#34;&#60;div class='entrada'&#62;&#036;entrada-&#62;cuerpo&#60;/div&#62;&#60;/div&#62;&#34;;      }}}?&#62;  
--- Fin de la cita ---
Una cosita...

Al ejecutarse varias veces el bucle foreach, estás creando varios div´s con el mismo id y eso es incorrecto.-

Un saludo :comp:

parandroide:
Gracias Ángel, yo también pensé en hacer lo que me sugieres para ordenar los registros usando expresiones regulares de php, pero no lo he intentado porque también creo que debería existir algún método más, digamos, específico. Mucho se ha hablado sobre las grandes posibilidades de php combinado con xml, sobre todo ahora que AJAX está tan en boga, y por todos lados dicen cómo leer y escribir xml con php, que xml es una gran alternativa a las bases de datos y que es una maravilla y blabla, pero sólo eso y nada más. Supongo que esto del xml es tan novedoso como desconocido... :unsure:

Ah y pues la verdad no tengo ningún problema con lo que dices de los divs, el foreach se ejecuta una vez por cada "<mensaje>[tags hijos y contenido]</mensaje>" contenido en el xml, de una manera en caso de que existan datos en <contacto> (if) y de otra en caso contrario (sin link) (else). Tal vez por eso da la impresion de se incongruente je, pero revisando la página generada todo está perfecto. El único problema es el de ordenar los registros.

Gracias de nuevo, saludos.

Mollense:
parandroide...

Este es el código fuente resultante de tu página:
--- Código: Text ---&#60;div id='mensaje'&#62;  &#60;div class='datos'&#62;    &#60;a href='web/mail--1'&#62;nick/nombre--1&#60;/a&#62; dij  &#60;/div&#62;    &#60;div class='entrada'&#62;mensaje--1&#60;/div&#62;&#60;/div&#62;                &#60;div id='mensaje'&#62;  &#60;div class='datos'&#62;    &#60;a href='web/mail--2'&#62;nick/nombre--2&#60;/a&#62; dijo  &#60;/div&#62;    &#60;div class='entrada'&#62;mensaje--2&#60;/div&#62;&#60;/div&#62;                &#60;div id='mensaje'&#62;  &#60;div class='datos'&#62;    &#60;a href='web/mail--3'&#62;nick/nombre--3&#60;/a&#62; dijo  &#60;/div&#62;  &#60;div class='entrada'&#62;mensaje--3&#60;/div&#62;&#60;/div&#62; Como podrás apreciar. Tenés 3 div´s cuyo id es mensaje y eso no es correcto, deberías, por ejemplo, concatenarle el número del mensaje o algo por el estilo.

Un saludo

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa