Забрана на дадено IP за 10 мин

pacul88

Registered
Здравейте нов съм в програмирането и искам да забраня на определено IP да покликува в следващите 10 мин. Кода е предназначен за онлайн поздрави. И немога да се сетя как става това. Не искам да използвам готови системи затова ви пиша.Благодаря ви предварително. Това ми е кода :

index.php
Код:
<?php
include ('function.php');
include 'sqldefence.php';
$query = "SELECT * FROM `pozdravi`";
$result = mysql_query($query);
echo '<a href="addpz.php">Пуснете поздрав</a>';
echo '<table align="center" border="1px">
<tr><th>От кого</th><th>За кого</th><th>Песен</th><th>Поздрав</th><th>IP адрес</th></tr>';
while ($r = mysql_fetch_assoc($result)) {
echo '<tr><td>' . $r['from'] . '</td><td>' . $r['send'] . '</td><td>'.$r['song'].'</td><td>'.$r['greeting'].'</td><td>'.$r['ip_client'].'</td></tr>';
}
echo '</table>';
?>

addpz.php
Код:
<?php
include ('function.php');
include 'sqldefence.php';
if ($_POST['button']) {
    $from = addslashes($_POST['from']);
    $send = addslashes($_POST['send']);
    $song = addslashes($_POST['song']);
    $greeting = addslashes($_POST['greeting']);
    $ip_client = $_SERVER["REMOTE_ADDR"];
    $query = mysql_query("INSERT INTO `pozdravi`(`id`, `from`, `send`, `song`, `greeting`, `ip_client`)
        VALUES ('NULL','$from','$send','$song','$greeting','$ip_client')");
    echo "Успешно добавен поздрав<br><a href=\"index.php\">Върни се в началната страница</a>";
}
?>
<title>Пуснете поздрав</title>
<form method="post">
    От кого:<input type="text" name="from" value=""/><br/>
    За кого:<input type="text" name="send" value=""/><br/>
    Песен:<input type="text" name="song" value=""/><br/>
    Поздрав:<input type="text" name="greeting" value=""/><br/>
    <input type="hidden" name="submit_pz" value="1"/>
    <input type="submit" name="button" value="Пусни поздрав"/>
</form>

function.php
Код:
<?php
include 'sqldefence.php';
$user = "user";
$pass = "pass";
$db = "pz_alex";
$host = "localhost";
$connection = mysql_connect($host, $user, $pass) or die("Сайтът не може да се свърже към базата данни1");
$db = mysql_select_db($db,$connection)or die("Сайтът не може да се свърже към базата данни2");
$chars="set character set utf8";
mysql_query($chars);
?>
 
Разгледай тука : http://www.web-tourist.net/login/login/newsearch.php?wtsearch=n&newsearch=%E1%E0%ED+%F1%E8%F1%F2%E5%EC%E0&x=0&y=0 - Виж кое ще ти свърши работа и го модифицирай малко за да пасне на твоите изисквания :)

п.с. препоръчвам : http://web-tourist.net/login/login/view.php?st=2765
 
Трябва да промениш малко таблицата за поздравите и да добавиш поле, в което записваш дата и час за всеки запис:

[sql]alter table pozdravi add pz_date TIMESTAMP DEFAULT CURENT_TIMESTAMP;[/sql]

По този начин, заявката за добавяне на нов поздрав няма да се промени, а датата и часа ще се добавят автоматично във вида: "2013-07-17 11:03:31"

Преди добавяне на нов поздрав, правиш проверка:

[sql]select * from pozdravi where ip_client = '$ip_address' AND pz_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)[/sql]

Ако тази заявка връща резултат, значи в последните 10 минути е имало поздрав от този IP адрес
 
exec каза:
Трябва да промениш малко таблицата за поздравите и да добавиш поле, в което записваш дата и час за всеки запис:

[sql]alter table pozdravi add pz_date TIMESTAMP DEFAULT CURENT_TIMESTAMP;[/sql]

По този начин, заявката за добавяне на нов поздрав няма да се промени, а датата и часа ще се добавят автоматично във вида: "2013-07-17 11:03:31"

Преди добавяне на нов поздрав, правиш проверка:

[sql]select * from pozdravi where ip_client = '$ip_address' AND pz_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)[/sql]

Ако тази заявка връща резултат, значи в последните 10 минути е имало поздрав от този IP адрес

Добавих всичко ама как да го дефинирам това втеме в addpz.php.

Опитах така виж ама не става изкарва ми го 000-00-00 00:00
Код:
<?php
include 'function.php';
include 'sqldefence.php';
$ip_client = $_SERVER["REMOTE_ADDR"];
if ($ip_client>0)
{
   $row= mysql_query ("SELECT * FROM `pozdravi` WHERE ip_client = '$ip_client' AND pz_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)");
   $rs=  mysql_fetch_assoc($row);
   if($rs>0){
       echo 'Iz4akaite 10 min i opitaite pak';
   }
}




if ($_POST['button']) {
    $from = addslashes($_POST['from']);
    $send = addslashes($_POST['send']);
    $song = addslashes($_POST['song']);
    $greeting = addslashes($_POST['greeting']);
    $pz_date= time('YYYY-MM-DD HH:MM:SS');
    $ip_client = $_SERVER["REMOTE_ADDR"];
    $query = mysql_query("INSERT INTO `pozdravi`(`id`, `from`, `send`, `song`, `greeting`, `pz_date`, `ip_client`) 
        VALUES ('NULL','$from','$send','$song','$greeting', '$pz_date', '$ip_client')");
    echo "Успешно добавен поздрав<br><a href="index.php">Върни се в началната страница</a>";
}
?>
<title>Пуснете поздрав</title>
<form method="post">
    От кого:<input type="text" name="from" value=""/><br/>
    За кого:<input type="text" name="send" value=""/><br/>
    Песен:<input type="text" name="song" value=""/><br/>
    Поздрав:<input type="text" name="greeting" value=""/><br/>
    <input type="hidden" name="submit_pz" value="1"/>
    <input type="submit" name="button" value="Пусни поздрав"/>
</form>

А SQL заявката я направих така:
Код:
ALTER TABLE `pozdravi` ADD `pz_date` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 
PHP:
$pz_date= time('YYYY-MM-DD HH:MM:SS');

Махни го това! РНР функцията time() не приема аргументи. Може би си искал да използваш date(), но и тя не ти е нужна. Въобще махни полето pz_date от заявката за добавяне на нов поздрав.

[sql]ALTER TABLE `pozdravi` ADD `pz_date` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP [/sql]

Това с червения цвят означава, че ако не зададеш стойност за това поле, MySQL автоматично ще му сложи стойност, равна на CURRENT_TIMESTAMP

Заявката за добавяне на нов поздрав трябва да бъде:

PHP:
$query = mysql_query("INSERT INTO `pozdravi`(`id`, `from`, `send`, `song`, `greeting`, `ip_client`) 
        VALUES ('NULL','$from','$send','$song','$greeting', '$ip_client')");


Опитах така виж ама не става изкарва ми го 000-00-00 00:00
Предполагам, че вече си добавял поздрав с този код: $pz_date= time('YYYY-MM-DD HH:MM:SS'); което вероятно е вмъкнало нулите, защото е неправилно. Виж си данните в таблицата и изтрий или поправи грешните записи.
 
Най-добре използвай функцията time която връща текущия unix timestamp.
При пускане на поздрав записваш текущото уникс време и проверяваш колко е предишното и го сравняваш като го изваждаш от текущото. Ако разликата е по-малка от 600 секунди да не го добавя и да връща грешка.. Този метод е най-бърз и ефективен.
 
Ще може ли да напишете цялия код за проверка дали дааден потребител е пуснал поздрав и ако е е пуснал да изпише текст,че е пуснал ,ако не е да му изалезе заявката за поздрави

[sql]
CREATE TABLE IF NOT EXISTS `pozdravi` (
`ot` varchar(255) NOT NULL DEFAULT '',
`id` int(11) NOT NULL AUTO_INCREMENT,
`za` varchar(255) NOT NULL,
`pesen` varchar(255) NOT NULL DEFAULT '',
`ip` varchar(255) NOT NULL DEFAULT '',
`data` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
[/sql]
 

Back
Горе