What's new

PHP [KONKURS][MODERN]Banowanie na IP na stronie

Status
Not open for further replies.

Kuzirashi

ASP.NET MVC, JS-SPA, PHP, NODE
Joined
Jul 24, 2010
Messages
772
Reaction score
157
System pozwalaj?cy zarz?dza? osobami zbanowanymi na IP na stron?. Nic doda?, nic uj??.

Najpierw tworzymy tabel? `banned_ips` kodem SQL w PhpMyAdmin:
PHP:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Baza danych: `xxx`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `banned_ips`
--

CREATE TABLE IF NOT EXISTS `banned_ips` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `adres_ip` int(11) unsigned NOT NULL COMMENT 'Adres IP zbanowanego.',
  `pow?d` varchar(64) DEFAULT NULL COMMENT 'Pow?d banicji.',
  `data` datetime NOT NULL COMMENT 'Data nadania bana.',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='Zbanowani na IP na stronie.' AUTO_INCREMENT=0 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Tworzymy folder w /system/application/views i nazwijmy go admin. Tworzymy tam plik o nazwie banned.php, czyli pe?na lokalizacja twojego pliku powinna wygl?da? tak: /system/application/views/banned.php, ustawiamy formatowanie na UTF8 i wklejamy tam kod:
PHP:
<?php
// ZABEZPIECZENIE
if ( !defined('BASEPATH')) header('Location: ../../../../../../');

#region Wst?p
########## KUZIRASHI'S BANNED SCRIPT		##########
########## GG: 4760316 KUZIRASHI@INTERIA.PL	##########
/*	http://tibia.net.pl/members/281422-Kuzirashi 	*/
/*			BEGIN -- USER INTERFACE -- 				*/
#endregion

#region Obs?uga Banowania
if ($_POST) {
	ban($_POST['adres_ip'], $_POST['powod']);
}
#endregion

alert('System pozwalaj?cy zarz?dza? osobami zbanowanymi na IP przez stron?.');
?>
<table class="online guilds">
	<thead>
		<th>Adres IP</th>
		<th>Pow?d</th>
		<th>Data</th>
		<th>Usu?</th>
	</thead>
	<tbody>
		<?php foreach ($lista as $zbanowany) { ?>
		<tr class="tablerow">
			<td><?php echo $zbanowany['ip'] ?></td>
			<td><?php echo $zbanowany['pow?d'] ?></td>
			<td><?php echo $zbanowany['data'] ?></td>
			<td align="center"><a href="<?php echo WEBSITE . 'index.php/admin/banned/1/' . $zbanowany['id']; ?>">Klik!</a></td>
		</tr>
		<?php } ?>
	</tbody>
</table>
<br />
<br />
<hr />
<div style="text-align: center;">
	<form method="POST" action="">
		<input name="adres_ip" type="text" placeholder="Adres IP" />
		<br />
		<textarea name="powod" placeholder="Tutaj wpisz pow?d bana..."></textarea>
		<br />
		<button name="submit" type="submit">Zbanuj</button>
	</form>
</div>
<hr />
<a href="<?php echo WEBSITE . 'index.php/admin/'; ?>"><?php echo htmlentities('<~~'); ?> Wr?? do Admin</a>

Kolejno, edytujemy plik admin.php w /system/application/controllers/ i na samym dole przed:
PHP:
}
?>

upewniamy si?, ?e kodowanie tego pliku to UTF8 dodajemy kod:
PHP:
// KUZIRASHI
		public function banned ($action = null, $id = null) {
			$action = (int)$action;
			$id 	= (int)$id;
			// WYMAGAJ ADMINA
			$ide = new IDE;
            $ide->requireAdmin();
			
			// ZA?ADUJ MODEL
			$this->load->model('banned_model');
			
			switch ($action) {

				default:
					function ban ($ip, $pow?d) {
						$CI =& get_instance();
						$CI->load->model('banned_model');
						$CI->banned_model->banIP($ip, $pow?d);
					}
					// WE? LIST? ZBANOWANYCH Z MODELU I PRZYPISZ DO ZMIENNEJ {$lista}
					$data['lista'] = $this->banned_model->getBannedIPS();
					
					// ZA?ADUJ WIDOK Z NASZYMI DANYMI {$data}
					$this->load->view('admin/banned.php', $data);
				break;
				
				// ODBANUJ
				case 1:
					if ($id != null && $this->banned_model->exists($id)) {
						if ($this->banned_model->unban($id)) {
							success('Z powodzeniem usun??e? dane IP z listy zbanowanych.');
						}
						
						// PRZEKIEROWANIE -- {!} ABY TEGO U?Y? MUSICIE MIE? ZA?ADOWANE JQUERY
						$this->load->view('refresh');
					} else {
						header('Location: ../');
					}
				break;
			}
		}

Nast?pnie, tworzymy nowy plik o nazwie banned_model.php w /system/application/models, z formatowaniem UTF8, i wklejamy do niego kod:
PHP:
<?php
########## KUZIRASHI'S BANNED SCRIPT		##########
########## GG: 4760316 KUZIRASHI@INTERIA.PL	##########
/*	http://tibia.net.pl/members/281422-Kuzirashi 	*/
/*					BEGIN -- MODEL -- 				*/
class Banned_Model extends Model {
	function __construct () {
		parent::__construct();
        $this->load->database();
	}
	
	function getBannedIPS() {
		return $this->db->query('SELECT `id`, `pow?d`, INET_NTOA(`adres_ip`) AS "ip", data FROM `banned_ips`;')->result_array();
	}
	
	function banIP($ip, $pow?d) {
		if ($this->db->query('INSERT INTO `banned_ips`(`pow?d`, `adres_ip`, `data`) VALUES("' . $pow?d . '", INET_ATON("' . $ip . '"), "' . date("Y-m-d H:i:s", strtotime("now")) . '");')) {
			return true;
		} else {
			return false;
		}
	}
	
	function isBanned($ip) {
		if ($q = $this->db->query('SELECT INET_NTOA(`adres_ip`) AS "ip" FROM `banned_ips` WHERE `adres_ip` = INET_ATON("' . $ip . '");')->row_array()) {
			return true;
		} else {
			return false;
		}
	}
	
	function getReason($ip) {
		$q = $this->db->query('SELECT `pow?d` FROM `banned_ips` WHERE `adres_ip` = INET_ATON("' . $ip . '");')->row_array();
		return $q['pow?d'];
	}
	
	function unban($id) {
		if ($this->db->query('DELETE FROM `banned_ips` WHERE `id` = ' . $id)) {
			return true;
		} else {
			return false;
		}
	}
	
	function exists($id) {
		if($q = $this->db->query('SELECT `id` FROM `banned_ips` WHERE `id` = ' . $id)->num_rows()) {
			if ($q > 0) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
}
?>

Teraz, b?dziemy edytowa? plik w index.php w g??wnym katalogu, szukamy w naszym edytorze fragmentu:
PHP:
$smarty->assign('admin', '');

i pod nim wklejamy kod:
PHP:
/* KUZIRASHI BANNED IPS */
$CI->load->model('banned_model');
if ($CI->banned_model->isBanned($_SERVER['REMOTE_ADDR'])) {
	die('Sorry, you are banned because of: ' . $CI->banned_model->getReason($_SERVER['REMOTE_ADDR']) . '. For contact write to e-mail: memsoria@tlen.pl');
}
/* -- END -- */

Jeszcze jedna rzecz. Tworzycie plik refresh.php w /system/application/views/ i je?eli mamy ju? na stronie za?adowane JQuery, to lajcik wklejamy po prostu kod:
HTML:
<script type="text/javascript">
	$(function () {
		setInterval(function(){
			location.reload();
		},3000);
	});
</script>

Je?li natomiast nie mamy JQuery, to musimy doda? jeszcze jedn? linijk? w pliku refresh.php, powy?ej kodu, kt?ry wklejali?my:
HTML:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

A wi?c to by by?o na tyle. Pozdrawiam i mi?ego dnia.

Reput mile widziany.

Zabraniam kopiowania zawarto?ci na inne fora/serwisy.

Notka moderatorska:
+40pkt do konkursu!
 
Status
Not open for further replies.
Top