Foros del Web » Programando para Internet » PHP »

Ayuda con Sistema de Encuesta tomado de los FAQ's

Estas en el tema de Ayuda con Sistema de Encuesta tomado de los FAQ's en el foro de PHP en Foros del Web. Hola He tomado el siguiente codigo ( aqui esta en link ) de los FAQ's de PHP de forosdelweb, para hacer una encuesta y me ...
  #1 (permalink)  
Antiguo 01/09/2006, 06:21
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Ayuda con Sistema de Encuesta tomado de los FAQ's

Hola

He tomado el siguiente codigo ( aqui esta en link ) de los FAQ's de PHP de forosdelweb, para hacer una encuesta y me he encontrado con 2 problemas. Este es el codigo:

Encuesta.php
Código PHP:
<?
$servidor 
"localhost"
$usuario "";
$password "";
$base_de_datos "encuesta";
$conextar=mysql_connect ($servidor,$usuario,$password);
    
mysql_select_db($base_de_datos);
    
$sqlupdate "UPDATE encuestas SET valor$voto = valor$voto+1, total = total+1";
    
mysql_query($sqlupdate,$conextar);
    
$sql "SELECT * FROM encuestas ORDER BY idencuesta desc LIMIT 1";
    
$resultados mysql_query($sql,$conextar);
    
$row mysql_fetch_array($resultados);
    
?>
<script type="text/javascript" language="JavaScript">
function resultados(){
window.open("resultados.php","","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=320,height=200");
}
</script>
<form name="form1" method="post" action="<?= $PHP_SELF?>">
  <table width="256" border="0" align="center" cellpadding="0" cellspacing="0" class="forumline">
    <tr valign="baseline"> 
      <td colspan="2" class="row1"> 
        <?=$row['pregunta']; ?>
        <br>
      </td>
    </tr>
    <tr> 
      <td width="110"> 
        <?=$row['respuesta1'];?>
      </td>
      <td width="146"><input type="radio" name="voto" value="1">
      </td>
    </tr>
    <tr> 
      <td> 
        <?=$row['respuesta2'];?>
      </td>
      <td><input type="radio" name="voto" value="2"></td>
    </tr>
    <tr> 
      <td> 
        <?=$row['respuesta3'];?>
      </td>
      <td><input type="radio" name="voto" value="3"></td>
    </tr>
    <tr align="center"> 
      <td height="20" colspan="2"><input type="submit"  class="post"name="Submit" value="Votar" onClick=window.open("resultados.php","","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=320,height=200");
></td>
    </tr>
  </table>
  <p>&nbsp;</p></form>
Resultados.php
Código PHP:
<html>
<head>
<title>Resultados de la encuesta</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
body {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    background-color: #FFFFDD;
}
td {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
}
-->
</style>
</head>
<body>
<?
$servidor 
"localhost"
$usuario "";
$password "";
$base_de_datos "encuesta";
$conextar=mysql_connect ($servidor,$usuario,$password);
    
mysql_select_db($base_de_datos);
    
//$sqlupdate = "UPDATE encuestas SET valor$voto = valor$voto+1, total = total+1";
    //mysql_query($sqlupdate,$conextar);
    
$sql "SELECT * FROM encuestas ORDER BY idencuesta desc LIMIT 1";
    
$resultados mysql_query($sql,$conextar);
    
$row mysql_fetch_array($resultados);
 
$res1round ($row['valor1']*100/$row['total'],2);
 
$res2round ($row['valor2']*100/$row['total'],2);
 
$res3round ($row['valor3']*100/$row['total'],2);
 
?>
<p>Resultados parciales de la encuesta</p>
<?=$row['pregunta']; ?><br>
<br>

<TABLE WIDTH="300"  BORDER="1" ALIGN="center"  BORDERCOLOR="#3097A3">
  <TR>
     <TD WIDTH="100"><?=$row['respuesta1']; ?></TD> 
    <TD WIDTH="*"><IMG HEIGHT="15" WIDTH="<?=$row["valor1"]*100/$row["total"]?>%" SRC="encuesta/barra.gif"></TD>
    <TD ALIGN="center" WIDTH="70"><? echo $res1."%";?> </TD>
  </TR>
  <TR>
   <TD WIDTH="100" ><?=$row['respuesta2']; ?></TD>
    <TD WIDTH="*"><IMG HEIGHT="15" WIDTH="<?=$row["valor2"]*100/$row["total"]?>%" SRC="encuesta/barra.gif"></TD>
    <TD ALIGN="center" WIDTH="70"><? echo $res2."%";?> </TD>
  </TR>
  <TR>
     <TD WIDTH="100"><?=$row['respuesta3']; ?></TD>
    <TD WIDTH="*"><IMG HEIGHT="15" WIDTH="<?=$row["valor3"]*100/$row["total"]?>%" SRC="encuesta/barra.gif"></TD>
    <TD ALIGN="center" WIDTH="70"><? echo $res3."%";?> </TD>
  </TR>
</TABLE>
<form name="form1" method="post" action="">
  <div align="center">
    <p>
      <input type="submit" name="Submit" value="Cerrar Ventana" onclick="window.close();">
    </p>
    <p>&nbsp; </p>
  </div>
</form>
</body>
</html>
Los problemas con que me encontre a ver si alguien me ayuda a solucionar son:

1ero. En el primer voto, siempre va a salir en error de DIVISION BY ZERO, pq las celdas de los resultados estan en "0" obviamente. Hay alguna forma de corregirlo??

2.do Siempre que uno vota y da enviar, se abre la ventana que muestra los resultados, pero no la muestra actualizada. O sea, si uno vota muestra los resultados acorde a la ultima persona que voto, y tal vez por esto tambien pasa el Divizion By Zero del primer voto. No lo actualiza automaticamente.

Alguien me puede ayudar a saber como corregir estos dos errores??? Espero haberme hecho entender. GRACIAS
  #2 (permalink)  
Antiguo 01/09/2006, 08:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
1) .. Si .. con validaciones tipo:

Código PHP:
// etc ...

$sql "SELECT * FROM encuestas ORDER BY idencuesta desc LIMIT 1";
$resultados mysql_query($sql,$conextar);

if (
mysql_num_rows($resultados) > 0){
    
$row mysql_fetch_array($resultados);
    
// etc ...
} else {
   echo 
"Todavía no hay votos ...";

Se trata de ver si la consulta SQL arroja resultados .. Si los hay se acceden y se opera (esas divisiones ..) ..

2) Sobre el tema del refresco de resultados .. lo más proble es que tengas problemas con el caché de la página. Intenta controlarlo con cabeceras HTTP tipo "no caché":

www.php.net/header

Tienes comentarios al respecto en los comentarios de los usuarios de esa función.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 02/09/2006, 16:45
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Hola Cluster, te agradezco mucho la ayuda como siempre muy amable!!

Creo que eso no me ayuda a resolver el problema, tal vez no me hice entender.

Lo que quisiera es el usuario al presionar el boton de ENVIAR, los datos se inserten en la base de datos antes de cargar la pagina RESULTADOS y eso no esta pasando.

por ejemplo. si hay un solo voto, y entro y doy el segundo voto, la sentencia:
Cita:
<input type="submit" class="post"name="Submit" value="Votar" onClick=window.open("resultados.php","","toolbar=0 ,location=0,directories=0,status=0,menubar=0,scrol lbars=0,resizable=0,width=320,height=200");
Carga automaticamente la pagina RESULTADOS y luego inserta el voto en la tabla, o sea que se muestra desactualizada sin mostrarle el efecto que tuvo el voto que hizo el usuario actual, no se si me haga entender.

Si me puedes ayudar con eso te agradeceria mucho.

Creo que una solucion seria, que al cargarse la pagina RESULTADOS.PHP haga un 'refresh' antes de mostrarse para que lea el voto del usuario que acaba de hacer, PERO NO SE COMO HACERLO ..

Podrias decirme como por favor??!! TE AGRADEZCO MUCHO MAN!

Puse este codigo en los meta:
Cita:
<meta http-equiv="Cache-Control" content="no-cache">
<meta HTTP-EQUIV="Expires" CONTENT="-1">
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
Pero no me funciono!! :(
  #4 (permalink)  
Antiguo 02/09/2006, 16:52
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Primero añade el voto, y luego muestra los resultados...
  #5 (permalink)  
Antiguo 02/09/2006, 16:55
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Jaja! no estoy bromeando.
  #6 (permalink)  
Antiguo 02/09/2006, 17:13
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Es muy raro. ¿Puedo ver la url de tu página?

Si quieres probar un sistema de encuestas, puedes probar el que puso turco_7 en el otro post.

http://www.forosdelweb.com/f18/encuesta-401069/
  #7 (permalink)  
Antiguo 02/09/2006, 17:27
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
voy a probar el de turco7 gracias.

El problema que tengo, es ke al dar ENVIAR VOTO, este submit carga automaticamente tambien la pagina resultados.php, pero primero carga esta y luego si mete los datos en la BD. no se pq.
  #8 (permalink)  
Antiguo 02/09/2006, 17:32
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
-Quítale la acción al formulario (form action)
-Haz que se haga el proceso de actualizar sólo si se ha usado ya el formulario.

Código PHP:
<?
$servidor 
"localhost"
$usuario "";
$password "";
$base_de_datos "encuesta";
$conextar=mysql_connect ($servidor,$usuario,$password);
    
mysql_select_db($base_de_datos);

//modificado

if ($_POST['Submit']) {
    
$sqlupdate "UPDATE encuestas SET valor$voto = valor$voto+1, total = total+1";
    
mysql_query($sqlupdate,$conextar);
}

    
$sql "SELECT * FROM encuestas ORDER BY idencuesta desc LIMIT 1";
    
$resultados mysql_query($sql,$conextar);
    
$row mysql_fetch_array($resultados);
    
?>
<script type="text/javascript" language="JavaScript">
function resultados(){
window.open("resultados.php","","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=320,height=200");
}
</script>

<? //modificado ?>
<form name="form1" method="post">
  <table width="256" border="0" align="center" cellpadding="0" cellspacing="0" class="forumline">
    <tr valign="baseline"> 
      <td colspan="2" class="row1"> 
        <?=$row['pregunta']; ?>
        <br>
      </td>
    </tr>
    <tr> 
      <td width="110"> 
        <?=$row['respuesta1'];?>
      </td>
      <td width="146"><input type="radio" name="voto" value="1">
      </td>
    </tr>
    <tr> 
      <td> 
        <?=$row['respuesta2'];?>
      </td>
      <td><input type="radio" name="voto" value="2"></td>
    </tr>
    <tr> 
      <td> 
        <?=$row['respuesta3'];?>
      </td>
      <td><input type="radio" name="voto" value="3"></td>
    </tr>
    <tr align="center"> 
      <td height="20" colspan="2"><input type="submit"  class="post"name="Submit" value="Votar" onClick=window.open("resultados.php","","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=320,height=200");
></td>
    </tr>
  </table>
  <p>&nbsp;</p></form>
  #9 (permalink)  
Antiguo 02/09/2006, 18:01
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Hola, te agradezco la ayuda, pero me bota este error:

Warning: Undefined index: Submit in .. http://www....
  #10 (permalink)  
Antiguo 02/09/2006, 18:07
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
No lo entiendo, Submit es el nombre del botón....

Quítale el OnClick al botón (de todas formas) Con razón cargaba primero la página de los resultados y luego el voto.
  #11 (permalink)  
Antiguo 02/09/2006, 18:15
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Pero si le quito el OnClic al BOTON, cuando el usuario presione enviar VOTO, ya no se va abrir automaticamente la pagina que muestra los resultados.

Lo que sugieres seria, poner una pagina de GRACIas o algo asi, y aparte un link o otro boton que abra resultados.php?
  #12 (permalink)  
Antiguo 02/09/2006, 18:34
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Sí, es una opción.
  #13 (permalink)  
Antiguo 02/09/2006, 18:35
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
mmm... pues si no me queda de otra va tocar, gracias!
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 08:27.