Foros del Web » Programando para Internet » PHP »

Problema al mostrar preguntas en encuesta

Estas en el tema de Problema al mostrar preguntas en encuesta en el foro de PHP en Foros del Web. Que tal, sigo trabajando en un proyecto basado en creación de encuestas en base a una plantilla general, es decir el usuario selecciona el numero ...
  #1 (permalink)  
Antiguo 16/10/2012, 09:41
 
Fecha de Ingreso: septiembre-2012
Ubicación: Mexico
Mensajes: 58
Antigüedad: 11 años, 7 meses
Puntos: 2
Pregunta Problema al mostrar preguntas en encuesta

Que tal, sigo trabajando en un proyecto basado en creación de encuestas en base a una plantilla general, es decir el usuario selecciona el numero de preguntas que desea tener la encuesta entre otras opciones con las cuales no tengo problemas.

El problema es cuando el usuario desea un numero de preguntas que va desde 5 hasta 10 preguntas, las escribirá en unos campos de texto (INPUT's), entonces agrego un botón llamado "Crear encuesta", este botón hace la llamada hacia la pagina que procesa los datos del formulario para crear la encuesta.

Aquí mi código:

Código PHP:
Ver original
  1. <?php
  2.    
  3.     $numero_preguntas = $_GET["w"];
  4.    
  5.     echo "<form action='doEncuesta.php' method='POST'>";
  6.     echo "<b>2. Escriba el nombre de la encuesta: </b><input type='text' name='n_encuesta'>";
  7.     echo "<br>";
  8.     echo "<br>";
  9.     echo "<b>3. Seleccione Centro de trabajo: </b>
  10.                 <select name='agencias' id='lista'>
  11.                 <option selected value=''>Seleccione...</option>
  12.                 <option value='Distribucion'>Distribucion</option>
  13.                 <option value='Zona Poninente'>Zona Poniente</option>
  14.                 <option value='Zona Oriente'>Zona Oriente</option> 
  15.                 </select>";
  16.     echo "<br>";
  17.     echo "<br>";
  18.     echo "<b>4. Seleccione el tipo de encuesta: </b>
  19.                 <select name='contratos' id='lista2'>
  20.                 <option selected value=''>Seleccione...</option>
  21.                 <option value='Base Confianza'>Base Confianza</option>
  22.                 <option value='Base Sindical'>Base Sindicalizado</option>
  23.                 <option value='Temporal Confianza'>Temporal Confianza</option> 
  24.                 <option value='Temporal Sindicalizado'>Temporal Sindicalizado</option> 
  25.                 </select>";
  26.     echo "<br>";
  27.     echo "<br>";
  28.     echo "<b>5. Escriba las preguntas que tendra la encuesta:</b>";
  29.     echo "<br>";
  30.     echo "<br>";
  31.     for ($i='1';$i <= $numero_preguntas; $i++)
  32.         {
  33.         echo "Preguntas: <input type='text' name='p1' size='50'>";
  34.         echo "<br>";
  35.         }
  36.         echo "<br>";
  37.         echo "<input type='submit' name='crear' value='Crear encuesta'>";
  38.     echo "</form>";
  39.        
  40.             if(isset($_POST['crear'])){
  41.                 require("doEncuesta.php");
  42.             }  
  43. ?>


Y este el archivo doEncuesta.php que procesa los datos, muestro los datos con la función ECHO, pero el problema es que quiero que me muestre todas la preguntas que el usuario elija y escriba en las entradas de texto, añadiéndole a cada pregunta un área de texto, para que ahí se escriba su respuesta y al terminar de responderla se envié hacia una tabla de respuestas.

Código PHP:
Ver original
  1. <?php
  2.  
  3.     $n_encuesta = $_POST['n_encuesta'];
  4.     $c_trabajo = $_POST['agencias'];
  5.     $t_encuesta = $_POST['contratos'];
  6.     $preguntas = $_POST['p1'];
  7.    
  8.     echo "<h3 align='center'>El nombre de la encuesta es $n_encuesta </h3>";
  9.     echo "<br>";
  10.     echo "<h4 align='center'>El centro de trabajo es $c_trabajo</h4>";
  11.     echo "<h4 align='center'>El tipo de encuesta es $t_encuesta</h4>";
  12.     echo "<br>";
  13.     echo "<h4>Responde las siguientes preguntas:</h4>";
  14.     echo "<form>
  15.             $preguntas <input type='text' name='answer' size='80'>
  16.          </form>";
  17. ?>

Si alguien no me entiende, háganme saber, espero me puedan ayudar, GRACIAS!
  #2 (permalink)  
Antiguo 16/10/2012, 10:18
 
Fecha de Ingreso: octubre-2011
Ubicación: Chile
Mensajes: 52
Antigüedad: 12 años, 6 meses
Puntos: 17
Respuesta: Problema al mostrar preguntas en encuesta

Puedes hacer un <input name="pregunta[]" /> así creará un array el cual podrías procesar con foreach. ej:

tu code1:
linea 33: echo "Preguntas: <input type='text' name='pregunta[]' size='50'>";

tu code2:
linea 06: $preguntas = $_POST['pregunta'];
linea 15: foreach ($preguntas as $p) //inserte código útil aquí.


APARTE:
Podrias hacer esto mucho mas lindo con CSS/jQuery/Javascript:
ej. al boton dale un onclick="function() { var numeroPregunta=1; jQuery(form).append('<input name="p'+numeroPregunta+'" />'); numeroPregunta=numeroPregunta+1;})"

http://api.jquery.com/append/


RECOMENDACIONES // Offtopic.
1- limpia las variables, están desnudas y estúpidamente violables.
2- usa comillas simples ' ' en los echo 'ejemplo'; cuando no uses variables por motivos de rendimiento, ya que las comillas dobles buscan variables en la string antes de escribirla, por lo que causa un procesamiento inútil (ya que como dije, no estas usando variables).

nota punto 2: es ÍNFIMO el rendimiento que se gana pero nunca es malo tenerlo en cuenta.

Saludos.
__________________
No respondo mensajes privados, pregunte por foro como todos los mortales.

Última edición por EduardoU24; 16/10/2012 a las 10:27
  #3 (permalink)  
Antiguo 16/10/2012, 10:46
 
Fecha de Ingreso: septiembre-2012
Ubicación: Mexico
Mensajes: 58
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Problema al mostrar preguntas en encuesta

Cita:
Iniciado por EduardoU24 Ver Mensaje
Puedes hacer un <input name="pregunta[]" /> así creará un array el cual podrías procesar con foreach. ej:

tu code1:
linea 33: echo "Preguntas: <input type='text' name='pregunta[]' size='50'>";

tu code2:
linea 06: $preguntas = $_POST['pregunta'];
linea 15: foreach ($preguntas as $p) //inserte código útil aquí.


APARTE:
Podrias hacer esto mucho mas lindo con CSS/jQuery/Javascript:
ej. al boton dale un onclick="function() { var numeroPregunta=1; jQuery(form).append('<input name="p'+numeroPregunta+'" />'); numeroPregunta=numeroPregunta+1;})"

[url]http://api.jquery.com/append/[/url]


RECOMENDACIONES // Offtopic.
1- limpia las variables, están desnudas y estúpidamente violables.
2- usa comillas simples ' ' en los echo 'ejemplo'; cuando no uses variables por motivos de rendimiento, ya que las comillas dobles buscan variables en la string antes de escribirla, por lo que causa un procesamiento inútil (ya que como dije, no estas usando variables).

nota punto 2: es ÍNFIMO el rendimiento que se gana pero nunca es malo tenerlo en cuenta.

Saludos.
Gracias amigo, entiendo lo que me quieres decir, esto solamente es para una practica de mi materia de diseño web, soy novato en esto de PHP, conosco algo de CSS, pero nada de JQuery y JavaScript.

Te agradesco las recomendaciones, las cuales las voy a tomar en cuenta.

Ahora bien, dejame ver si te entendi, escribiendo el codigo con una sentencia foreach:

linea 33 codigo 1:
Código PHP:
Ver original
  1. echo "Preguntas: <input type='text' name='pregunta[]' size='50'>";

linea 15 a 18 codigo 2:
Código PHP:
Ver original
  1. foreach ($preguntas as $value)
  2.             {
  3.             echo $value "<input type='text' name='ans[]' size='70'>";
  4.             }

Es correcto hacer esto??

Saludos!!
  #4 (permalink)  
Antiguo 16/10/2012, 11:21
 
Fecha de Ingreso: octubre-2011
Ubicación: Chile
Mensajes: 52
Antigüedad: 12 años, 6 meses
Puntos: 17
Respuesta: Problema al mostrar preguntas en encuesta

Para comprender como funciona debemos saber lo que tenemos

primero, como te comente dentro de tu for($i... tienes un echo con un input
este input creara de 1 a N el texto "<input type='text' name='p1' size='50'>" lo cual no seria muy útil ya que todos se llaman p1.
lo que te explique es que podemos reemplazar ese p1 con un p[]
el cual creara (una vez submit) tantas "p" como se hayan indicado, dejándolas como p[0], p[1], p[n].

así, luego de obtenerlas con $_POST['p'] en cada uno de los valores tendrías como ej $_POST['p'][0], $_POST['p'][1], etc.
dependiendo de cuantos hayas puesto.

lo que hacemos con foreach, como su nombre lo dice "para cada" $_POST['p'] hacer X codigo.
quedaria algo como
Código:
foreach ($_POST['p'] as $pregunta) {
    echo $pregunta;
    // lo que se necesite...
}
lo que en pocas palabras hace es POR CADA $_POST['p'] es decir por cada valor de "P" (como los P[0],P[1]...) hace X proceso, como el echo y el comentario.

Se que con esto no respondo realmente tus preguntas, pero creo que es mejor enseñar y comprender a dar el código.
Espero que te sea de ayuda.

Saludos.

pd: aprende javascript con jQuery (jQuery es una class de javascript muy poderosa, MUY PODEROSA), es MUY SIMPLE de usar y MUY SIMPLE de aprender, es completamente recomendable y las cosas quedan mucho mas lindas.
__________________
No respondo mensajes privados, pregunte por foro como todos los mortales.
  #5 (permalink)  
Antiguo 16/10/2012, 11:52
 
Fecha de Ingreso: septiembre-2012
Ubicación: Mexico
Mensajes: 58
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Problema al mostrar preguntas en encuesta

Cita:
Iniciado por EduardoU24 Ver Mensaje
Para comprender como funciona debemos saber lo que tenemos

primero, como te comente dentro de tu for($i... tienes un echo con un input
este input creara de 1 a N el texto "<input type='text' name='p1' size='50'>" lo cual no seria muy útil ya que todos se llaman p1.
lo que te explique es que podemos reemplazar ese p1 con un p[]
el cual creara (una vez submit) tantas "p" como se hayan indicado, dejándolas como p[0], p[1], p[n].

así, luego de obtenerlas con $_POST['p'] en cada uno de los valores tendrías como ej $_POST['p'][0], $_POST['p'][1], etc.
dependiendo de cuantos hayas puesto.

lo que hacemos con foreach, como su nombre lo dice "para cada" $_POST['p'] hacer X codigo.
quedaria algo como
Código:
foreach ($_POST['p'] as $pregunta) {
    echo $pregunta;
    // lo que se necesite...
}
lo que en pocas palabras hace es POR CADA $_POST['p'] es decir por cada valor de "P" (como los P[0],P[1]...) hace X proceso, como el echo y el comentario.

Se que con esto no respondo realmente tus preguntas, pero creo que es mejor enseñar y comprender a dar el código.
Espero que te sea de ayuda.

Saludos.

pd: aprende javascript con jQuery (jQuery es una class de javascript muy poderosa, MUY PODEROSA), es MUY SIMPLE de usar y MUY SIMPLE de aprender, es completamente recomendable y las cosas quedan mucho mas lindas.

Gracias EDUARDO me has ayudado mucho! Apenas voy comenzando en esto de la programación web, HTML y PHP, por algo tenia que comenzar.

Voy a comenzar a leer y buscar libros acerca de estos lenguajes, aveces PHP se vuelve un poco tedioso, y estoy completamente de acuerdo con lo que dices, no soy como otros que piden el codigo y ya, yo trato de entenderlo y aplicarlo, investigo, experimento e implemento.

Con esta pequeña ayuda, serias muy buen maestro en mi Universidad.

Ahora voy con la parte de guardar las respuestas en la BD, pero ahi no creo tener problema!

Etiquetas: encuesta, formulario, preguntas, tabla, usuarios
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:22.