elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Único voto en una encuesta mediante IP [PHP]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Único voto en una encuesta mediante IP [PHP]  (Leído 4,826 veces)
-sagitari-


Desconectado Desconectado

Mensajes: 1.643


:D


Ver Perfil WWW
Único voto en una encuesta mediante IP [PHP]
« en: 4 Noviembre 2006, 13:00 pm »

Hola,

Apenas me voy iniciando en el PHP aunque anteriormente ya había echado mano del PHP, pero la mayoría de veces, haciendo copy/paste sin intención alguna de aprender php...

Bueno, me he bajado una encuesta muy simple (que se guardan los votos en un txt; votos.txt).

Y quiero hacer que solamente una ip pueda hacer un único voto,
me da igual que sea más efectivo que si cookies, que si hacer un sistema de usuarios.... pues yo lo quiero hacer mediante la obtención de la ip.

He probado varias cosas y sin resultado alguno... lo último que he probado ha sido esto:


Código:
<?php

$log = fopen("ip.txt", "a");

$ip  = $_SERVER['REMOTE_ADDR'];

fwrite($log, "".$ip."\n");


if (eregi($ip,$log)) {

echo "No puedes volver a votar, ya has votado anteriormente\n";

}

else {


include "configuracion.php";

function agregaVotacion($voto) { //funcion para agregar el voto
global $archivo;
$leer_votacion = fopen($archivo, "r");
$tu_voto = fread($leer_votacion, filesize($archivo));
fclose($leer_votacion);
$votos = split('[|:]', $tu_voto);
for ($i = 1; $i < count($votos); $i = $i + 2) {
$nombre = $i - 1;
if ($votos[$nombre] == $voto) {
$votos[$i]++;
}

if ($i == (count($votos) - 1)) {
$act_Voto .= $votos[$nombre] . ":" . $votos[$i];
}
else {
$act_Voto .= $votos[$nombre] . ":" . $votos[$i] . "|";
}
}

$escribe_archivo = fopen($archivo, "w");
fputs($escribe_archivo, $act_Voto);
fclose($escribe_archivo);
}


function mostrar($msgs) { //funcion para mostrar la votación y sus resultados
global $titulo, $archivo;

echo "<html>";
echo "<head>";
echo "<title>Resultados</title>";

global $clscr;
echo "</head>";
echo "<body>";


echo "<font face='Tahoma' size='2'>";
$leer_votacion = fopen($archivo, "r");
$tu_voto = fread($leer_votacion, filesize($archivo));
fclose($leer_votacion);
$votos = split('[|:]', $tu_voto);
echo "<u><b>Resultados</b></u><br>";

for ($i = 1; $i < count($votos); $i = $i + 2)
{
$total_votos += $votos[$i];
}

for ($i = 1; $i < count($votos); $i = $i + 2) {
$nombre = $i - 1;
if ($total_votos == 0) {
$porcnt = 0;
}
else {
$porcnt = $votos[$i] / $total_votos * 100;
$porcnt = round($porcnt, 1);
}

echo "<br>";
echo "\t$votos[$nombre] -> ";
echo "\t<b>$votos[$i]</b> votos <br>";


if ($porcnt == 0) {
echo "\t<img src=barra.jpg width=$porcnt height=15> <br><b>$porcnt%</b>";
}


else {
echo "\t<img src=barra.jpg width=$porcnt height=15> <br><b>$porcnt%</b> <br>";
}


echo "<br>";
}
echo "Total Votos: <b>$total_votos</b><br>";
if($clscr==1)
{
echo "<a href=javascript:window.close();>Cerrar</a>";
}
else
{
echo "<a href=javascript:history.back(-1);>Volver</a>";
}

if (isset($msgs)) {
echo "$msgs";
}
  echo "<br>";
echo "</body>";
echo "</html>";
}

if (!isset($voto)) {
mostrar("");
exit;
}

agregaVotacion($voto);
mostrar("");

}


?>




Pues resulta que se guarda la ip del votante en ip.txt pero aunque vuelva a votar y la ip sea existente en el ip.txt deja votar las veces que quiera aunque esté la misma ip en ip.txt varias veces...
He probado ya muchas cosas... de alterar los factores de orden... pero no encuentro resultado...

Citar
$log = fopen("ip.txt", "a");

$ip  = $_SERVER['REMOTE_ADDR'];

fwrite($log, "".$ip."\n");


if (eregi($ip,$log)) {

echo "No puedes volver a votar, ya has votado anteriormente\n";

}

else {

Con este trozo de código lo que pretendo es:

$log = fopen("ip.txt", "a");
se abre el ip.txt

$ip  = $_SERVER['REMOTE_ADDR'];
indicar que la variable ip almacena la dirección ip del votante

fwrite($log, "".$ip."\n");
se escribe la ip en ip.txt

if (eregi($ip,$log)) {
Aquí echo mano a la función eregi
http://es.php.net/eregi
/ Si la ip del votante está en ip.txt ...

echo "No puedes volver a votar, ya has votado anteriormente\n";
Aparece el mensaje de que no puede volver a votar...

else { ............. }
Y en el caso de que la ip del votante no esté en ip.txt deja votar...


Pero no me funciona.. si me podéis echar un cable.. seguro que tengo algo mal, pero la verdad es que he probado cambiando muchas cosas y siempre no me funciona...

O deja votar siempre sin salir el echo en ningú momento (el caso del código que os he copiado)
O siempre sale el echo dejando votar siempre
O siempre sale el echo sin dejar votar nunca
...


Venga, gracias de antemano ;)


En línea

Luisango


Desconectado Desconectado

Mensajes: 313



Ver Perfil WWW
Re: Único voto en una encuesta mediante IP [PHP]
« Respuesta #1 en: 4 Noviembre 2006, 13:12 pm »

lo que podrias hacer es que lo leyera, y que haga:
Código:
<?php
str_replace($REMOTE_ADDR,"");
?>
que lo vuelva a escribir en el txt (hay un modo de fwrite, que ahora no me acuerdo que te borraba todo el archivo y te lo volvia a escribir) y despues que ingrese el voto. No siempre hay que buscar soluciones fijas, algunas veces tienes que hacerlo de otra manera.

De todas formas si tienes una base de datos es muchisimo mas facil y simple. Si tienes una base de datos dimelo que te pongo el codigo vale? ;)

Espero que esto te sirva!


« Última modificación: 4 Noviembre 2006, 13:14 pm por dmawebmaster » En línea

Even better...
-sagitari-


Desconectado Desconectado

Mensajes: 1.643


:D


Ver Perfil WWW
Re: Único voto en una encuesta mediante IP [PHP]
« Respuesta #2 en: 4 Noviembre 2006, 13:17 pm »

@dmawebmaster
gracias por tu idea, pero es que me gustaría saber qué hago mal, porque tuve un problema parecido al intentar hacer otra cosa, y lo cambié y me quedé con la duda, y entonces, ahora, me gustaría resolver mi problema...

Ya sé que es más fácil con db, pero la gracia es aprender... y entonces quiero hacerlo así, guardándolo en txt para hacerlo un pelín más complejo.
En línea

camdark

Desconectado Desconectado

Mensajes: 63



Ver Perfil
Re: Único voto en una encuesta mediante IP [PHP]
« Respuesta #3 en: 4 Noviembre 2006, 16:15 pm »

<?php

$log = fopen("ip.txt", "a");
$cont = fread($log)
$ip  = $_SERVER['REMOTE_ADDR'];

fwrite($log, "".$ip."\n");


if (eregi($ip,$cont)) {aqui sigue contu codigo, lalala

prueba cambiando eso y me avisas
En línea

-sagitari-


Desconectado Desconectado

Mensajes: 1.643


:D


Ver Perfil WWW
Re: Único voto en una encuesta mediante IP [PHP]
« Respuesta #4 en: 4 Noviembre 2006, 16:51 pm »

<?php

$log = fopen("ip.txt", "a");
$cont = fread($log)
$ip  = $_SERVER['REMOTE_ADDR'];

fwrite($log, "".$ip."\n");


if (eregi($ip,$cont)) {aqui sigue contu codigo, lalala

prueba cambiando eso y me avisas

No, no funciona
am, y aquí te dejaste ;;
Código:
$cont = fread($log);

---

voy a index.php que es donde está el formulario de la encuesta, y entonces, realizo el voto y salen los resultados, pero también este error:

Citar
Warning: Wrong parameter count for fread() in /usr/export/www/hosting/user/encuesta/encuesta.php on line 5

y deja votar siempre... aunque la ip salga ya en ip.txt

En línea

alone-in-the-chat


Desconectado Desconectado

Mensajes: 587


Ver Perfil
Re: Único voto en una encuesta mediante IP [PHP]
« Respuesta #5 en: 4 Noviembre 2006, 17:42 pm »

puedes probar esto
----------------
$log = fopen("ip.txt", "r");
$ip  = $_SERVER['REMOTE_ADDR'];
 while (!feof($log)) {
        $tmp = fgets($log, 4096);
         if ($ip == trim($tmp))
  {
          $flag = "true";
  }else{
          $flag ="false";
  }
}
//aka coloca tu codigo de guardar en tu archivo la ip
y simplementa valida si $flag es verdadero kiere decir que ya voto si es falso no ah votado
« Última modificación: 4 Noviembre 2006, 17:56 pm por alone-in-the-chat » En línea

Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b
alone-in-the-chat


Desconectado Desconectado

Mensajes: 587


Ver Perfil
Re: Único voto en una encuesta mediante IP [PHP]
« Respuesta #6 en: 4 Noviembre 2006, 17:48 pm »

en realidad no entiendo bien tu logica primero abres el archivo en modo solo escritura ("a")
guardas la ip del visitante....
despues buscas que la ip no este en el archivo??????????????? O.O
si la acabas de guardar de hecho que va a estar y lo mas alucinante es que lo buscas con el eregi pasandole de parametro el gestor del archivo(que abriste en modo escritura osea que el apuntador esta al final del archivo O.O)????????????????????????

....
se ve que de vdd no le das musho al php
En línea

Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b
camdark

Desconectado Desconectado

Mensajes: 63



Ver Perfil
Re: Único voto en una encuesta mediante IP [PHP]
« Respuesta #7 en: 4 Noviembre 2006, 19:10 pm »

hopla

cambia el modo "a" por uno que te permita escribir y leer el archivo y se solucionará, pero usa mi codigo
chao
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cambiará la Ley Sinde tu voto el próximo 22 de mayo?
Noticias
wolfbcn 0 1,073 Último mensaje 11 Mayo 2011, 18:45 pm
por wolfbcn
AritmEtica20N: Matemáticas aplicadas al 'voto útil'
Noticias
wolfbcn 0 1,727 Último mensaje 10 Noviembre 2011, 01:59 am
por wolfbcn
¿Sería posible una encuesta de intención de voto?
Foro Libre
programatrix 0 1,291 Último mensaje 8 Diciembre 2015, 23:23 pm
por programatrix
¿Saber que voto has dejado en una encuesta?
Sugerencias y dudas sobre el Foro
z3nth10n 0 2,620 Último mensaje 20 Agosto 2016, 03:27 am
por z3nth10n
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines