Hallo Leute,
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:
Damit werden 3 neue Felder in der Tabelle 'account' erstellt, diese Spalten lauten: baned, bantime und banlength. Diese Spalten zeigen, wie lange der Account gebannt ist, standardmäßig sind alle auf NULL gesetzt.
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
oder
Erstellt hier nun eine neue Datei namens unban.sh, dies macht ihr mit folgenden Befehl:
Diese Datei müsst ihr nun bearbeiten, unter FreeBSD macht ihr das mit:
unter Debian oder Ubuntu mit:
Wenn ihr Ubuntu verwendet könnt ihr folgenden Code direkt reinschreiben, bei Debian oder Ubuntu müsst ihr vorher die Taste "i" drücken.
So wie gesagt diesen Code schreibt ihr in die Datei:
(Unter Debian bzw. Ubuntu heißt es nicht /usr/local/bin/mysql sondern /usr/bin/mysql)
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:
und drückt Enter.
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:
So nun bekommt ihr einen Editor, hier drückt ihr "i" für INSERT und gebt folgenden Code ein:
Nun drückt ihr ESC und gebt
ein, nun müsstet ihr folgende Meldung sehen:
So jetzt werden die Accounts automatisch entbannt, allerdings wisst ihr noch nicht mit welchem Query ihr einen Account bannen müsst, dies ist auch ganz einfach mit diesem Query:
Nun wird der account für zwei Wochen gebannt, ihr könnt statt WEEK auch folgendes verwenden:
Ich wünsche euch viel Spaß damit und hoffe es gab so etwas noch nicht.
MfG Hanashi
Edit: Der entsprechende PHP-Code:
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>