ihr möchtet bestimmt manchmal User bannen, allerdings sollen diese nicht permanent, sondern nur für eine bestimmt Zeit gebannt werden, dies ist eigentlich ganz einfach und ich werde es in diesen Tutorial erklären. Ich hoffe mal so etwas gab es noch nicht.
Als erstes führt ihr folgenden Query in eurer Datenbank 'account' aus:
Code:
ALTER TABLE `account` ADD `baned` VARCHAR(50) NULL DEFAULT NULL AFTER `status`; ALTER TABLE `account` ADD `bantime` INT(10) NULL DEFAULT NULL AFTER `status`; ALTER TABLE `account` ADD `banlength` ENUM( 'SECOND', 'MINUTE', 'HOUR', 'DAY', 'WEEK', 'MONTH', 'YEAR', 'PERM' ) NULL DEFAULT NULL AFTER `status`;
Nun loggt ihr euch mit einem SSH-Client (z.B. Putty) auf euren Server ein, auf dem auch die Datenbank ist. Ich habe das in meinem Beispiel mit dem Benutzer root gemacht. Ihr geht nun in das Stammverzeichnis eureres accounts mit
Code:
cd
Code:
cd /root
Code:
touch unban.sh
Code:
ee unban.sh
Code:
vi unban.sh
So wie gesagt diesen Code schreibt ihr in die Datei:
Code:
#!/bin/bash BENUTZER=dbuser PASSWORT="dbpw" /usr/local/bin/mysql -p account -u $BENUTZER --password=$PASSWORT -D account --execute="UPDATE account SET status='OK' WHERE status != 'OK' AND (banlength='SECOND' AND DATE_SUB(NOW(), INTERVAL bantime SECOND) > baned OR banlength='MINUTE' AND DATE_SUB(NOW(), INTERVAL bantime MINUTE) > baned OR banlength='HOUR' AND DATE_SUB(NOW(), INTERVAL bantime HOUR) > baned OR banlength='DAY' AND DATE_SUB(NOW(), INTERVAL bantime DAY) > baned OR banlength='WEEK' AND DATE_SUB(NOW(), INTERVAL bantime WEEK) > baned OR banlength='MONTH' AND DATE_SUB(NOW(), INTERVAL bantime MONTH) > baned OR banlength='YEAR' AND DATE_SUB(NOW(), INTERVAL bantime YEAR) > baned);\g \q"
Ersetzt dbuser mit euren Datenbankbenutzer und dbpw mit euren Datenbankpasswort, lasst aber das Passwort in Anführungszeichen, dies ist vor allem wichtig wenn ihr Leerzeichen im Passwort habt.
Nun müsste ihr die Datei noch speichern, unter FreeBSD macht ihr das mit ESC -> leave editor -> save changes, unter einen System wie Debian oder Ubuntu drückt ihr ESC und gebt dann das ein:
Code:
:wq
So nun müsst ihr euren System nur noch sagen, dass die Datei jede Minute einmal ausgeführt werden soll. Dazu kommen wir jetzt.
Gebt in eurem SSH-Programm folgendes ein:
Code:
crontab -e
Code:
* * * * * sh /root/unban.sh
Code:
:wq
Code:
crontab: installing new crontab
Code:
UPDATE account SET status='BLOCK', baned=NOW(), bantime='2', banlength='WEEK' WHERE login='hanashi';
Code:
SECOND = x Sekunden bannen MINUTE = x Minuten bannen HOUR = x Stunden bannen DAY = x Tage bannen WEEK = x Wochen bannen MONTH = x Monate bannen YEAR = x Jahre PERM = Permanent bannen
MfG Hanashi
Edit: Der entsprechende PHP-Code:
PHP Code:
<?php
mysql_connect("host", "dbuser", "dbpasswort");
if (isset($_POST["ban"])) {
$error = false;
$errortext = "";
$login = mysql_real_escape_string($_POST["login"]);
$dauer = mysql_real_escape_string($_POST["dauer"]);
$length = mysql_real_escape_string($_POST["length"]);
$query = mysql_query("SELECT DISTINCT a.id, a.login, a.status, p.name FROM account.account a LEFT JOIN player.player p ON p.account_id=a.id WHERE a.login='".$login."' OR p.name='".$login."' ORDER BY a.id DESC LIMIT 1") or die(mysql_error());
$row = mysql_fetch_assoc($query);
if (mysql_num_rows($query) == 0) {
$errortext .= "Der Benutzer existiert nicht!<br>";
$error = true;
}
if ($row["status"] != "OK") {
$errortext .= "Der Benutzer wurde bereits gebannt!<br>";
$error = true;
}
if ($error == false) {
$query = "UPDATE account.account SET status='BLOCK', baned=NOW(), bantime='".$dauer."', banlength='".$length."' WHERE id='".$row["id"]."'";
if (mysql_query($query)) {
$errortext = "Der Benutzer wurde nun gebannt!<br>";
} else {
$errortext = "Der Benutzer wurde konnte nicht gebannt werden!<br>";
}
}
}
?>
<center>
<?php
if (isset($errortext)) {
echo $errortext."<br>";
}
?>
<form action="ban.php" method="post">
Login- oder Charaktername:<br />
<input type="text" name="login" value="<?php echo $_POST["ban"] ? $_POST["login"] : "" ?>" />
<br /><br />
Dauer:<br />
<input type="text" name="dauer" size="5" value="<?php echo $_POST["ban"] ? $_POST["dauer"] : "" ?>" />
<select name="length">
<option value="SECOND">Sekunde/n</option>
<option value="MINUTE">Minute/n</option>
<option value="HOUR">Stunde/n</option>
<option value="DAY">Tag/e</option>
<option value="WEEK">Woche/n</option>
<option value="MONTH">Monat/e</option>
<option value="YEAR">Jahr/e</option>
<option value="PERM">Permanent</option>
</select>
<br /><br />
<input type="submit" name="ban" value="Bannen!" />
</form>
</center>






