БАН система с MySQL
Ето една бан система, ползваща MySQL Veryhappy
SQL:
CREATE TABLE `bans` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(50) NOT NULL,
`reason` text NOT NULL,
`slojen` varchar(50) NOT NULL,
`izticha` varchar(50) NOT NULL,
`vid` varchar(2) NOT NULL,
`url` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;style.css
a:link {
color: #5FCDEC;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #5FCDEC;
}
a:hover {
text-decoration: underline;
color: #5FCDEC;
}
a:active {
text-decoration: none;
color: #5FCDEC;
}
.row1 {
background-image:url(background.png);
background-repeat:repeat-x;
height:20px;
color:#4A4A4A;
font-weight: bold;
font-family: Tahoma;
font-size: 12px;
}
.row2 {
color:#4A4A4A;
font-family: Tahoma;
font-size: 11px;
}
.row3 {
color:#5FCDEC;
font-family: Tahoma;
font-size: 11px;
}
.button {
background-image:url(button.png);
background-repeat:no-repeat;
background-position:left;
color:#5FCDEC;
font-weight: bold;
font-family: Tahoma;
font-size: 12px;
padding-left:50px;
height:26px;
}
.button_hover {
background-image:url(button_onmouseover.png);
background-repeat:no-repeat;
background-position:left;
color:#5FCDEC;
font-weight: bold;
font-family: Tahoma;
font-size: 12px;
padding-left:50px;
height:26px;
}
.top_row {
background-image:url(background.png);
background-repeat:repeat-x;
height:28px;
color:#5FCDEC;
font-weight: bold;
font-family: Tahoma;
font-size: 13px;
}
img {
border:0px;
}
.add_ban_table {
color:#4A4A4A;
font-weight: bold;
font-family: Tahoma;
font-size: 12px;
}
.add_ban_row_left {
background-color:#F0F0F0;
border-left:1px solid black;
}
.add_ban_row_bottom {
background-color:#F0F0F0;
border-left:1px solid black;
border-right:1px solid black;
border-bottom:1px solid black;
}
.add_ban_row_left_bottom {
border-top:1px solid black;
}
.add_ban_row_right {
background-color:#F0F0F0;
border-right:1px solid black;
}
.add_ban_row_2 {
background-color:#C3C3C3;
border:1px solid black;
}
.add_ban_row_bottom_2 {
background-color:#F0F0F0;
border-left:1px solid black;
border-bottom:1px solid black;
border-right:1px solid black;
}theban.php
<?php
include "config.php";
$ip = $_SERVER['REMOTE_ADDR']; /// Взимаме IP
$time = time(); /// timestamp
$zaiavka = "select * from bans where ip = '$ip' AND izticha > '$time'"; /// Заявка. Търсим дали в ДБ-то има поле с IP, същото като на потребителя ($ip)
$rez = @mysql_query($zaiavka, $conn) or die(include "mysql_error.php");
$num = mysql_num_rows( $rez );
if ($rez >= "1"){ /// Ако има бан(ове)
while ( $red = mysql_fetch_array( $rez )){
if ($red[vid] == "1"){ /// Ако е стандартен бан
if ($red[izticha] != null){ /// Ако все някога ще изтече бана
$red[izticha] = gmdate("M d Y в H:i часа", $red[izticha]); /// Изчисляваме кога ще изтече бана
echo "<b><center>Вие имате БАН, който ще изтече на ".$red[izticha].".</b><br /><u>Причина:</u> ".$red[reason]."</center>"; /// Съобщението което се изписва ако има бан
exit; /// Спираме кода
} else {
echo "<b><center>Вие имате БАН за винаги от този сайт.</b><br /><u>Причина:</u> ".$red[reason]."</center>"; /// Съобщението което се изписва ако има бан
exit;
}
} elseif ($red[vid] == "2") { /// Ако е бан само от дадена страница
$full_url[1] = "http://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI']; /// Взимаме пълния адрес на страницата без www
$full_url[2] = "http://www.".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI']; /// Взимаме пълния адрес на страницата с www
if (($full_url[1] == $red[url]) or ($full_url[2] == $red[url])){ /// Ако страницата записана в ДБ-то и сегашната страница съвпадат - показва че има бан
if ($red[izticha] != null){ /// Ако все някога ще изтече бана
$red[izticha] = gmdate("M d Y в H:i часа", $red[izticha]); /// Изчисляваме кога ще изтече бана
echo "<b><center>Вие имате БАН, който ще изтече на ".$red[izticha].".</b><br /><u>Причина:</u> ".$red[reason]."</center>"; /// Съобщението което се изписва ако има бан
exit;
} else {
echo "<b><center>Вие имате БАН за винаги от този сайт.</b><br /><u>Причина:</u> ".$red[reason]."</center>"; /// Съобщението което се изписва ако има бан
exit;
}
} else {
}
}
}
}
?>ban.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Ban script by S_Soul</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="overlib.js"></script>
<script language="JavaScript" type="text/javascript">
function popUp(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,status=0,menubar=0,width=525,height=300,left=262,top=234');");
}
</script>
</head>
<body>
<?php
$my_ip = $_SERVER['REMOTE_ADDR'];
if ($my_ip != "82.199.213.3"){ /// Тук си напишете вашето IP, за да имате само вие достъп до бан системата ;)
echo "<b><u>Грешка!</u></b> <br /><b>Съжеляваме, но нямате право да разглеждате тази страница !</b>";
exit; /// Ако IP-тата не съвпадат, скрипта се прекратява !
}
/// Правим връзка с базата данни
include "config.php";
$id = $_GET['id']; /// Вземаме ?id
if ($id == "add"){ /// Ако id = add, т.е. ако ще добавяме бан
/// Взимаме всичко необходимо от form-a START
$ip = htmlspecialchars($_POST['ip'], ENT_QUOTES);
$vid = htmlspecialchars($_POST['vid'], ENT_QUOTES);
$vreme = htmlspecialchars($_POST['vreme'], ENT_QUOTES);
$vreme_2 = htmlspecialchars($_POST['vreme2'], ENT_QUOTES);
$reason = htmlspecialchars($_POST['reason'], ENT_QUOTES);
$page = htmlspecialchars($_POST['page'], ENT_QUOTES);
/// Взимаме всичко необходимо от form-a END
/// form-aта START
echo '<form method="post" action="ban.php?id=add">
<table width="500px" border="0" cellspacing="0" cellpadding="1" class="add_ban_table" align="center">
<tr>
<td class="row1" style="border-left:1px solid black;"> </td>
<td align="left" class="row1" style="border-right:1px solid black;"> </td>
</tr>
<tr>
<td width="150" align="left" class="add_ban_row_left">IP:</td>
<td width="350" align="left" class="add_ban_row_right"><input name="ip" type="text" size="50" maxlength="50" class="add_ban_row_2"></td>
</tr>
<tr>
<td align="left" class="add_ban_row_left">Вид на бана: </td>
<td align="left" class="add_ban_row_right">
<select name="vid" class="add_ban_row_2">
<option value="1">Бан</option>
<option value="2">Бан от дадена страница</option>
</select>
</td>
</tr>
<tr>
<td align="left" class="add_ban_row_left">Адрес: </td>
<td align="left" class="add_ban_row_right"><input type="text" name="page" size="50"class="add_ban_row_2"></td>
</tr>
<tr>
<td align="left" class="add_ban_row_left">Продължителност:</td>
<td align="left" class="add_ban_row_right">
<select name="vreme" class="add_ban_row_2">';
for ($i=1;$i<=24;$i++){ /// Тъй като не ни се пише от 1 до 24 използваме for loop
echo "<option value=\"".$i."\">".$i."</option>";
}
echo '</select> <select name="vreme2" class="add_ban_row_2">
<option value="1">Часа</option>
<option value="2">Дни</option>
<option value="3">Седмици</option>
<option value="4">За винаги</option>
</select></td>
</tr>
<tr>
<td align="left" valign="top" class="add_ban_row_left">Причина:</td>
<td align="left" class="add_ban_row_right">
<textarea name="reason" cols="30" rows="3" class="add_ban_row_2"></textarea></td>
</tr>
<tr>
<td class="add_ban_row_bottom"> </td>
<td align="left" class="add_ban_row_left_bottom"><input type="reset" name="Reset" value="Изчисти" class="add_ban_row_2"> <input type="submit" name="Submit2" value="Сложи бан" class="add_ban_row_2"></td>
</tr>
</table></form>';
/// form-aта END
if (($ip != null) && ($vid != null) && ($vreme != null) && ($vreme2 != null) && ($reason != null)){ ///Ако няма празни полета продължаваме надолу
$time = time(); /// timestamp
if ($vreme2 == "1"){ /// Ако сме избрали да сложим бан за ЧАС
$izticha = $time + ($vreme*3600); /// изчисляваме до кога ще е валиден бан-а
$ed = "часа";
} elseif ($vreme2 == "2"){ /// Ако сме избрали да сложим бан за ДЕН
$izticha = $time + ($vreme*86400); /// изчисляваме до кога ще е валиден бан-а
$ed = "дни";
} elseif ($vreme2 == "3"){ /// Ако сме избрали да сложим бан за СЕДМИЦА
$izticha = $time + ($vreme*604800); /// изчисляваме до кога ще е валиден бан-а
$ed = "седмици";
} elseif ($vreme2 == "4"){ /// Ако сме избрали да сложим бан за ВИНАГИ
$ed = "винаги";
$vreme = null;
}
if (($vid == 2) && ($page != null)){ /// Ако сме избрали да баннем потребител само от дадена страница
$page = $page;
} else {
$page = null;
}
$zaiavka = "insert into bans (ip, reason, slojen, izticha, vid, url) values ('$ip', '$reason', '$time', '$izticha', '$vid', '$page')"; /// Заявка към MySQL
$rez = @mysql_query($zaiavka, $conn) or die("MySQL error."); /// Слагаме бана... колко сме гадни само :D
if($rez){ /// Ако всичко е протекло без грешка продължаваме надолу
echo '<br /> <table width="500px" border="0" cellspacing="0" cellpadding="1" class="add_ban_table" align="center">
<tr>
<td class="row1" style="border-left:1px solid black;"> </td>
<td align="left" class="row1" style="border-right:1px solid black;"> </td>
</tr>
<tr>
<td align="left" class="add_ban_row_bottom_2" colspan="2">
Сложихте бан на IP: <b>'.$ip.'</b> за <b>'.$vreme.' '.$ed.'</b>
<td></tr></table>';
}
}
exit;
}
if ($type == "del"){ /// Ако искаме да изтрием потребител
$zaiavka = "delete from bans where id='$id'"; /// заявката за триене
$rez = @mysql_query($zaiavka, $conn) or die("MySQL error."); /// трием бан-а :)
}
?>
<table width="800" border="0" align="left" cellpadding="0" cellspacing="0">
<tr><td class="button" onMouseOver="this.className='button_hover';return true" onMouseOut="this.className='button';return true" colspan="2" onclick="javascript:popUp('ban.php?id=add')">
Добави БАН
</td><td colspan="4"></td></tr>
<?php
/// От тук надолу се изреждат вече сложените банове
echo "<tr>
<td width=\"100px\" class=\"top_row\" style=\"border-right:1px solid #505050;\"> IP</td>
<td width=\"30px\" class=\"top_row\" style=\"border-right:1px solid #505050;\" align=\"center\">Вид</td>
<td width=\"100px\" class=\"top_row\" style=\"border-right:1px solid #505050;\" align=\"center\">Сложен на</td>
<td width=\"100px\" class=\"top_row\" style=\"border-right:1px solid #505050;\" align=\"center\">Изтича на</td>
<td width=\"384px\" class=\"top_row\" style=\"border-right:1px solid #505050;\"> Причина</td>
<td width=\"86px\" class=\"top_row\" align=\"center\">Опции</td>
</tr>";
$zaiavka = "select * from bans order by id"; /// заявка
$rez = @mysql_query($zaiavka, $conn) or die("MySQL Error.");
while ( $red = mysql_fetch_array( $rez )){
if ($red[izticha] != null){ /// ако бана е сложен да изтече някога
$red[slojen] = gmdate("M d Y H:i", $red[slojen]); /// изчисляваме датата когато е сложен
if(time() > $red[izticha]){ /// ако датата е минала
$red[izticha] = gmdate("M d Y H:i", $red[izticha]); /// изчисляваме датата когато ще изтече
$red[izticha] = "<span style=color:#FFFFFF>".$red[izticha]."</span>"; /// ораждаме датата с бял цвят, за да се отличава ;)
$status = "<span style=color:#FFFFFF><b>Изтекъл</b></span>"; /// статус: изтекъл (пак в бял цвят)
} else {
$red[izticha] = gmdate("M d Y H:i", $red[izticha]); /// изчисляваме датата когато ще изтече
$status = "Не е изтекъл"; /// статус: не е изтекъл
}
} else {
$red[slojen] = gmdate("M d Y H:i", $red[slojen]); /// изчисляваме датата когато е сложен
$red[izticha] = "Никога"; /// кога изтича !? - НИКОГА !
$status = "Не е изтекъл"; /// статус: не е изтекъл
}
/// изреждат се отделните редове на таблицата. На всеки ред има отделен бан заедно със статистика.
echo "<tr class=\"row2\" onMouseOver=\"this.className='row3';return true\" onMouseOut=\"this.className='row2';return true\">
<td align=\"left\" style=\"border-right:1px solid #505050;background-image:url(background.png);background-repeat:repeat-x;height:20px;cursor:pointer\"onmouseover=\"return overlib('IP: ".$red[ip]."<br />Сложен на: ".$red[slojen]."<br /> Изтича на: ".$red[izticha]."<br /> Статус: ".$status."<br /> Причина: ".$red[reason]."<br /> Вид: ".$red[vid]."";
if ($red[vid] == "2"){ /// Ако бана важи само за дадена страница
echo "<br />Страница: ".$red[url];
}
/// малко overlib-че ;)
echo "', CAPTION, 'IP: ".$red[ip]."');\" onmouseout=\"return nd();\"> ".$red[ip]."</td>
<td align=\"center\" style=\"border-right:1px solid #505050;background-image:url(background.png);background-repeat:repeat-x;height:20px;\">".$red[vid]."</td>
<td align=\"center\" style=\"border-right:1px solid #505050;background-image:url(background.png);background-repeat:repeat-x;height:20px;\">".$red[slojen]."</td>
<td align=\"center\" style=\"border-right:1px solid #505050;background-image:url(background.png);background-repeat:repeat-x;height:20px;\">".$red[izticha]."</td>
<td style=\"border-right:1px solid #505050;background-image:url(background.png);background-repeat:repeat-x;height:20px;\"> ".$red[reason]."</td>
<td valign=\"middle\" align=\"center\" style=\"padding-left:2px;border-right:1px solid #505050;background-image:url(background.png);background-repeat:repeat-x;height:20px;\"><a href=\"?type=del&id=".$red[id]."\">[изтрий]</a></td>
</tr>";
}
/// The End, Fin, Thats all :)
?>
</table>
</body>
</html>config.php
<?php
$dbuser="root"; /// Потребител
$dbpasswd=""; /// Парола
$dbname="ban"; /// Таблица
$conn = mysql_connect(localhost,$dbuser,$dbpasswd);
$rez = mysql_select_db($dbname, $conn) or die("MySQL Error.");
?>За да действа бан системата в сайта ви, на файловете сложете най-отгоре
<?php
include "пътя/до/бан/системата/theban.php";
?>При бан от дадена страница трябва да нанесете пътя до страницата от която искате да баннете потребителя.
Пример:
http://web-tourist.net/login/login/createnew.php
http://soul-design.org/search/ban/theban.php?id=wazaaaaaa
Бана ще действа само за тази страница.
add0n:
При .png под IE се получава проблем с картинките. За да се оправи, сложете този JS в head секцията:
<script type="text/javascript">
function correctPNG()
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
{
var imgID = (img.id) ? "id='" + img.id + "' " : ""
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
var imgStyle = "display:inline-block;" + img.style.cssText
if (img.align == "left") imgStyle = "float:left;" + imgStyle
if (img.align == "right") imgStyle = "float:right;" + imgStyle
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
window.attachEvent("onload", correctPNG);
</script>

