Foros del Web » Programando para Internet » PHP »

problemilla con una encuesta

Estas en el tema de problemilla con una encuesta en el foro de PHP en Foros del Web. Hola gente, pues veran tengo un pekeño script para poner encuestas funcina con PHP y MySQL el metodo de votacion es de un voto por ...
  #1 (permalink)  
Antiguo 21/06/2006, 13:50
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
problemilla con una encuesta

Hola gente, pues veran tengo un pekeño script para poner encuestas funcina con PHP y MySQL el metodo de votacion es de un voto por usuario o sea ke hay ke estar registrado para poder votar(esto funciona bien), una vez ke el usuario voto ya no podra hacerlo de nuevo, aki les pong el codigo del script y luego paso a contarles mi lio

Código PHP:
<?php
$enkesta_destino 
"main.php"// destino del form al ser enviado, io por ejemplo lo tengo en el index con un include entonces ago que vaya al index.php
$size_fuente "1"// indica el tamaño de la fuente
$color_fuente "#000000"// indica el color de la fuente
$color_barras "#CC0000"// indicador de los porcentages elije el color que quieras
$size_barras "10"// indicador de la grosos de las barras q muestran los porcentajes
$host "localhost"// host de la bdd
$userx "user"// usuario
$passx "*****"// password
$bdd "labase"// base de datos

/* A partir de aquí es recomendable que no toques nada */

$conecta mysql_connect($host,$userx,$passx); mysql_select_db($bdd,$conecta);
session_start(); /* Conectado con exito a la bdd y sesion iniciada */

    
if(!isset($_SESSION[usuario]) ) { /* si es usuario anonimo, veras los resultados pero no podras votar */
    
    
$query "SELECT * FROM enkesta ORDER BY id DESC LIMIT 0, 1"$resp mysql_query($query); /* si os fijais con esta seleccion elegimos siempre la última enquesta segun la id :D */
    
while ($enkesta mysql_fetch_array($resp)) {
        
/********************************************************************
        suma de el total de votos realizados los tendremos en $votos_totales
        y calculo de cada porcentage dentro del while
        los tendremos en $porcentage_op1, $porcentage_op2 etc...
        /********************************************************************/
         
$votos_totales $enkesta[vot1] + $enkesta[vot2] + $enkesta[vot3] + $enkesta[vot4];
         
$mult_op1 $enkesta[vot1] * 100$porcentage_op1 =@ round($mult_op1 $votos_totales,0);
         
$mult_op2 $enkesta[vot2] * 100$porcentage_op2 =@ round($mult_op2 $votos_totales,0);
         
$mult_op3 $enkesta[vot3] * 100$porcentage_op3 =@ round($mult_op3 $votos_totales,0);
         
$mult_op4 $enkesta[vot4] * 100$porcentage_op4 =@ round($mult_op4 $votos_totales,0);
?>
    <table width='100%' border='0'>
    <tr><td align='center'><font size='<?=$size_fuente?> 'color='#000000'><b><?=$enkesta[titol]?></b></font></td></tr>
    <tr><td height='15'><font size='<?=$size_fuente?>' color='#000000'><b><?=$enkesta[op1]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot1]?> votos - <?=$porcentage_op1?>%</font></td><tr>
    <tr><td><table width='<?=$porcentage_op1?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr>
    <tr><td height='15'><font size='<?=$size_fuente?>' color='#000000'><b><?=$enkesta[op2]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot2]?> votos - <?=$porcentage_op2?>%</font></td><tr>
    <tr><td><table width='<?=$porcentage_op2?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr>
    <tr><td height='15'><font size='<?=$size_fuente?>' color='#000000'><b><?=$enkesta[op3]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot3]?> votos - <?=$porcentage_op3?>%</font></td><tr>
    <tr><td><table width='<?=$porcentage_op3?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr>
    <tr><td height='15'><font size='<?=$size_fuente?>' color='#000000'><b><?=$enkesta[op4]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot4]?> votos - <?=$porcentage_op4?>%</font></td><tr>
    <tr><td><table width='<?=$porcentage_op4?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr>
    <tr><td align='center'><font size='<?=$size_fuente?>' color='#000000'>Votos totales: <?=$votos_totales?></font></td><tr>
    </table>
<? 
        
}/* fin del while que muestra los datos */
    
/* fin del if de si el usuario es anonimo*/

    
else{ /* si hay sesion abierta*/
    /* Miramos si el usuario ha sido o no enquestado consultando a la tabla users */
        
$querys "SELECT * FROM users WHERE nick='".$_SESSION[usuario]."'";
        
$respira mysql_query($querys);
        while (
$jj mysql_fetch_array($respira)) { $usuari_enkestat $jj[enkesta]; }
        
        if (
$usuari_enkestat == "si") { /* si ya lo ha sido haremos lo mismo que si fuera animo, no puede votar pues que solo vea los resultados */
        
$query "SELECT * FROM enkesta ORDER BY id DESC LIMIT 0, 1";
        
$resp mysql_query($query);
            while (
$enkesta mysql_fetch_array($resp)) {
             
$votos_totales $enkesta[vot1] + $enkesta[vot2] + $enkesta[vot3] + $enkesta[vot4];
             
$mult_op1 $enkesta[vot1] * 100$porcentage_op1 =@ round($mult_op1 $votos_totales,0);
             
$mult_op2 $enkesta[vot2] * 100$porcentage_op2 =@ round($mult_op2 $votos_totales,0);
             
$mult_op3 $enkesta[vot3] * 100$porcentage_op3 =@ round($mult_op3 $votos_totales,0);
             
$mult_op4 $enkesta[vot4] * 100$porcentage_op4 =@ round($mult_op4 $votos_totales,0);
             
?>
                <table width='100%' border='0'>
                <tr><td align='center'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[titol]?></b></font></td></tr>
                <tr><td height='15'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[op1]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot1]?> votos - <?=$porcentage_op1?>%</font></td><tr>
                <tr><td><table width='<?=$porcentage_op1?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr>
                <tr><td height='15'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[op2]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot2]?> votos - <?=$porcentage_op2?>%</font></td><tr>
                <tr><td><table width='<?=$porcentage_op2?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr>
                <tr><td height='15'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[op3]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot3]?> votos - <?=$porcentage_op3?>%</font></td><tr>
                <tr><td><table width='<?=$porcentage_op3?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr>
                <tr><td height='15'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[op4]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot4]?> votos - <?=$porcentage_op4?>%</font></td><tr>
                <tr><td><table width='<?=$porcentage_op4?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr>
                <tr><td align='center'><font size='<?=$size_fuente?>'color='#000000'>Votos totales: <?=$votos_totales?></font></td><tr>
                </table>
        <?
            
/* fin del while que muestra los datos */
        
}  /* fin if si el usuario ya ha sido enquestado */
        
if ($usuari_enkestat == "no") { /* Ahora si el usuario no ha sido enquestado, que salga el formulario de votacion */

        
if ($vota) {                                                  /* indicamos si se ha enviado el formulario */
        /* Actualizamos la tabla users e indicamos que 'si' ha votado */
        
$actua "UPDATE users SET enkesta='si' WHERE nick='".$_SESSION[usuario]."'";
        
mysql_query($actua);
        
$query "UPDATE enkesta SET $enke=$enke+1 WHERE id='".$enkesta_id."'";
        
mysql_query($query);
        echo 
"Gracias por votar !!!"/* Un mensaje que indica que se ha votado */
        
/* con este break ahora pasaremos a mostrar el formulario para votar */
        
$query "SELECT * FROM enkesta ORDER BY id DESC LIMIT 0, 1";
        
$resp mysql_query($query);
        while (
$enkesta mysql_fetch_array($resp)) {
        
?>
        <form method="post" name="enkesta_<?=$enkesta[id]?>" action="<?=$enkesta_destino?>">
            <input type="hidden" name="enkesta_id" value="<?=$enkesta[id]?>" />
            <p style="text-align: left; font-weight: bold; color: #000000; font-size: 9pt;"><?=$enkesta[titol]?></p>
            <input type="radio" name="enke" value="vot1" /> <?=$enkesta[op1]?><br />
            <input type="radio" name="enke" value="vot2" /> <?=$enkesta[op2]?><br />
            <input type="radio" name="enke" value="vot3" /> <?=$enkesta[op3]?><br />
            <input type="radio" name="enke" value="vot4" /> <?=$enkesta[op4]?><br />
            <p style="text-align: left;"><input type="submit" value="Enviar voto" name="vota" /></p>
        </form>
<?
            
/* fin if si el usuario NO ha sido enquestado */
        
/* si NO es usuario anonimo */
    
/* y Fin lee el final del leeme.txt para encontrarte con algunas explicaciones de cosas que puedes tener dudas */
?>
Pues bien, mi problema esta en ke cuando incluyo el archivo dela encuesta en mi pagina principal, una vez ke el usuario emite el voto, al guardarse en la BD dicho voto y actualizarse en la tabla de usuarios de ke este ya voto deberia mostrarle los resultados de como va la encuesta, pero no, sucede lo contrario, ke le sigue mostrando el form de la encuesta, he puesto de cabeza el script para ver donde puede estar fallando pero no doy con el, espero ke alguno de uds. me pueda echar una mano.

Un saludo
  #2 (permalink)  
Antiguo 21/06/2006, 14:45
 
Fecha de Ingreso: abril-2006
Ubicación: Talcahuano-Chile
Mensajes: 50
Antigüedad: 18 años
Puntos: 0
De acuerdo

Código PHP:
<form method="post" name="enkesta_<?=$enkesta[id]?>" action="<?=$enkesta_destino?>">
            <input type="hidden" name="enkesta_id" value="<?=$enkesta[id]?>" />
por que pones???
Código PHP:
 name=" <?=$variable ?>" ....
no debería ser
Código PHP:
  name= " <? print($variable); ?>" .....
intenta con eso

saca el "=" despue del "<?" y en vez de colocar el nombre de la variable imprimela esop
  #3 (permalink)  
Antiguo 21/06/2006, 15:00
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
pues nop, no me funciona con eso sigue = :S
  #4 (permalink)  
Antiguo 21/06/2006, 15:22
 
Fecha de Ingreso: julio-2005
Mensajes: 86
Antigüedad: 18 años, 9 meses
Puntos: 3
JEje

Seguro que la columna enkestat se guarda como "si" y como "no"? porque alomejor no coje la variable $usuari_enkestat o no se guarda como valor "si" y como "no" jeje. No se si me explico, en el if tu dices
Código PHP:
       if ($usuari_enkestat == "si") { 
seguro que ese "si" es un "si" en la BBDD?
o que se actualiza el "si" en la bbdd?
  #5 (permalink)  
Antiguo 21/06/2006, 15:25
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
si hombre, se guardan y actualizan como "si" o como "no" en eso no hay lios, el problema esta en ke deberis mostrarme los resultados una vez hecho el voto y no nuevamente el form de la encuesta, ese es mi lio :s
  #6 (permalink)  
Antiguo 21/06/2006, 15:37
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
lo que veo es que no estas terminado tu script despues del echo de "Gracias por votar" , lo que provoca que siga leyendo hasta el formulario de votacion nuevamente.. porque no lanzas un query a la base de datos para solicitar la informacion mas actualizada de la encuesta y la muestras dentro de este if y finalizar el if (del si $vota) con un exit.. asi te evitas que siga leyendo el codigo.

Cita:
if ($vota) { /* indicamos si se ha enviado el formulario */
/* Actualizamos la tabla users e indicamos que 'si' ha votado */
$actua = "UPDATE users SET enkesta='si' WHERE nick='".$_SESSION[usuario]."'";
mysql_query($actua);
$query = "UPDATE enkesta SET $enke=$enke+1 WHERE id='".$enkesta_id."'";
mysql_query($query);
echo "Gracias por votar !!!"; /* Un mensaje que indica que se ha votado */

segun veo aquei deverias de solicitar la info. de la encuesta nuevamente y terminar con u exit.
}
__________________
http://dev.wsnetcorp.com
  #7 (permalink)  
Antiguo 21/06/2006, 15:47
 
Fecha de Ingreso: julio-2005
Mensajes: 86
Antigüedad: 18 años, 9 meses
Puntos: 3
y si te sales y vuelves a entrar te vuelve a salir el form ( estando logueado con el usuario que ha votado ) o ya te salen los resultados?
  #8 (permalink)  
Antiguo 21/06/2006, 16:00
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
si hago refresh ya me salen los resultados, pero esa no es la idea, lo logico es ke me los muestre una vez echo el voto
  #9 (permalink)  
Antiguo 21/06/2006, 16:14
 
Fecha de Ingreso: julio-2005
Mensajes: 86
Antigüedad: 18 años, 9 meses
Puntos: 3
Bien, he pensado, cuentame si te va bien que en el if ($vota) { pon esto:
Código PHP:
        if ($vota) {                                                  /* indicamos si se ha enviado el formulario */ 
        /* Actualizamos la tabla users e indicamos que 'si' ha votado */ 
        $actua = "UPDATE users SET enkesta='si' WHERE nick='".$_SESSION[usuario]."'"; 
        mysql_query($actua); 
        $query = "UPDATE enkesta SET $enke=$enke+1 WHERE id='".$enkesta_id."'"; 
        mysql_query($query); 
        echo "Gracias por votar !!!"; /* Un mensaje que indica que se ha votado */ 
        $query = "SELECT * FROM enkesta ORDER BY id DESC LIMIT 0, 1"; 
                $resp = mysql_query($query); 
            while ($enkesta = mysql_fetch_array($resp)) { 
             $votos_totales = $enkesta[vot1] + $enkesta[vot2] + $enkesta[vot3] + $enkesta[vot4]; 
             $mult_op1 = $enkesta[vot1] * 100; $porcentage_op1 =@ round($mult_op1 / $votos_totales,0); 
             $mult_op2 = $enkesta[vot2] * 100; $porcentage_op2 =@ round($mult_op2 / $votos_totales,0); 
             $mult_op3 = $enkesta[vot3] * 100; $porcentage_op3 =@ round($mult_op3 / $votos_totales,0); 
             $mult_op4 = $enkesta[vot4] * 100; $porcentage_op4 =@ round($mult_op4 / $votos_totales,0); 
        ?>
                        <table width='100%' border='0'> 
                <tr><td align='center'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[titol]?></b></font></td></tr> 
                <tr><td height='15'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[op1]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot1]?> votos - <?=$porcentage_op1?>%</font></td><tr> 
                <tr><td><table width='<?=$porcentage_op1?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr> 
                <tr><td height='15'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[op2]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot2]?> votos - <?=$porcentage_op2?>%</font></td><tr> 
                <tr><td><table width='<?=$porcentage_op2?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr> 
                <tr><td height='15'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[op3]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot3]?> votos - <?=$porcentage_op3?>%</font></td><tr> 
                <tr><td><table width='<?=$porcentage_op3?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr> 
                <tr><td height='15'><font size='<?=$size_fuente?>'color='#000000'><b><?=$enkesta[op4]?></b></font><font size='<?=$size_fuente?>'> - <?=$enkesta[vot4]?> votos - <?=$porcentage_op4?>%</font></td><tr> 
                <tr><td><table width='<?=$porcentage_op4?>%' height='<?=$size_barras?>' border='0' style='border: 1px #000000 solid'><tr><td style="background: <?=$color_barras?>; font-size: 2pt;">&nbsp;</td></tr></table></td></tr> 
                <tr><td align='center'><font size='<?=$size_fuente?>'color='#000000'>Votos totales: <?=$votos_totales?></font></td><tr> 
                </table> 
                
                
    <?
    
;break
        } 
/* con este break ahora pasaremos a mostrar el formulario para votar */
cuentame que tal
  #10 (permalink)  
Antiguo 21/06/2006, 18:23
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
ya lo he arreglado de otra forma pero de todos modos se agradece la ayuda
  #11 (permalink)  
Antiguo 21/06/2006, 18:39
Avatar de DvD AdN  
Fecha de Ingreso: mayo-2005
Ubicación: Frente al monitor
Mensajes: 610
Antigüedad: 18 años, 11 meses
Puntos: 0
y porque no pones como lo arreglaste
__________________
Keep f***ing learning
Ask for f***ing help.
Use f***ing spell check.
Think about all the f***ing possibilities.
  #12 (permalink)  
Antiguo 21/06/2006, 19:50
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
solo me basto añadir un else despues del echo "gracias por votar" y cerrarlo al final de manera ke aumentaria una llave mas de cierre.

saludos
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 17:25.