Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Голосование на txt базе, запись IP.
 
 автор: ZetRider   (09.03.2006 в 13:24)   письмо автору
 
 

Привет, вот есть скрипт простенького голосования:

index.php

<FORM METHOD="POST" action="add.php">
<center><TABLE BORDER=0 width="119"><TR><TD><TABLE BORDER=0 width="120">
<TR><TD><b><font face="Courier New" size="2">Любимый язык?:</font></b></TD></TR>

<TR><TD><font face="Courier New">
    <INPUT TYPE=radio NAME=answer VALUE=1 style="font-weight: 700"></font><b><font size="2" face="Courier New">PHP</font></b></TD></TR>
<TR><TD><font face="Courier New">
    <INPUT TYPE=radio NAME=answer VALUE=2 style="font-weight: 700"></font><b><font size="2" face="Courier New">Delphi</font></b></TD></TR>
<TR><TD><font face="Courier New">
    <INPUT TYPE=radio NAME=answer VALUE=3 style="font-weight: 700"></font><b><font size="2" face="Courier New">C++</font></b></TD></TR>
<TR><TD><font face="Courier New">
    <INPUT TYPE=radio NAME=answer VALUE=4 style="font-weight: 700"></font><b><font size="2" face="Courier New">Assembler</font></b></TD></TR>

<TR><TD>
<center><INPUT TYPE=Submit NAME=vote VALUE=" Отправить "><br>
<INPUT TYPE=Submit NAME=result VALUE=" Результат "></center>
</TD></TR>
</TABLE></center></TD></TR></TABLE></FORM>


add.php

<?php
$file 
"vote.txt";
$a file($file);
$i 1$fi Count($a);
$n 0;
while (
$i <= $fi):
$a[$i] = trim(str_replace ("\n",""$a[$i]));
$n $n+$a[$i];
$i++;
endwhile;

if (
$answer != "") { 
echo 
"<br>Результат:"
$a[$answer]++; $n++; 

$rez "Результаты голосования!\n".$a[1].
"\n".$a[2]."\n".$a[3]."\n".$a[4];
$fp = @fopen($file,"w"); 
if (
$fp) { $counter=fputs($fp,$rez); fclose($fp); } 
else { echo 
"Произошла ошибка записи результатов!"; }

} else { echo 
"<br>Результаты голосования"; }
echo 
"<br>PHP - <b>".$a[1]."</b>";
echo 
"<br>Delphi - <b>".$a[2]."</b>";
echo 
"<br>C++ - <b>".$a[3]."</b>";
echo 
"<br>Assembler - <b>".$a[4]."</b>";
echo 
"<br><br>Всего проголосовало: ".$n;
?>
<hr>


И вот решил сделать чтобы он банил ip адрес если человек уже проголосовал, тоесть чтобы он мог голосовать только 1 раз! Идея такая, Если ip адрес совпадает с тем который записан в файле с ip адресами которые уже проголосовали то он выводил только результат... А саму форму голосования уже невыводил..
И еще можно обнадежить защиту так, что при голосование у чела который голосовал устанавливалась кука :)
Помогите пожалуйста дописать код который бы записывал ip адрес в файл и если он совпадал то выводил тока результат...
В принципе вот код который все сверяет)


<? 
$ips
=file("ban.txt"); 
if(empty(
$_SERVER['REMOTE_ADDR'])) 
die(
"<b>Ваш IP адрес не определён!</b>"); 
foreach (
$ips as $ip

if(
$_SERVER['REMOTE_ADDR']==trim($ip)) 
die(

<center><h3><b>Ты забанен тебе сюда нельзя!</b></h3></center> 
'
); 

?>


Зарание SeHKc! :)

   
 
 автор: Loki   (09.03.2006 в 13:54)   письмо автору
 
   для: ZetRider   (09.03.2006 в 13:24)
 

лучше поспользоваться не циклом, а функцией in_array()

   
 
 автор: Sergey89   (09.03.2006 в 13:59)   письмо автору
 
   для: Loki   (09.03.2006 в 13:54)
 

in_array не кактит в даннос случае, т.к. у ИП-адреса допишется ещё один символ: перенос строки.

   
 
 автор: cheops   (09.03.2006 в 13:59)   письмо автору
 
   для: ZetRider   (09.03.2006 в 13:24)
 

IP-адрес посетителя хранится в элементе суперглобального массива $_SERVER['REMOTE_ADDR'], вам остаётся их только сохранять в отдельный файл
<?php
  $fd 
fopen("ban.txt","a");
  
fwrite($fd$_SERVER['REMOTE_ADDR']."\n");
  
fclose($fd);
?>

А затем проверять нет ли в файле ip.txt текущего IP-адреса при помощи кода
<?php
  
// Читаем содержимое файла в массив $arr -
  // каждая строка соответствует массиву
  
$arr file("ban.txt");
  
// Проверяем не входит ли текцщий IP-адрес в массив $arr
  
if(in_array($_SERVER['REMOTE_ADDR'], $arr))
  {
     echo 
"Извините, голосовать можно только один раз";
  }
?>

Собственно вы практически весь код и написали...

   
 
 автор: ZetRider   (09.03.2006 в 14:29)   письмо автору
 
   для: cheops   (09.03.2006 в 13:59)
 

Ну вот в том та и дело) что коды есть, а вот совместить его с голосование у меня невыходит =(((

   
 
 автор: Loki   (09.03.2006 в 14:56)   письмо автору
 
   для: ZetRider   (09.03.2006 в 14:29)
 

А файл с ip адресами вы часом не в блокноте правите?

   
 
 автор: ZetRider   (09.03.2006 в 15:00)   письмо автору
 
   для: Loki   (09.03.2006 в 14:56)
 

нет, средствами PHP.. Ну бывает и блокнотом, а какая разница... в курсе что бывает заместо ентера он пишет квадратик)

   
 
 автор: Loki   (09.03.2006 в 15:37)   письмо автору
 
   для: ZetRider   (09.03.2006 в 15:00)
 

просто если файл создается скриптом (или в UNIX), то trim не понадобится.

   
 
 автор: ZetRider   (09.03.2006 в 22:00)   письмо автору
 
   для: Loki   (09.03.2006 в 15:37)
 

а вот как их совместить та ети скрипты? =(

   
 
 автор: ZetRider   (10.03.2006 в 14:21)   письмо автору
 
   для: ZetRider   (09.03.2006 в 22:00)
 

Так, все сделал! все работает!))) НО! Если человек проголосовал то он пишет не втом месте на сайте гже голосование что он уже проголосовал, а закрывает всю страницу! и пишет что он уже голосовал, вот коды:

index.php

<?
$file 
"log/vote_ban.txt";
$a file($file);
$i 1$fi Count($a);
$n 0;
while (
$i <= $fi):
$a[$i] = trim(str_replace ("\n",""$a[$i]));
$n $n+$a[$i];
$i++;
endwhile;

$a[$answer]++; $n++; 

$rez "Результаты голосования!\n".$a[1].
"\n".$a[2]."\n".$a[3]."\n".$a[4];

$ips=file("ban.txt");

if(empty(
$_SERVER['REMOTE_ADDR'])) 
die(
"<b>Ваш IP адрес не определён!</b>"); 

foreach (
$ips as $ip)
{
if(
$_SERVER['REMOTE_ADDR']==trim($ip)) 
die(
"Вы голосовали!<br>Результат:
<br>PHP - <b>
$a[1]</b>
<br>Delphi - <b>
$a[2]</b>
<br>C++ - <b>
$a[3]</b>
<br>Assembler - <b>
$a[4]</b>
<br>Всего проголосовало: 
$n
"
);
}
?>



<FORM METHOD="POST" action="add_vote.php">
<center><TABLE BORDER=0 width="119"><TR><TD><TABLE BORDER=0 width="120">
<TR><TD><b><font face="Courier New" size="2">Любимый язык?:</font></b></TD></TR>

<TR><TD><font face="Courier New">
    <INPUT TYPE=radio NAME=answer VALUE=1 style="font-weight: 700"></font><b><font size="2" face="Courier New">PHP</font></b></TD></TR>
<TR><TD><font face="Courier New">
    <INPUT TYPE=radio NAME=answer VALUE=2 style="font-weight: 700"></font><b><font size="2" face="Courier New">Delphi</font></b></TD></TR>
<TR><TD><font face="Courier New">
    <INPUT TYPE=radio NAME=answer VALUE=3 style="font-weight: 700"></font><b><font size="2" face="Courier New">C++</font></b></TD></TR>
<TR><TD><font face="Courier New">
    <INPUT TYPE=radio NAME=answer VALUE=4 style="font-weight: 700"></font><b><font size="2" face="Courier New">Assembler</font></b></TD></TR>

<TR><TD>
<center><INPUT TYPE=Submit NAME=vote VALUE=" Отправить "><br>
</center>
</TD></TR>
</TABLE></center></TD></TR></TABLE></FORM>


add_vote.php

<?php

$file 
"log/vote.txt";
$a file($file);
$i 1$fi Count($a);
$n 0;
while (
$i <= $fi):
$a[$i] = trim(str_replace ("\n",""$a[$i]));
$n $n+$a[$i];
$i++;
endwhile;

if (
$answer != "") { 
echo 
"<br>Результат:"
$a[$answer]++; $n++; 

$rez "Результаты голосования!\n".$a[1].
"\n".$a[2]."\n".$a[3]."\n".$a[4];
$fp = @fopen($file,"w"); 
if (
$fp) { $counter=fputs($fp,$rez); fclose($fp); } 
else { echo 
"Произошла ошибка записи результатов!"; }

  
$fd fopen("ban.txt","a"); 
  
fwrite($fd$_SERVER['REMOTE_ADDR']."\r\n"); 
  
fclose($fd); 

} else { echo 
"<br>Результаты голосования"; }
echo 
"<br>PHP - <b>".$a[1]."</b>";
echo 
"<br>Delphi - <b>".$a[2]."</b>";
echo 
"<br>C++ - <b>".$a[3]."</b>";
echo 
"<br>Assembler - <b>".$a[4]."</b>";
echo 
"<br><br>Всего проголосовало: ".$n;

?>
<hr>


Проблема заключена в том, что он закрывает надписью все страницу, а как сделать чтобы он писал тока в том месте где скрипт голосования! Фреймы непредлогать)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования