Foros del Web » Programando para Internet » PHP »

Incorporar include dentro de xml con php

Estas en el tema de Incorporar include dentro de xml con php en el foro de PHP en Foros del Web. Amigos, tengo un inconveniente con un xml que quiero generar para una trivia si bien se que no estoy generando el xml como corresponde como ...
  #1 (permalink)  
Antiguo 20/11/2012, 22:07
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 33
Antigüedad: 15 años
Puntos: 1
Exclamación Incorporar include dentro de xml con php

Amigos,
tengo un inconveniente con un xml que quiero generar para una trivia
si bien se que no estoy generando el xml como corresponde como php lo estoy haciendo así porque no logré hacerlo como corresponde ya que soy muy nuevo.

La trivia funciona perfecto pero quiero traer además de la opción correcta, otros nombres aleatorios correspondientes al sexo que se muestra.

mi trivia.php es así:

Código PHP:
Ver original
  1. <?php
  2. header("Content-type: text/xml");
  3. include("../../../ws/conexion.php");
  4.  
  5.     $result=mysql_query("SELECT usuarios.* FROM usuarios WHERE usuarios.aprobacion = 'si' order by RAND() limit 100",$link);
  6.  
  7. echo '<quizzes>';
  8. echo '  <quiz>';
  9. echo '    <title>Quien es Quien?</title>';
  10. echo '    <grading>';
  11. echo '      <range start="0" end="100">';
  12. echo '        <grade>F</grade>';
  13. echo '        <rank>Rank</rank>';
  14. echo '      </range>';
  15. echo '    </grading>';
  16.  
  17.  
  18. while($row = mysql_fetch_array($result)) {
  19.         printf("
  20.             <question>
  21.      <text>Pregunta</text>
  22.      [<img src='%s' alt='Profile' />]
  23.  
  24.      <option>
  25.        <text>%s</text>
  26.        <score>1</score>
  27.      </option>
  28.  
  29.      <option>
  30.        <text>"."<?php include('opcion.php?dato=".$row["sexo"]."'); ?>"."</text>
  31.        <score>0</score>
  32.      </option>
  33.  
  34.      <option>
  35.        <text>"."<?php include('opcion.php?dato=".$row["sexo"]."'); ?>"."</text>
  36.        <score>0</score>
  37.      </option>
  38.     </question>
  39.         ", $row["img"], $row["nombre"], $row["sexo"]);
  40.  
  41.  
  42.     }
  43.     mysql_free_result($result);
  44.  
  45.  
  46. echo '  </quiz>';
  47. echo '</quizzes>';
  48. ?>


y el opcion.php que llamo es:

Código PHP:
Ver original
  1. <?php
  2. include("../ws/conexion.php");
  3. $sexo=$_GET['dato'];
  4.  
  5.     $result=mysql_query("SELECT usuarios.* FROM usuarios WHERE usuarios.aprobacion = 'si' AND usuarios.sexo = '$sexo' order by RAND() limit 1",$link);
  6.  
  7. while($row = mysql_fetch_array($result)) {
  8.         printf("%s", $row["nombre"]);
  9.     }
  10.     mysql_free_result($result);
  11. ?>

Lamentablemente cuando veo en un browser el xml no levanta el include... ese es mi primer problema.
y el segundo problema, tengo que ordenar de manera aleatoria la respuesta correcta.. o sea, dentro de las 3 opciones la respuesta correcta siempre está en la primera opción <score>1<score> como podría hacer para ordenar las <option> de manera aleatorias dentro del <question>?

gracias amigos por su ayuda
  #2 (permalink)  
Antiguo 21/11/2012, 00:31
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Incorporar include dentro de xml con php

Hola:

Creo que no vale ponerle parámetros al include... no sería mejor crear una variable antes...

Código:
<text>"."<?php $sexo = $row["sexo"]; include('opcion.php'); ?>"."</text>
Y por supuesto quitar la línea que recoge el parámetro $_GET del include.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 21/11/2012, 03:32
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Incorporar include dentro de xml con php

Cita:
Iniciado por nicomonjes Ver Mensaje

Lamentablemente cuando veo en un browser el xml no levanta el include... ese es mi primer problema.
y el segundo problema, tengo que ordenar de manera aleatoria la respuesta correcta.. o sea, dentro de las 3 opciones la respuesta correcta siempre está en la primera opción <score>1<score> como podría hacer para ordenar las <option> de manera aleatorias dentro del <question>?

gracias amigos por su ayuda
1.- ¿Pq un include? ¿Pq no usar una función? Nunca entendí el uso de includes para algo q podría ser sin ningún tipo de problemas una función :(

2.- Puedes "escribir" las respuestas en un array, y antes de mostrarlas usar un shuffle()
__________________
>> Eleazan's Source
>> @Eleazan
  #4 (permalink)  
Antiguo 21/11/2012, 07:11
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 33
Antigüedad: 15 años
Puntos: 1
Respuesta: Incorporar include dentro de xml con php

Eleazan: Y como se podría hacer lo del array con esa estructura? me podrías ayudar con un ejemplo práctico?
No uso función simplemente porque como dije anteriormente soy novato no conozco como hacerlo. esto que hice fué con lo que se.

Caricatos: no entiendo tu propuesta.. en ese caso como le avisaría al opcion1.php de la variable sexo? es su condicional!

Please ayuda amigos!
  #5 (permalink)  
Antiguo 21/11/2012, 12:22
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Incorporar include dentro de xml con php

Podrías tener esta función:
Código PHP:
function getNombre($sexo$link) {
    
$sql "SELECT * FROM `usuarios` WHERE `aprobacion` = 'si' AND `sexo` = '$sexo' ORDER BY RAND() LIMIT 1";
    
$r mysql_query($sql$link); //ATENCIÓN! Función deprecada ;)
    
$arr mysql_fetch_array($r);
    return 
$arr['nombre'];

Con esa función, llamándola en plan "$nombre = getNombre("mujer", $link);", te dará un nombre aleatorio de mujer... (o de lo q le pases!)... Me parece una forma más limpia q un include!

Ahora, para el problema q dices de la posicion...

Yo, personalmente, si tuviese q "arreglar" ese script... así, a lo facil, sin modificar mucho... añadiria los scores como %s para pasarselos por el printf.

Así podrías tener esto:
Código PHP:
$pregunta[0]['nombre'] = 'Nombre Correcto';
$pregunta[0]['score'] = 1;
$pregunta[1]['nombre'] = getNombre('man'$link);
$pregunta[1]['score'] = 0;
$pregunta[2]['nombre'] = getNombre('man'$link);
$pregunta[2]['score'] = 0;

$pregunta shuffle($pregunta); 
Y al printf le añades los argumentos para q concuerde... no sé si me he explicado! (Sólo quiero q lo entiendas, no hacer q puedas hacer un copy/paste)
__________________
>> Eleazan's Source
>> @Eleazan
  #6 (permalink)  
Antiguo 21/11/2012, 17:23
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 33
Antigüedad: 15 años
Puntos: 1
Respuesta: Incorporar include dentro de xml con php

Eleazan sos un Dios!!! está buenisimo lo que hiciste..
igualmente por más que intente no puedo hacerlo correr..
me tira muchos warnings porque no se como llamarlo

mi estructura deberia quedar así:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <quizzes>
  3. <quiz>
  4. <title>Quien es Quien?</title>
  5. <grading>
  6. <range start="0" end="100">
  7. <grade>F</grade>
  8. <rank>Rank</rank>
  9. </range>
  10. </grading>
  11.  
  12. <question>
  13. <text>Pregunta</text>
  14. [
  15. <img src="profile/1353088266.jpg" alt="Profile"/>
  16. ]
  17. <option>
  18. <text>ABELENDA LORENA MARIA</text>
  19. <score>1</score>
  20. </option>
  21.  
  22. <option>
  23. <text><?php require_once('opcion1.php'); ?>
  24. </text>
  25. <score>0</score>
  26. </option>
  27.  
  28. <option>
  29. <text/>
  30. <score>0</score>
  31. </option>
  32.  
  33. </question>
  34. </quiz>
  35. </quizzes>

o sea tengo que tener tres opciones y una tiene que ser la verdadera pero ordenarlas de manera aleatoria entre ellas.. porque siempre me aparece arriba

por más que intenté llamar la función dentro del while y en el print no se si hago bien.. intenté llamarla con <? echo $pregunta = shuffle($pregunta); ?> y sin echo..
y tampoco pude probar que funcione el getNombre

mirá.. te muestro como lo puse..

Código PHP:
Ver original
  1. <?php
  2. header("Content-type: text/xml");
  3. include("../../../ws/conexion.php");
  4.  
  5.  
  6. function getNombre($sexo, $link) {
  7.     $sql = "SELECT * FROM 'usuarios' WHERE 'sexo' = '$sexo' ORDER BY RAND() LIMIT 1";
  8.     $r = mysql_query($sql, $link); //ATENCIÓN! Función deprecada ;)
  9.     $arr = mysql_fetch_array($r);
  10.     return $arr['nombre'];
  11. }  
  12.  
  13.  
  14. $pregunta = shuffle($pregunta);  
  15.     $result=mysql_query("SELECT usuarios.* FROM usuarios WHERE usuarios.aprobacion = 'si' order by RAND() limit 100",$link);
  16.  
  17. echo '<quizzes>';
  18. echo '  <quiz>';
  19. echo '    <title>Quien es Quien?</title>';
  20. echo '    <grading>';
  21. echo '      <range start="0" end="100">';
  22. echo '        <grade>F</grade>';
  23. echo '        <rank>Rank</rank>';
  24. echo '      </range>';
  25. echo '    </grading>';
  26.  
  27. while($row = mysql_fetch_array($result)) {
  28.    
  29. $pregunta[0]['nombre'] = '%s';
  30. $pregunta[0]['score'] = 1;
  31. $pregunta[1]['nombre'] = getNombre('m', $link);
  32. $pregunta[1]['score'] = 0;
  33. $pregunta[2]['nombre'] = getNombre('m', $link);
  34. $pregunta[2]['score'] = 0;
  35.  
  36. $pregunta = shuffle($pregunta);  
  37.  
  38.    
  39.         printf("
  40.             <question>
  41.      <text>Pregunta</text>
  42.      [<img src='%s' alt='Profile' />]
  43.  
  44.      <option>
  45.        <text>%s</text>
  46.        <score>1</score>
  47.      </option>
  48.  
  49.      <option>
  50.        <text><? echo $pregunta = shuffle($pregunta); ?></text>
  51.        <score>0</score>
  52.      </option>
  53.  
  54.      <option>
  55.        <text>%s</text>
  56.        <score>0</score>
  57.      </option>
  58.     </question>
  59.         ", $row["img"], $row["pregunta"], $row["nombre"], $row["nombre"]);
  60.  
  61.  
  62.     }
  63.     mysql_free_result($result);
  64.  
  65. echo '  </quiz>';
  66. echo '</quizzes>';
  67. ?>

pero entiendo que está mal ya que me da la sensación de que el print debería estar dentro del array para que se muestre aleatoriamente.. estoy muy mareado, creo que voy a tener que contratar a alguien para que me ayude!
  #7 (permalink)  
Antiguo 22/11/2012, 03:51
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Incorporar include dentro de xml con php

Uhm...

La idea sería esta...

Código PHP:
while($row mysql_fetch_array($result)) {
    
$pregunta[0]['nombre'] = $row['nombre'];
$pregunta[0]['score'] = 1;
$pregunta[1]['nombre'] = getNombre($row['sexo'], $link); //Así nos aseguramos que sea del mismo sexo!
$pregunta[1]['score'] = 0;
$pregunta[2]['nombre'] = getNombre($row['sexo'], $link);
$pregunta[2]['score'] = 0;
 
$pregunta shuffle($pregunta);  
 
    
        
printf("
            <question>
      <text>Pregunta</text>
      [<img src='%s' alt='Profile' />]
 
      <option>
        <text>%s</text>
        <score>%s</score>
      </option>
 
      <option>
        <text>%s</text>
        <score>%s</score>
      </option>
 
      <option>
        <text>%s</text>
        <score>%s</score>
      </option>
    </question>
        "
$row["img"], $row["pregunta"],$pregunta[0]['nombre'],$pregunta[0]['score'],$pregunta[1]['nombre'],$pregunta[1]['score'],$pregunta[2]['nombre'],$pregunta[2]['score'] );
 
 
    } 
Algo así haría... ¿pq?

Al principio, generamos un array en plan
0: "Fulanito", "1"
1: "Menganito", "0"
2: "Pablito", "0"

Después, hacemos un shuffle.. y quizás queda asi
0: "Menganito", "0"
1: "Fulanito", "1"
2: "Pablito", "0"

Asi pues, son 3 nombres + 3 puntuaciones q debes pasar al print, y quedaría algo como lo anterior ;)

Espero que esto te sirva :)
__________________
>> Eleazan's Source
>> @Eleazan
  #8 (permalink)  
Antiguo 22/11/2012, 15:37
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 33
Antigüedad: 15 años
Puntos: 1
Respuesta: Incorporar include dentro de xml con php

Creo que comenzó a funcionarme porque ya hace el bucle pero creo que no estoy enviando bien las variables al array porque me devuelve todos los datos vacíos, solo me pone la imagen bien, o sea que todo lo que tiene que traer desde el array y lo que el array hace en la función no vuelve.. será porque todo tiene que estar dentro del print? o estoy haciendo mal las llamadas

<question>
<text>Pregunta</text>
[
<img src="profile/1353094808.jpg" alt="Profile"/>
]
<option>
<text/>
<score/>
</option>
<option>
<text/>
<score/>
</option>
<option>
<text/>
<score/>
</option>
</question>


Código PHP:
Ver original
  1. <?php
  2. header("Content-type: text/xml");
  3. include("../../../ws/conexion.php");
  4.  
  5. function getNombre($sexo, $link) {
  6.     $sql = "SELECT usuarios.* FROM usuarios WHERE usuarios.sexo = '$sexo' order by RAND() limit 1";
  7.     $r = mysql_query($sql, $link); //ATENCIÓN! Función deprecada ;)
  8.     $arr = mysql_fetch_array($r);
  9.     return $arr['nombre'];
  10. }  
  11.  
  12.  
  13.  
  14.  
  15.     $result=mysql_query("SELECT usuarios.* FROM usuarios order by RAND() limit 100",$link);
  16. echo '<quizzes>';
  17. echo '  <quiz>';
  18. echo '    <title>Quien es Quien?</title>';
  19. echo '    <grading>';
  20. echo '      <range start="0" end="100">';
  21. echo '        <grade>F</grade>';
  22. echo '        <rank>Rank</rank>';
  23. echo '      </range>';
  24. echo '    </grading>';
  25.  
  26. while($row = mysql_fetch_array($result)) {
  27.    
  28. $pregunta = array();    
  29. $pregunta[0]['nombre'] = $row['nombre'];
  30. $pregunta[0]['score'] = 1;
  31. $pregunta[1]['nombre'] = getNombre($row['sexo'], $link); //Así nos aseguramos que sea del mismo sexo!
  32. $pregunta[1]['score'] = 0;
  33. $pregunta[2]['nombre'] = getNombre($row['sexo'], $link);
  34. $pregunta[2]['score'] = 0;
  35.  
  36. $pregunta = shuffle($pregunta);  
  37.  
  38.    
  39.         printf("
  40.            <question>
  41.      <text>Pregunta</text>
  42.      [<img src='%s' alt='Profile' />]
  43.  
  44.      <option>
  45.        <text>%s</text>
  46.        <score>%s</score>
  47.      </option>
  48.  
  49.      <option>
  50.        <text>%s</text>
  51.        <score>%s</score>
  52.      </option>
  53.  
  54.      <option>
  55.        <text>%s</text>
  56.        <score>%s</score>
  57.      </option>
  58.    </question>
  59.        ", $row["img"], $row["pregunta"],$pregunta[0]['nombre'],$pregunta[0]['score'],$pregunta[1]['nombre'],$pregunta[1]['score'],$pregunta[2]['nombre'],$pregunta[2]['score'] );
  60.  
  61.  
  62.     }  
  63.    
  64. echo '  </quiz>';
  65. echo '</quizzes>';
  66. ?>
  #9 (permalink)  
Antiguo 23/11/2012, 12:46
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Incorporar include dentro de xml con php

Fallo tonto por mi parte... así no se usa shuffle xD

Código PHP:
$pregunta shuffle($pregunta);  //MAL!
shuffle($pregunta);  //Bien! 
Ese es el fallo... xD
__________________
>> Eleazan's Source
>> @Eleazan
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:20.