защита от повтора записи - Visavi.net
https://visavi.net/
RSS - Visavi.nethttps://visavi.net/assets/img/images/logo_small.pngRSS - Visavi.net
https://visavi.net/
admin@visavi.net (admin)admin@visavi.net (admin)Sat, 29 Mar 2025 07:57:58 +0300<pre class="prettyprint">
/**
* Функция проверки спама
* by NEx
*
* @param
* $text string - какое-нибудь сообщение
* $time int - интервал времени, который надо проверять
* $number int - количество записей в интервал времени за который можно считать сообщение спамом
* $match int - сколько одинаковых сообщений можно ввести в интервал времени
*
* @return boolean
*/
function is_spam($text, $time = 60, $number = 3, $match = 1) {
$is_spam = false;
$ip = $_SERVER['REMOTE_ADDR'];// можно ip2long перевести
$hash = md5($text);
$time = time()-$time;
$SQL = "SELECT `hash` FROM `spam` WHERE `tc` > '".$time."' AND `ip` = '".$ip."' LIMIT ".$number;
$res = mysql_query($SQL);
if(mysql_num_rows($res)>=$number)
$is_spam = true;
else {
while($row = mysql_fetch_assoc($res)) {
$number--;
if($row['hash'] == $hash)
$match--;
if(!$number || !$match)
$is_spam = true;
}
}
$SQL = "INSERT INTO `spam` SET `tc` = '".time()."', `ip` = '".$ip."', `hash` = '".$hash."'";
mysql_query($SQL);
return $is_spam;
}
</pre>
<br>
Нужна табличка spam c полями tc, ip, hash<br>
Для производительности тип мемори, и 3 индекса на 3 поля<br>
<br>
Пользоваться можно так:<br>
$msg = $_POST['msg'];<br>
if(is_spam($msg, 30, 3, 1)){ //проверит не вводили ли в течении 30 секунд 3 сообщения или 1 такое же сообщение<br>
//это спам<br>
}<br>
else {<br>
//идем дальше<br>
}
https://visavi.net/topics/26059/440996
защита от повтора записи ДимонTue, 01 Nov 2011 23:23:11 +0400Сообщенияhttps://visavi.net/topics/26059/440996<blockquote class="blockquote"><strong>dima.london</strong> (1 Ноября 2011 / 21:02)<br>
12. <strong>Sneg</strong>, индийский код. С такие кодом только на H2M хоститься, где и остальные с подобным кодом. <br>
<br>
Всего-то 2 строки:<br>
1 : проверка последней записи того, кто в данный момент пишет<br>
2 : проверка, если записуемое сообщение не совпадает с последней записью.<br>
<br>
Все. На файлах немного сложнее (10 строк). Но не полотенце же......</blockquote>
<br>
Помнится ты хвалил код @lex я взял за основу его идею и сократил малех. =)<br>
<br>
Но этот код делает немного больше чем обычная проверка сообщения. Забиваешь в ядро и скоростные запросы блокируются на всем сайте в данном случае чаще 1 запроса в секунду делать нельзя. Если в секунду 2 любых запроса то выполняется условие ну я прописал простой редирект. Но можно и блокировать.
https://visavi.net/topics/26059/440961
защита от повтора записи ВладимирTue, 01 Nov 2011 21:20:42 +0400Сообщенияhttps://visavi.net/topics/26059/44096112. <strong>Sneg</strong>, индийский код. С такие кодом только на H2M хоститься, где и остальные с подобным кодом. <br>
<br>
Всего-то 2 строки:<br>
1 : проверка последней записи того, кто в данный момент пишет<br>
2 : проверка, если записуемое сообщение не совпадает с последней записью.<br>
<br>
Все. На файлах немного сложнее (10 строк). Но не полотенце же......
https://visavi.net/topics/26059/440954
защита от повтора записи ДмитрийTue, 01 Nov 2011 21:02:49 +0400Сообщенияhttps://visavi.net/topics/26059/440954Писал в личку напишу еще и здесь может кому пригодится.<br>
<br>
Либо после запроса юзай:<br>
<br>
<pre class="prettyprint">
header('Location: /ссылка');
</pre>
<br>
Тогда после запроса убиваются все данные так как редиректит мгновенно на другую страницу даже если на туже. Но если жать часто от повторов не спасти, поэтому второй вариант.<br>
<br>
<pre class="prettyprint">
<?
global $errors_list;
$errors_list=array(
'faster'=>'Ваш запрос был заблокирован в связи с ускоренной отправкой данных! Вернитесь назад и повторите попытку...'
);
function protect_fatal_error($type){
global $errors_list;
if($type==11){
$type='faster';
}
print $errors_list[$type];
header('Location: /ссылка');
}
function protect_error($type){
if($type){
$temp=mysql_query("SELECT * FROM `warnings_ip` WHERE `ip`='".ип пользователя."' LIMIT 1");
if(mysql_num_rows($temp)>0){
$temp=mysql_fetch_array($temp,true);
$id=$temp['id'];
$warnings=$temp['warnings'];
$last_warning=$temp['time'];
$warnings++;
$temp=TIME-$last_warning;
$temp=(int)($temp/60);
$warnings-=$temp;
if($warnings<1){
$warnings=1;
}
} else {
@mysql_query("INSERT INTO `warnings_ip` (`ip`,`warnings`,`time`) VALUES('".ип пользователя."',1,".TIME.")");
}
}
protect_fatal_error($type);
}
$temp=mysql_query("SELECT * FROM `warnings_ip` WHERE `ip`='".ип пользователя."' LIMIT 1");
if(mysql_num_rows($temp)>0){
$temp=mysql_fetch_array($temp,true);
$temp=$temp['last_post'];
if(TIME<$temp+1){
protect_error(11);
} else {
@mysql_query("UPDATE `warnings_ip` SET `last_post`=".TIME." WHERE `ip`='".ип пользователя."' LIMIT 1");
}
} else {
@mysql_query("INSERT INTO `warnings_ip` (`ip`,`last_post`) VALUES('".IP."',".TIME.")");
}
</pre>
<br>
Ну таблицы я думаю сообразите как сделать, но не люблю я этот вариант с скл запросами на мемкеше гораздо быстрее и проще, ну да ладно им пользуются единицы <img src="https://visavi.net/uploads/stickers/smile.gif" alt="smile">
https://visavi.net/topics/26059/440947
защита от повтора записи ВладимирTue, 01 Nov 2011 20:37:29 +0400Сообщенияhttps://visavi.net/topics/26059/440947<blockquote class="blockquote"><strong>farta007</strong> (31 Октября 2011 / 00:37)<br>
HELP!!!!</blockquote>
В бане. Это не аська.
https://visavi.net/topics/26059/440943
защита от повтора записи ДмитрийTue, 01 Nov 2011 20:31:48 +0400Сообщенияhttps://visavi.net/topics/26059/440943а сам написать по своему алгоритму?<br>
<pre class="prettyprint">
form.php
<?php
if(isset($_POST['number_field'])){
$msg = trim($_POST['number_field']);
$allow = true;
if( isset($_SESSION['prev_number']) ){
if( $_SESSION['prev_number'] == $msg ){
$allow = false;
}
}else{
$_SESSION['prev_number'] = $msg;
}
if($allow){
/*делаем запись в файл*/
$_SESSION['prev_number'] = $msg;
}else{
echo 'Повтор записи!';
}
}
?>
<form method="post" action="form.php">
<input type="text" name="number_field"/ value=""/>
<input type="submit" value="send"/>
</form>
</pre>
https://visavi.net/topics/26059/440930
защита от повтора записи НазарTue, 01 Nov 2011 19:50:19 +0400Сообщенияhttps://visavi.net/topics/26059/440930сессии юзай<br>
<br>
<em><span style="font-size:x-small">Добавлено через 02:10 сек.</span></em><br>
создаешь сессию при выводе формы.<br>
Если существуют пост данные,проверяем наличие сессии. Если сессия есть-записываем данные,уничтожаем сессию. Если сессии нет-выводим сообщение об ошибке.<br>
<br>
<em><span style="font-size:x-small">Добавлено через 04:39 сек.</span></em><br>
парни,автору надо код написать подробно,напишите по моему алгоритму хотя бы,иначе всем мозг вынесет.
https://visavi.net/topics/26059/440394
защита от повтора записи KOZZMon, 31 Oct 2011 02:47:56 +0400Сообщенияhttps://visavi.net/topics/26059/440394HELP!!!!
https://visavi.net/topics/26059/440386
защита от повтора записи farta007Mon, 31 Oct 2011 01:37:41 +0400Сообщенияhttps://visavi.net/topics/26059/440386никак не могу сообразить, где именно, и какой код =/<br>
это к форме относится или нет?
https://visavi.net/topics/26059/439551
защита от повтора записи farta007Fri, 28 Oct 2011 22:40:32 +0400Сообщенияhttps://visavi.net/topics/26059/439551После добавления записи добавь unset($_SESSION['код']);
https://visavi.net/topics/26059/439502
защита от повтора записи XoPyCFri, 28 Oct 2011 21:45:42 +0400Сообщенияhttps://visavi.net/topics/26059/439502можно с примером, я не особо силен
https://visavi.net/topics/26059/439500
защита от повтора записи farta007Fri, 28 Oct 2011 21:43:22 +0400Сообщенияhttps://visavi.net/topics/26059/439500используй unset() с уничтожением числа
https://visavi.net/topics/26059/439496
защита от повтора записи XoPyCFri, 28 Oct 2011 21:39:41 +0400Сообщенияhttps://visavi.net/topics/26059/439496НЕ помогло!!!((((<br>
<a href="http://upwap.ru/1799198" target="_blank" rel="nofollow">http://upwap.ru/1799198</a> вот посмотрите файл от if ($act=="vkredok"){<br>
/////////<br>
$cost=mon($_POST['cost']);<br>
$day="1";<br>
if ($cost>$max || $cost<$min)<br>
может подскажете, 2 дня парюсь и капчи ставил и сесссии и ничего(
https://visavi.net/topics/26059/439485
защита от повтора записи farta007Fri, 28 Oct 2011 21:25:39 +0400Сообщенияhttps://visavi.net/topics/26059/439485Изменить флаг открытия. На сколько я понимаю у тебя файл открывается в режиме a+ (дозапись в конец), а нужно w (открытие только для записи, очистка перед записью)
https://visavi.net/topics/26059/439463
защита от повтора записи ктулхуFri, 28 Oct 2011 20:51:40 +0400Сообщенияhttps://visavi.net/topics/26059/439463Такая проблема: юзер вводит в форму число, нажимает кнопку отправить, !ВОТ ПОШЛА ПРОБЛЕМА!, страница еще не загрузилась следующая(редирект), он еще раз и еще раз нажимает на кнопку, и у меня в .dat файле повторные записи...( <br>
<br>
Как можно ограничить повторные нажатия на кнопку? и повторные записи?
https://visavi.net/topics/26059/439453
защита от повтора записи farta007Fri, 28 Oct 2011 20:40:11 +0400Сообщенияhttps://visavi.net/topics/26059/439453