Webmaster общности: Predpriemach.com | SearchEngines.bg

    БАН система с 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>

    Оставете коментар