Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosze o pomoc
Forum PHP.pl > Forum > Gotowe rozwiązania
gregor
Witam bardzo serdecznie. mam wielką prośbę do ludzi, którzy o php mają większe pojęcie niż ja. ( umnie z php nie jest najlepiej)

mam skrypt:

Kod
if ($act!=add)

{

$plik=file("dat/xxx.dat","r");

$iloscliczb=count($plik);

for($i=0; $i<$iloscliczb; $i++)

{

$liczba[$i]=intval($plik[$i]);

$suma+=$liczba[$i];

}

$srednia=$suma/$iloscliczb;



echo(number_format($srednia, 1));

?>

<br>

<form name=ocena action=xxxocena.php method=post>

oceń:

<input type=hidden name=act value=add>

<select name=ocena size=1>

<option name=ocena value=6>6</option>

<option name=ocena value=5>5</option>

<option name=ocena value=4>4</option>

<option name=ocena value=3>3</option>

<option name=ocena value=2>2</option>

<option name=ocena value=1>1</option>

</select>

<INPUT TYPE=image VALUE=reset src="submit.jpg" border=0>

</form>

<?

}

else

{

$oceny=fopen("dat/xxx.dat","a");

fputs($oceny, "$ocenan");

fclose($oceny);

header("Location: xxx.php");

}

?>


To jest skrypt prostego głosowania. Bardzo mi zależy, aby do tego skryptu dołożyć blokadę ip. po jednokrotnym zagłosowaniu. (tzn. zapis ip do pliku, a potem odczyt i komunikat pod gust "już głosowałeś), etc.) wiem, że to może bezczelność z mojej strony, ale bardzo mi zależy, a pomimo moich szczerych chęci i wielu godzin prób, za groma mi nie wychodzi.
Ktoś się zlituje?
zulus
:arrow: po pierwsze używaj prawidłowo BBCode znacznik php.

:arrow: po drugie po co zapisywać ip. J
Jeżeli ktoś łączy się przez telofon, rozłączy się i połączy ponownie będzie miał inny adres ip i znów zagłosuje, lepszym rozwiązaniem jest cookies.

:arrow: do informacji już głosowałeś użyj JavyScriptu.
Nitro
Ciasteczka wcale nie są lepszym rozwiązaniem.
Natmiast co do pytania gregora, taka funkcja moze wygladać tak:
[php:1:abda0327b8]
function checkIP( $rem_addr )
{
$ip_lock_timeout = 30; // czas blokady ip w sekundach
$plik = 'lock_ip.txt'; // plik w którym będą przechowywane zablokowane ip

$ip_array = @file( $plik );
$reload_dat = fopen( $plik, "w" );
flock( $reload_dat, 2 );
$this_time = time( );

for ( $i=0, $max=sizeof( $ip_array ), $i<$max; $i++ ) {

list( $time_stamp, $ip_addr ) = explode( "|", trim( $ip_array[$i] ) );

if ( $this_time < ( $time_stamp+60*$ip_lock_timeout ) ) {
if ( $ip_addr == $rem_addr ) {
$found=1;
}
else {
fwrite( $reload_dat, "$time_stamp|$ip_addrn");
}
}
}

fwrite( $reload_dat, "$this_time|$rem_addrn" );
fclose ($reload_dat );
flock( $reload_dat, 3 );

return ( $found==1 ) ? 1 : 0;
}
[/php:1:abda0327b8]
A później:
[php:1:abda0327b8]
if ( checkIP( $_SERVER["REMOTE_ADDR"]) == 0 ) ) {
// akcja z głosowaniem
}
else {
echo( 'Już głosowałeś!' );
}
[/php:1:abda0327b8]
gregor
Dzięki serdeczne. Zulus, dzieki za rade, ale na stronę zaglądają głównie osoby ze stałym ip, zatem to rozwiązanie byłoby nieco mniej funkcjonalne. (ale bardzo dziękuje za radę).
Dziękuje Nitro za pomoc. Co prawda, chodziło mi o stałą blokadę (nie czasową), ale z tego już myślę ze wybrnę.

DZIĘKUJĘ ZA POMOC DLA LAIKA.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.