защита от повтора записи - Visavi.net https://visavi.net/ RSS - Visavi.net https://visavi.net/assets/img/images/logo_small.png RSS - 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 * * &#64;param * $text string - какое-нибудь сообщение * $time int - интервал времени, который надо проверять * $number int - количество записей в интервал времени за который можно считать сообщение спамом * $match int - сколько одинаковых сообщений можно ввести в интервал времени * * &#64;return boolean */ function is_spam($text, $time = 60, $number = 3, $match = 1) { $is_spam = false; $ip = $_SERVER&#91;&#039;REMOTE_ADDR&#039;];// можно ip2long перевести $hash = md5($text); $time = time()-$time; $SQL = &quot;SELECT `hash` FROM `spam` WHERE `tc` &gt; &#039;&quot;.$time.&quot;&#039; AND `ip` = &#039;&quot;.$ip.&quot;&#039; LIMIT &quot;.$number; $res = mysql_query($SQL); if(mysql_num_rows($res)&gt;=$number) $is_spam = true; else { while($row = mysql_fetch_assoc($res)) { $number--; if($row&#91;&#039;hash&#039;] == $hash) $match--; if(!$number || !$match) $is_spam = true; } } $SQL = &quot;INSERT INTO `spam` SET `tc` = &#039;&quot;.time().&quot;&#039;, `ip` = &#039;&quot;.$ip.&quot;&#039;, `hash` = &#039;&quot;.$hash.&quot;&#039;&quot;; mysql_query($SQL); return $is_spam; } </pre> <br> Нужна табличка spam c полями tc, ip, hash<br> Для производительности тип мемори, и 3 индекса на 3 поля<br> <br> Пользоваться можно так:<br> $msg = $_POST[&#039;msg&#039;];<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/440961 12. <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(&#039;Location&#58; /ссылка&#039;); </pre> <br> Тогда после запроса убиваются все данные так как редиректит мгновенно на другую страницу даже если на туже. Но если жать часто от повторов не спасти, поэтому второй вариант.<br> <br> <pre class="prettyprint"> &lt;? global $errors_list; $errors_list=array( &#039;faster&#039;=&gt;&#039;Ваш запрос был заблокирован в связи с ускоренной отправкой данных! Вернитесь назад и повторите попытку...&#039; ); function protect_fatal_error($type){ global $errors_list; if($type==11){ $type=&#039;faster&#039;; } print $errors_list&#91;$type]; header(&#039;Location&#58; /ссылка&#039;); } function protect_error($type){ if($type){ $temp=mysql_query(&quot;SELECT * FROM `warnings_ip` WHERE `ip`=&#039;&quot;.ип пользователя.&quot;&#039; LIMIT 1&quot;); if(mysql_num_rows($temp)&gt;0){ $temp=mysql_fetch_array($temp,true); $id=$temp&#91;&#039;id&#039;]; $warnings=$temp&#91;&#039;warnings&#039;]; $last_warning=$temp&#91;&#039;time&#039;]; $warnings++; $temp=TIME-$last_warning; $temp=(int)($temp/60); $warnings-=$temp; if($warnings&lt;1){ $warnings=1; } } else { &#64;mysql_query(&quot;INSERT INTO `warnings_ip` (`ip`,`warnings`,`time`) VALUES(&#039;&quot;.ип пользователя.&quot;&#039;,1,&quot;.TIME.&quot;)&quot;); } } protect_fatal_error($type); } $temp=mysql_query(&quot;SELECT * FROM `warnings_ip` WHERE `ip`=&#039;&quot;.ип пользователя.&quot;&#039; LIMIT 1&quot;); if(mysql_num_rows($temp)&gt;0){ $temp=mysql_fetch_array($temp,true); $temp=$temp&#91;&#039;last_post&#039;]; if(TIME&lt;$temp+1){ protect_error(11); } else { &#64;mysql_query(&quot;UPDATE `warnings_ip` SET `last_post`=&quot;.TIME.&quot; WHERE `ip`=&#039;&quot;.ип пользователя.&quot;&#039; LIMIT 1&quot;); } } else { &#64;mysql_query(&quot;INSERT INTO `warnings_ip` (`ip`,`last_post`) VALUES(&#039;&quot;.IP.&quot;&#039;,&quot;.TIME.&quot;)&quot;); } </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 &lt;?php if(isset($_POST&#91;&#039;number_field&#039;])){ $msg = trim($_POST&#91;&#039;number_field&#039;]); $allow = true; if( isset($_SESSION&#91;&#039;prev_number&#039;]) ){ if( $_SESSION&#91;&#039;prev_number&#039;] == $msg ){ $allow = false; } }else{ $_SESSION&#91;&#039;prev_number&#039;] = $msg; } if($allow){ /*делаем запись в файл*/ $_SESSION&#91;&#039;prev_number&#039;] = $msg; }else{ echo &#039;Повтор записи!&#039;; } } ?&gt; &lt;form method=&quot;post&quot; action=&quot;form.php&quot;&gt; &lt;input type=&quot;text&quot; name=&quot;number_field&quot;/ value=&quot;&quot;/&gt; &lt;input type=&quot;submit&quot; value=&quot;send&quot;/&gt; &lt;/form&gt; </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 защита от повтора записи KOZZ Mon, 31 Oct 2011 02:47:56 +0400 Сообщения https://visavi.net/topics/26059/440394 HELP!!!! https://visavi.net/topics/26059/440386 защита от повтора записи farta007 Mon, 31 Oct 2011 01:37:41 +0400 Сообщения https://visavi.net/topics/26059/440386 никак не могу сообразить, где именно, и какой код =/<br> это к форме относится или нет? https://visavi.net/topics/26059/439551 защита от повтора записи farta007 Fri, 28 Oct 2011 22:40:32 +0400 Сообщения https://visavi.net/topics/26059/439551 После добавления записи добавь unset($_SESSION[&#039;код&#039;]); https://visavi.net/topics/26059/439502 защита от повтора записи XoPyC Fri, 28 Oct 2011 21:45:42 +0400 Сообщения https://visavi.net/topics/26059/439502 можно с примером, я не особо силен https://visavi.net/topics/26059/439500 защита от повтора записи farta007 Fri, 28 Oct 2011 21:43:22 +0400 Сообщения https://visavi.net/topics/26059/439500 используй unset() с уничтожением числа https://visavi.net/topics/26059/439496 защита от повтора записи XoPyC Fri, 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==&quot;vkredok&quot;){<br> /////////<br> $cost=mon($_POST[&#039;cost&#039;]);<br> $day=&quot;1&quot;;<br> if ($cost&gt;$max || $cost&lt;$min)<br> может подскажете, 2 дня парюсь и капчи ставил и сесссии и ничего( https://visavi.net/topics/26059/439485 защита от повтора записи farta007 Fri, 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 защита от повтора записи farta007 Fri, 28 Oct 2011 20:40:11 +0400 Сообщения https://visavi.net/topics/26059/439453