elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
22 Agosto 2008, 02:46  



+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderadores: Ertai, Ing_Amc)
| | | |-+  Único voto en una encuesta mediante IP [PHP]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Único voto en una encuesta mediante IP [PHP]  (Leído 295 veces)
741852

Desconectado Desconectado

Mensajes: 1.587


visca la pepaaaaa!


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

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

EASY-ADS:

- 0.005$ click
- 0.005$ click referido
- payout: 0.50$ !
- 10-16 ads diarios
- pago en 1 día
- pago mediante paypal

Regístrate aquí:
http://www.easy-ads.info/register.php?r=sagitari
Porfa, no me elimines como referida
Aquí la prueba de que sí que pagan:
http://img295.imageshack.us/img295/8939/easy1pc4.png
The Sixth Halcon

Desconectado Desconectado

Mensajes: 310


A.K.A Degmaster www.Forok610i.com


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

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: 04 Noviembre 2006, 13:14 por dmawebmaster » En línea

System.out.println("Programa en java, nunca lo sabes si es mejor hasta que lo pruebas");

741852

Desconectado Desconectado

Mensajes: 1.587


visca la pepaaaaa!


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

@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

EASY-ADS:

- 0.005$ click
- 0.005$ click referido
- payout: 0.50$ !
- 10-16 ads diarios
- pago en 1 día
- pago mediante paypal

Regístrate aquí:
http://www.easy-ads.info/register.php?r=sagitari
Porfa, no me elimines como referida
Aquí la prueba de que sí que pagan:
http://img295.imageshack.us/img295/8939/easy1pc4.png
camdark

Desconectado Desconectado

Mensajes: 63


¡Amo YaBB SE!


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

<?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
741852

Desconectado Desconectado

Mensajes: 1.587


visca la pepaaaaa!


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

<?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

EASY-ADS:

- 0.005$ click
- 0.005$ click referido
- payout: 0.50$ !
- 10-16 ads diarios
- pago en 1 día
- pago mediante paypal

Regístrate aquí:
http://www.easy-ads.info/register.php?r=sagitari
Porfa, no me elimines como referida
Aquí la prueba de que sí que pagan:
http://img295.imageshack.us/img295/8939/easy1pc4.png
alone-in-the-chat

Desconectado Desconectado

Mensajes: 519


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

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: 04 Noviembre 2006, 17:56 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: 519


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

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


¡Amo YaBB SE!


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

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 Imprimir 
Ir a:  





Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC