Foros del Web » Programando para Internet » PHP »

Sistema de Encuestas

Estas en el tema de Sistema de Encuestas en el foro de PHP en Foros del Web. Hola: Estoy creando ahora un sistema de encuestas. Tengo está página que es la que me dice el titulo de la encuesta y la cantidad ...
  #1 (permalink)  
Antiguo 14/10/2004, 13:25
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Sistema de Encuestas

Hola:
Estoy creando ahora un sistema de encuestas. Tengo está página que es la que me dice el titulo de la encuesta y la cantidad posible de respuestas que tendrá la misma:
Código HTML:
<html>
<head>
<title>Creación de Encuestas</title>
<link rel="stylesheet" type="text/css" href="my.css">
</head>
<body>
<FORM  action="paso1.php" method="POST" name="encuestas">
 Titulo de la Encuesta: <INPUT TYPE="TEXT"  name="tituloencuesta" size="150" maxlength="250"><br>
 Posibles respuestas: <INPUT TYPE="TEXT"  name="cantidad" size="5" maxlength="8"><br>
 <INPUT TYPE="SUBMIT"  name="enter" value="Continuar >>">
</FORM>
</body>
</html> 
esta es la pagina paso1.php
Código PHP:
<?php
 
echo $_POST['tituloencuesta']."<br>";
 
mysql_connect("localhost","root","");
 
mysql_select_db("jovenclubgrm");
 
$query mysql_query("INSERT INTO jcgrm_encuestas(titulo,activo) VALUES('".$_POST['tituloencuesta']."',1);") or die(mysql_error());
 echo 
"<FORM  action='paso2.php' method='POST' name='encuestas'>";
 for(
$i=0;$i<$_POST['cantidad'];$i++){
  echo 
"Respuesta ".$i.": <INPUT TYPE='TEXT'  name='encuesta".$i."' size='50' maxlength='250'><br>";
 }
 echo 
"<INPUT TYPE='HIDDEN'  name='veces' value='".$_POST['cantidad']."'>";
 echo 
"<INPUT TYPE='SUBMIT'  name='enter' value='Continuar >>'>";
echo 
"</FORM>";
?>
Lo primero es que no se como obtener el ID de esa encuesta que inserte en el momento antes de crear el formulario, para entonces poder coger ese ID y pasarlo como un campo hidden a la pagina que se encargaria de insertar todas las posibles respuestas. No se es como hacer la consulta para que me inserte los valores contenidos en los input cuando sean mas de dos. Se pudieran ejecutar tantas consultas como input hubiera pero existe alguna otra forma de hacer esto?

Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 14/10/2004 a las 13:32
  #2 (permalink)  
Antiguo 14/10/2004, 16:36
 
Fecha de Ingreso: noviembre-2003
Ubicación: Puente de ixtla
Mensajes: 773
Antigüedad: 20 años, 5 meses
Puntos: 0
bueno lo mismo me pregunte yo con un sistema de postales que estoy haciendo y h encontrado la respuesta.

haces esto

[PHP]
<?
include("coneccion.php");
$ssql = "SELECT * FROM postales";
$ssql .= " ORDER BY id_postales desc";
$consulta = mysql_query($ssql,$conn);
$id= mysql_num_rows($consulta);
?>


<input type="text" name="id_postales" value="<? echo $id+1;?>">

me imagino que esto va a ir en el formulario y claro que cambia el nombre de las tablas y el nombre de la id
__________________
°º¤ø,¸¸,ø¤º°`°º¤ø,¸S@M°º¤ø,¸¸,ø¤º°`°º¤ø,¸.
Dios solo nos dio el 0 y el 1 y con solo eso hemos construido un universo
  #3 (permalink)  
Antiguo 14/10/2004, 16:54
 
Fecha de Ingreso: diciembre-2003
Mensajes: 18
Antigüedad: 20 años, 3 meses
Puntos: 0
no entiendo...
....¿nunca escucharon hablar de los campos auto_increment?

...
  #4 (permalink)  
Antiguo 14/10/2004, 16:58
 
Fecha de Ingreso: noviembre-2003
Ubicación: Puente de ixtla
Mensajes: 773
Antigüedad: 20 años, 5 meses
Puntos: 0
ha esque no me di cuenta que lo del titulo ya lo habia insertado en la tabla entonces solo pondria todo lo que puse arriba pero modificando lo del campo por esto
<input type="text" name="id_postales" value="<? echo $id;?>">

esque en mi sistema de postalestenia que sacar la id que seria antes de enviarla por correo
__________________
°º¤ø,¸¸,ø¤º°`°º¤ø,¸S@M°º¤ø,¸¸,ø¤º°`°º¤ø,¸.
Dios solo nos dio el 0 y el 1 y con solo eso hemos construido un universo
  #5 (permalink)  
Antiguo 14/10/2004, 17:51
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
loading......


Supongo que tu tabla jcgrm_encuestas
Si no lo tienes.

Código PHP:
mysql_query("ALTER TABLE jcgrm_encuestas ADD ID INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST"); 
tiene una clave primaria que serìa la ID y se autoincremente por cada registro nuevo si no lo tiene hazlo solo asì generaràs la ID podràs usarlo, modificar los registros de esa ID osea maravillas.


connection closed.
__________________

Maborak Technologies
  #6 (permalink)  
Antiguo 14/10/2004, 19:05
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Si por supuesto

Pues claro que tiene los campos autoincrementables ya que estos me sirven para poder modificar las encuestas y saber a cuales pertenecen las preguntas y las respuestas. Voy a explicarme un poco mejor para que sepan que es lo que quiero hacer en realidad. Bien si se dieron cuenta tengo dos páginas (por ahora). La primera es para poner el título y la cantidad de posibles respuestas que ha de llevar la encuesta. La segunda página se encargara de insertar el titulo de esa primera encuesta en la tabla jcgrm_encuestas cuya estructura es la siguiente:
Cita:
IDEncuesta int(6) NOT NULL autoincrement PRIMARY KEY
Titulo varchar(150)
Activa BOOL
Lo otro es un ciclo para generar tantos input como el usuario haya definido en la variable de cantidad de respuestas. Ahora porque necesito que en esta página ya se inserten las cosas en esta tabla pues sencillo porque las respuestas corresponderían a esa pregunta. Entonces lo que necesito es tener el ID de la última encuesta esa que inserte para cuando pase a la otra pagina me inserte en la tabla jcgrm_encuestas_respuestas cuya estructura es la siguiente:
Cita:
IDEncuesta int(6)
Respuesta varchar(150)
Votos int(8)
las posibles respuestas que se deben dar a esa pregunta. Me entendieron ahora ??
Salu2
__________________
Ing. Reynier Pérez Mira
  #7 (permalink)  
Antiguo 14/10/2004, 19:27
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
loading.....



ahh bueno ahora se pone mas clara.
Usa la funcion
mysql_insert_id

http://bo.php.net/manual/es/printwn/...-insert-id.php



connection closed.
__________________

Maborak Technologies
  #8 (permalink)  
Antiguo 14/10/2004, 20:20
Avatar de Edypu  
Fecha de Ingreso: octubre-2003
Ubicación: La Paz - Bolivia
Mensajes: 394
Antigüedad: 20 años, 6 meses
Puntos: 1
saludos MaBoRaK


te complicas mucho la vida ... en tu primer formulario create el ID y trabajas con ese ID en los siguientes formularios.

Si utilizas campos con auto incremento no podras saber que ID es, podrias unas la fecha del sistema (DATETIME) como un ID, pero lo que yo hago es crearme mi propio ID, tengo una funcion que me genera ID en forma randomica, puedes usar LETRAS o NUMEROS o hacer convinación de numeros y letras.

salu2 ;)
  #9 (permalink)  
Antiguo 14/10/2004, 20:58
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Pues ahora son otros los problemas

Ya he resuelto lo del ID. Ahora el código es este:
Código PHP:
if($_GET['do'] == 0){
 echo 
"<form name='admin' method='POST' action='encuestas.php?mod=".$mod."&accion=publicar&do=1&jcgrmsid=".session_id()."'>";
 echo 
"<table width='50%' cellpadding='0' cellspacing='1' class='table' border='0' align='center'>";
 echo 
"<tr>";
 echo 
"<td colspan='2' class='padding font topics tr bold'>Publicación de encuestas</td>";
 echo 
"</tr>";
 echo 
"<tr>";
 echo 
"<td class='paddingimg font' width='30%' align='right'>Título de la Encuesta:</td>";
 echo 
"<td class='paddingimg font' width='70%'><input type='text' name='titulo' size='60' class='edit font'></td>";
 echo 
"</tr>";
 echo 
"<tr>";
 echo 
"<td class='paddingimg font' align='right'>Cantidad de Respuestas:</td>";
 echo 
"<td class='paddingimg font'><input type='text' name='cantidad' size='5' class='edit font'></td>";
 echo 
"</tr>";
 echo 
"<tr>";
 echo 
"<td class='paddingimg font' align='right'>Activar encuesta:</td>";
 echo 
"<td class='paddingimg font'>";
 echo 
"<select name='activo' size='1' class='edit font td'>";
 echo 
"<option value='0' selected>No</option>";
 echo 
"<option value='1'>Sí</option>";
 echo 
"</select>";
 echo 
"</td>";
 echo 
"</tr>";
 echo 
"<tr>";
 echo 
"<td class='paddingimg font' colspan='2' align='center'><input type='submit' name='enter' value='Continuar >>' class='edit font'></td>";
 echo 
"</tr>";
 echo 
"</table>";
 echo 
"</form>";
}elseif(
$_GET['do'] == 1){
 
$query "INSERT INTO jcgrm_encuestas(titulo,activo) VALUES('".$_POST['titulo']."','".$_POST['activo']."')";
 
$result mysql_query($query) or die(mysql_error());
 
// aquí es donde obtengo el ID de la última encuesta insertada en la BDatos
 
$queryreverse "SELECT idencuesta FROM jcgrm_encuestas";
 
$resultreverse mysql_query($queryreverse) or die(mysql_error());
 for(
$i=mysql_num_rows($resultreverse)-1;$i>=0;$i--){
  if(!
mysql_data_seek($resultreverse,$i)){
   echo 
mysql_error();
   continue;
  }
  
$row mysql_fetch_array($resultreverse);
  
$lastpoll $row['idencuesta'];
 }
 echo 
"<form name='admin' method='POST' action='encuestas.php?mod=".$mod."&accion=publicar&do=2&jcgrmsid=".session_id()."'>";
 echo 
"<table width='50%' cellpadding='0' cellspacing='1' class='table' border='0' align='center'>";
 echo 
"<tr>";
 echo 
"<td colspan='2' class='padding font topics tr bold'>Publicación de encuestas</td>";
 echo 
"</tr>";
 
// aquí imprimo tantos edit como posibles respuestas haya puesto el usuario
 // en el formulario anterior
 
for($j=0;$j<$_POST['cantidad'];$j++){
   echo 
"<tr>";
   echo 
"<td class='paddingimg font' width='30%' align='right'>Respuesta #".$j."</td>";
   echo 
"<td class='paddingimg font' width='70%'><input type='text' name='respuesta".$j."' size='60' class='edit font'></td>";
   echo 
"</tr>";
 }
 
// este ciclo FOR provoca que los input salgan con los siguientes nombres
 // respuesta0,respuesta1,respuesta2 así hasta la cantidad dada por el 
 // usuario
 
echo "<tr>";
 echo 
"<td class='paddingimg font' colspan='2' align='center'><input type='hidden' name='cantidad' value='".$_POST['cantidad']."'><input type='hidden' name='encuesta' value='".$lastpoll."'><input type='submit' name='enter' value='Continuar >>' class='edit font'></td>";
 echo 
"</tr>";
 echo 
"</table>";
 echo 
"</form>";
}if(
$_GET['do'] == 2){
 
// aquí voy a ejecutar tantas consultas como cantidad de respuestas haya 
 // entrado el usuario antes
 
for($i=0;$i<$_POST['cantidad'];$i++){
  
$respuesta $_POST['respuesta'].$i// primer problema cuando concateno 
                                        // $_POST['respuesta'] con $i me 
                                        // subsituye $respuesta por 0 que es 
                                        // el valor inicial de $i cuando lo que 
                                        // quiero lograr es que $respuesta sea
                                        // respuesta0, respuesta1
  
$query "INSERT INTO jcgrm_encuestas_respuestas(idencuesta,respuesta,votos) VALUES('".$_POST['encuesta']."','".$respuesta."',0)";
  
$result mysql_query($query) or die(mysql_error());
 }

entonces en el código PHP está explicado lo que me pasa. Es que hay que convertir $i a una cadena porque cuando lo debugeo me dice que $i es de tipo long.
Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 14/10/2004 a las 21:02
  #10 (permalink)  
Antiguo 14/10/2004, 22:59
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Y por qué no utilizas mysql_insert_id() ???
Veo que ya te lo recomendaron, pero no dices nada al respecto.
http://www.php.net/manual/es/functio...-insert-id.php

Y te estás complicando bastante con algo muy sencillo.
Y si por último, quieres hacer tú mismo la consulta y obtener el id.
Código PHP:
$queryreverse "SELECT idencuesta FROM jcgrm_encuestas ORDER BY idencuesta DESC LIMIT 0,1"
De esa manera optimizas bastante la consulta porque no devuelves todo y lo buscas desde PHP, sino que la consulta ya te devuelve sólo el campo del registro que quieres.... o sea que sólo haces el mysql_query y lees el primer (y único) valor...
pero trata de utilizar la función que te pusimos y nos cuentas.

Saludos
  #11 (permalink)  
Antiguo 15/10/2004, 06:38
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Gracias

Ya probé lo que me dicen y es cierto me ahorro todo ese proceso de seleccionar y ejecutar de nuevo una consulta. Ahora lo que no logro hacer es lo de concatenar la variable $_POST['encuesta'] y $i para que me queden de esta forma: encuesta0, encuesta1, encuesta2 ...

Una pregunta estuve leyendo en el manual y vi algo como esto:
Código PHP:
INSERT INTO foo (auto,textVALUES(NULL,'text'); # generate ID by inserting NULL
INSERT INTO foo2 (id,textVALUES(LAST_INSERT_ID(),'text');  # use ID in second table 
lo que hace eso es insertar el último ID que se haya en la tabla a mi segunda tabla que es lo que quiero hacer, cierto no?
Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 15/10/2004 a las 06:40
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 21:48.