• Lunes 29 de Abril de 2024, 16:11

Autor Tema:  Ayuda! Pxp Y Xml  (Leído 3961 veces)

parandroide

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Ayuda! Pxp Y Xml
« en: Martes 8 de Mayo de 2007, 03:57 »
0
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
  1.  
  2. <mensajes>
  3.    <mensaje>
  4.       <nombre>nick/nombre--1</nombre>
  5.       <contacto>web/mail--1</contacto>
  6.       <cuerpo>mensaje--1</cuerpo>
  7.    </mensaje>
  8.    <mensaje>
  9.       <nombre>nick/nombre--2</nombre>
  10.       <contacto>web/mail--2</contacto>
  11.       <cuerpo>mensaje--2</cuerpo>
  12.    </mensaje>
  13.    <mensaje>
  14.       <nombre>nick/nombre--3</nombre>
  15.       <contacto>web/mail--3</contacto>
  16.       <cuerpo>mensaje--3</cuerpo>
  17.    </mensaje>
  18. </mensajes>
  19.  
  20.  

y el php quelee los mensajes es este:

Código: Text
  1.  
  2. <?php
  3. header("Content-Type: text/html; charset=iso-8859-1");
  4. $mensajes = simplexml_load_file('mensajes.xml');
  5. $mensaje = $mensajes->mensaje;
  6. if ($mensaje) {
  7. foreach ($mensaje as $entrada) {
  8.  
  9.    if ($entrada->contacto != ''){
  10.       echo "<div id='mensaje'><div class='datos'><a href='$entrada->contacto'>$entrada->nombre</a> dijo</div>";
  11.       echo "<div class='entrada'>$entrada->cuerpo</div>";
  12.       echo "</div>";
  13.    } else {
  14.       echo "<div id='mensaje'><div class='datos'>$entrada->nombre dijo</div>";
  15.       echo "<div class='entrada'>$entrada->cuerpo</div></div>";
  16.       }
  17. }
  18. }
  19. ?>
  20.  
  21.  

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

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda! Pxp Y Xml
« Respuesta #1 en: Martes 8 de Mayo de 2007, 04:54 »
0
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:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda! Pxp Y Xml
« Respuesta #2 en: Martes 8 de Mayo de 2007, 04:59 »
0
Cita de: "parandroide"
Código: Text
  1.  
  2. &#60;?php
  3. header(&#34;Content-Type: text/html; charset=iso-8859-1&#34;);
  4. &#036;mensajes = simplexml_load_file('mensajes.xml');
  5. &#036;mensaje = &#036;mensajes-&#62;mensaje;
  6. if (&#036;mensaje) {
  7. foreach (&#036;mensaje as &#036;entrada) {
  8.  
  9.    if (&#036;entrada-&#62;contacto != ''){
  10.       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;;
  11.       echo &#34;&#60;div class='entrada'&#62;&#036;entrada-&#62;cuerpo&#60;/div&#62;&#34;;
  12.       echo &#34;&#60;/div&#62;&#34;;
  13.    } else {
  14.       echo &#34;&#60;div id='mensaje'&#62;&#60;div class='datos'&#62;&#036;entrada-&#62;nombre dijo&#60;/div&#62;&#34;;
  15.       echo &#34;&#60;div class='entrada'&#62;&#036;entrada-&#62;cuerpo&#60;/div&#62;&#60;/div&#62;&#34;;
  16.       }
  17. }
  18. }
  19. ?&#62;
  20.  
  21.  
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:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

parandroide

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #3 en: Martes 8 de Mayo de 2007, 05:20 »
0
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

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda! Pxp Y Xml
« Respuesta #4 en: Martes 8 de Mayo de 2007, 05:52 »
0
parandroide...

Este es el código fuente resultante de tu página:
Código: Text
  1. &#60;div id='mensaje'&#62;
  2.   &#60;div class='datos'&#62;
  3.     &#60;a href='web/mail--1'&#62;nick/nombre--1&#60;/a&#62; dij
  4.   &#60;/div&#62;
  5.     &#60;div class='entrada'&#62;mensaje--1&#60;/div&#62;
  6. &#60;/div&#62;
  7.                
  8. &#60;div id='mensaje'&#62;
  9.   &#60;div class='datos'&#62;
  10.     &#60;a href='web/mail--2'&#62;nick/nombre--2&#60;/a&#62; dijo
  11.   &#60;/div&#62;
  12.     &#60;div class='entrada'&#62;mensaje--2&#60;/div&#62;
  13. &#60;/div&#62;
  14.                
  15. &#60;div id='mensaje'&#62;
  16.   &#60;div class='datos'&#62;
  17.     &#60;a href='web/mail--3'&#62;nick/nombre--3&#60;/a&#62; dijo
  18.   &#60;/div&#62;
  19.   &#60;div class='entrada'&#62;mensaje--3&#60;/div&#62;
  20. &#60;/div&#62;
  21.  
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
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

parandroide

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #5 en: Martes 8 de Mayo de 2007, 06:17 »
0
Valla, no sabía que fuera incorrecto colocar varios divs con el mismo id en la misma página, pero si por favor me explicas por qué, aprenderé algo nuevo y tal vez considere hacer algo al respecto. En ese caso, tendría que definir un nuevo div en la hoja de estilos CSS por cada mensaje existente, y rreglarmelas para adivinar cuantos mensajes será necesario mostrar en cada petición je.

Bueno, no olviden TODOS que mi problema aquí es cómo ordenar los registros de un xml, ya sea dentro del mismo xml con un atributo id en el nodo padre de cada mensaje, o al momento de escribir en él,  o usando simplexml de php5 o las funciones dom de php.

Gracias.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda! Pxp Y Xml
« Respuesta #6 en: Martes 8 de Mayo de 2007, 06:49 »
0
Citar
Valla, no sabía que fuera incorrecto colocar varios divs con el mismo id en la misma página, pero si por favor me explicas por qué, aprenderé algo nuevo y tal vez considere hacer algo al respecto. En ese caso, tendría que definir un nuevo div en la hoja de estilos CSS por cada mensaje existente, y rreglarmelas para adivinar cuantos mensajes será necesario mostrar en cada petición je.
...por cuestiones de usabilidad.
...si necesitaras acceder al elemento  mediante getElementById(), no podrías.
...si tratas de validar el código fuente, te daría errores.
...si quisieras asignarle un label al elemento (<label for=...) no podrías.-
...no cumplirias con los estándares.-
... y algunos etc.  :smartass:

Utiliza class en vez de id para asignarle el estilo, ese atributo si puede repetirse por lo que no es necesario que adivines cuantos mensajes habrá que mostrar.-

Un saludo :comp:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

parandroide

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #7 en: Martes 8 de Mayo de 2007, 07:06 »
0
Ya comprendo Ángel, y seguramente iba a llegar el día en que eso me causara problemas, me has evitado futuros dolores de cabeza. Usaré class en vez de div entonces.

Bueno, ahora sólo espero que alguien pueda ayudarme con el asunto del xml. Tengo este mismo tema en otros 8 foros sobre programación desde hace dos días, este es el único en donde he recibido alguna clase de respuesta....y eso me preocupa bastante  :( porque parece que lo que estoy preguntando es, o estúpidamente simple, o imposiblemente complicado.

Saludos y gracias por su atención.

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #8 en: Martes 8 de Mayo de 2007, 09:00 »
0
puedes invertir el orden de aparicion de los divs :P



Código: Text
  1. &#60;?php
  2. header(&#34;Content-Type: text/html; charset=iso-8859-1&#34;);
  3. &#036;mensajes = simplexml_load_file('mensajes.xml');
  4. &#036;mensaje = &#036;mensajes-&#62;mensaje;
  5.  
  6.  
  7. &#036;DivId=1;
  8.  
  9. if (&#036;mensaje) {
  10. foreach (&#036;mensaje as &#036;entrada) {
  11.  
  12.   if (&#036;entrada-&#62;contacto != ''){
  13.      &#036;msg=&#34;&#60;div id='mensaje&#34;.&#036;DivId.&#34;'&#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;.
  14.          &#34;&#60;div class='entrada'&#62;&#036;entrada-&#62;cuerpo&#60;/div&#62;&#60;/div&#62;&#34;.&#036;msg;
  15.   } else {
  16.      &#036;msg=&#34;&#60;div id='mensaje'&#62;&#60;div class='datos'&#62;&#036;entrada-&#62;nombre dijo&#60;/div&#62;&#34;.&#036;msg;
  17.      &#036;msg.=&#34;&#60;div class='entrada'&#62;&#036;entrada-&#62;cuerpo&#60;/div&#62;&#60;/div&#62;&#34;;
  18.      }
  19.  
  20.   &#036;DivId++;
  21. }
  22. echo &#036;msg;
  23. }
  24. ?&#62;
  25.  

Espero te sirva
Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda! Pxp Y Xml
« Respuesta #9 en: Martes 8 de Mayo de 2007, 16:09 »
0
Cita de: "F_Tanori"
puedes invertir el orden de aparicion de los divs :P
Es buena FT pero si son muchos mensajes no se que pasaría (Tal vez nada  :unsure: ) ahora me entró la duda. Existe una longitud máxima en una cadena de PHP?

Citar
Usaré class en vez de div entonces
No :P , el div es la capa, el id un identificador y class es la clase de estilo que se aplicará al div.-
El div va si o si, el id tal y como lo pone mi compañero FT y el class debe ser siempre el mismo en este caso. Luego en la hoja de estilo en vez de hacer esto:
Código: Text
  1. #claseMensaje{
  2.   .
  3.   .
  4.   .
  5. }
  6.  
haces esto:
Código: Text
  1. .claseMensaje{
  2.   .
  3.   .
  4.   .
  5. }
  6.  

Ejemplo
Código: Text
  1. &#60;div id='mensaje&#34;.&#036;DivId.&#34;' class='claseMensaje'&#62;
  2.  

Otro saludo
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

parandroide

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #10 en: Martes 8 de Mayo de 2007, 18:00 »
0
ups jajaja :blink: escribí "div" en vez de "id". Quize decir: usaré .class en vez de #div.

Probé lo que dijo el buen Tanori, pero me encontré con más problemas al momento de tratar el valor de
Código: Text
  1. &#036;mensajes = simplexml_load_file('mensajes.xml');
  2.  
como cadena o array, no se puede. Hay otra función que es simplexml_load_string($string); pero no pude echarla a andar...me salía un error que decía que se esperaba un '<' no sé donde blabla y total que ya me rendí y ya estoy usando mysql. Yo quería probar las capacidades de xml como sistema de almacenamiento pero se ha quedado corto por ahora.  &lt;_&lt;

Bueno gracias a ambos, espero que esto se resuelva algún día je. Salu!2

Avalon

  • Miembro MUY activo
  • ***
  • Mensajes: 448
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #11 en: Miércoles 9 de Mayo de 2007, 09:53 »
0
Iba a proponer la misma solución que F_Tanori :P

Citar
Probé lo que dijo el buen Tanori, pero me encontré con más problemas al momento de tratar el valor de
Código: Text
  1. &#036;mensajes = simplexml_load_file('mensajes.xml');
  2.  
como cadena o array, no se puede.

No entiendo el porqué de esos problemas. No hay ninguna diferencia en el tratamiento de ese valor entre tu código y el de F_Tanori, la única diferencia está al mostrar los datos. Tu código también te da esos mismos problemas?

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda! Pxp Y Xml
« Respuesta #12 en: Miércoles 9 de Mayo de 2007, 15:47 »
0
En este caso, "$mensajes" es un objeto y por lo tanto no puede tratarse como una cadena, no así

Código: Text
  1. &#036;entrada-&#62;nombre
  2. &#036;entrada-&#62;contacto
  3. &#036;entrada-&#62;cuerpo
  4.  

que son atributos de ese objeto y podrían tratarse como a una variable mas.-

Un saludo
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Avalon

  • Miembro MUY activo
  • ***
  • Mensajes: 448
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #13 en: Miércoles 9 de Mayo de 2007, 17:35 »
0
Estamos de acuerdo Angel_K_Ido, pero sigo sin ver donde está el problema. Será que estoy ciego? :blink:

El código que puso parandroide al principio dice que funcionaba perfectamente, de no ser porque mostraba los mensajes en orden inverso.

El código que puso F_Tanori hace básicamente lo mismo pero guardando los mensajes en una variable y concatenándolos en orden inverso.

No obstante parandroide dice que al probar el código de F_Tanori se encontró con más problemas al momento de tratar el valor de

Código: Text
  1. &#036;mensajes = simplexml_load_file('mensajes.xml');
  2.  

y yo no veo que F_Tanori haya hecho ningún cambio en esa parte del código. Si el primer código funcionaba no veo que problemas puede dar el segundo, no se si me explico.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda! Pxp Y Xml
« Respuesta #14 en: Miércoles 9 de Mayo de 2007, 17:42 »
0
Si, pienso igual. Es mas, he probado el código de FT y funciona muy bién. Tal vez entendí mal a parandroide en su último mensaje pero me pareció que el problema ahora es otro  :)

Un saludo :beer:

Pd: Alguien tiene respuesta a mi pregunta?
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Avalon

  • Miembro MUY activo
  • ***
  • Mensajes: 448
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #15 en: Miércoles 9 de Mayo de 2007, 18:00 »
0
Hmm no se la respuesta pero podríamos probarlo hasta que reviente :D

La verdad nunca me encontré con ningún problema debido a la longitud de una cadena...

Y esto es lo poco que encontré al respecto
http://www.faqts.com/knowledge_base/view.phtml/aid/2523

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda! Pxp Y Xml
« Respuesta #16 en: Miércoles 9 de Mayo de 2007, 18:21 »
0
Cita de: "Avalon"
Hmm no se la respuesta pero podríamos probarlo hasta que reviente :D
:yes: Jeje, lo voy a hacer  :guitar:

Nos estamos leyendo.  :comp:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

parandroide

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda! Pxp Y Xml
« Respuesta #17 en: Miércoles 9 de Mayo de 2007, 23:49 »
0
Hey muchas gracias a todos! Valla, en este foro si le ponen atención a uno  :D.

Había malentendido la propuesta de F Tanori, pensaba que se refería al asunto de los id vs class solamente y... quizás uds. sepan lo terco que se pone uno en momentos de desesperación frente a la compu  :unsure: paciencia es lo que me falta a veces, casi nada  :blink:
Pero ylo he vuelto a revisar y también creo que debería funcionar bien! El guestbook está funcionando ya pero usando mysql en vez de xml. Lo implementaré de esa forma y les diré sobre los resultados. Deberán ser positivos.

Oigan, en este guestbook al estilo ajax ¿qué opinan uds. sobre este método de mostrar contenidos usando php paragenerarlo en vez de la manera más tradicional en ajax que es manipulando los nodos del documento con javascript? ¿cual será más conveniente? Yo opté por hacerlo con php porque me da la sensación de que hay vastas diferencias entre los exploradores con respecto al DOM.

Bueno, muy agradecido con todos de nuevo. Seguiré entre uds. en este genial foro para ayudar a otros con sus asuntos también  :)

Saludos  :hola: