(zuletzt bearbeitet )

In diesem Code wird gezeigt, wie man Klicks nur einmal am Tag zählen lassen kann. Diese sog. "IP-Sperre" funktioniert nur in Kombination mit einer MySQL-Datenbank.

Lies bitte die Kommentare aufmerksam durch, dort wird alles genau erklärt.

Werbung

Werbeblocker aktiv?

Vermutlich aufgrund eines Werbeblockers kann an dieser Stelle leider keine Werbung angezeigt werden. Als Blog ist diese Website jedoch darauf angewiesen, um diverse Kosten abdecken zu können.

Vielleicht möchtest du Servaholics ja in deinem Werbeblocker als Ausnahme hinzufügen und so unterstützen? Das wäre jedenfalls sehr nett! :-)

  1. <?php
  2. /* Vorabinformationen:
  3.   In diesem Beispiel wird als Tabelle der Beispielname "ipsperre" verwendet, dies ist natürlich anpassbar.
  4.   Diese Tabelle MÜSSEN Sie erstellen, Sie MUSS folgende Zeilen enthalten: ip und datum
  5.       Sie können folgenden SQL-Code dafür verwenden:
  6.     CREATE TABLE `ipsperre` (
  7.     `ip` VARCHAR( 100 ) NOT NULL ,
  8.     `datum` VARCHAR( 100 ) NOT NULL
  9.     )
  10. */
  11.  
  12. // Datenbankzugang
  13. $server = "localhost"; // z.B. localhost, 127.0.0.1 oder externer Server
  14. $user = ""; // Benutzername | EINFÜGEN
  15. $password = ""; // Passwort | EINFÜGEN
  16. $database = ""; // Datenbank | EINFÜGEN
  17.  
  18. // Verbindung aufbauen
  19. @mysql_connect ($server, $user, $password) or die ("Entweder der Server (Host), der Benutzername oder das Passwort stimmen nicht. MySQL gibt folgenden Error aus:".mysql_error()."");
  20. @mysql_select_db ($database) or die ("Die Datenbank ist nicht vorhanden, MySQL gibt folgenden Error aus:".mysql_error()."");
  21.  
  22. // Zeit in UNIX
  23. $timestamp2 = time();
  24. // Zeit auf Deutsch
  25. $timestamp = date("d.m.Y",$timestamp2);
  26.  
  27. // IP-Adresse ermitteln
  28. $ip = $_SERVER['REMOTE_ADDR'];
  29.  
  30. // Prüfen, ob an diesem Tag mit dieser IP schon geklickt
  31. $a = "SELECT * FROM ipsperre WHERE ip = '".$ip."' AND datum = '".$timestamp."'";
  32. $b = mysql_query($a);
  33. if (mysql_num_rows($b) == 0) { // Falls nicht
  34.     echo "IP-Sperre ist noch inaktiv.";
  35.  
  36.     // hier folgt dann Ihr PHP-Script (o.ä.), das ausgeführt werden soll //
  37.  
  38.     // Neuer Eintrag für diesen Klick
  39.     $sperren = "INSERT INTO ipsperre (ip, datum) VALUES ('".$ip."', '".$timestamp."')";
  40.     $vollenden = mysql_query($sperren);
  41.     echo "IP-Sperre ist jetzt aktiv.";
  42. } else { // Falls doch
  43.     echo "IP-Sperre aktiv."; // nichts tun
  44. }
  45. ?>

12 Kommentare zu "IP-Sperre per MySQL-Datenbank" (RSS)

3. Februar 2011 21:28 UhrAntworten#
Dan
netter Codes 🙂
16. Februar 2013 20:48 UhrAntworten#
Anynoum
Super. Wie du es erklärt hast 😉.
17. März 2013 03:17 UhrAntworten#
User
Wie muss ich den Code verändern, wenn die IP-Sperre nach bspw. 6h aufgehoben sein soll?
17. März 2013 11:03 UhrAntworten#
Chris (Administrator)
Hallo!

- In der Datenbank das Feld datum auf Typ int(255) umstellen
- Zeile 25 entfernen
- Zeile 23 ersetzen durch: $timestamp = time();
- Zeile 31 ersetzen durch:
$a = "SELECT * FROM ipsperre WHERE ip = '".$ip."' AND datum > '".($timestamp - (60*60*6))."'";

60*60*6 beschreibt hierbei sechs Stunden in Sekunden.

Der Code ist ungetestet, sollte allerdings funktionieren. 😛

Viel Spaß und Grüße,
Chris

// Hinweis: Code korrigiert (5.12.2013)
18. März 2013 12:27 UhrAntworten#
User
Vielen Dank für die superschnelle Antwort!
Habe noch nicht die Zeit gefunden es zu testen, aber denke mal das es klappt.

Großes Lob noch für die immer aktuelle Seite - auch wenn ich das Forum von About-PC vermisse 😉
18. Mai 2013 19:06 UhrAntworten#
Marcel
Geil. Das ist ja wesentlich einfacher als ich sowas erwartet hätte. Vielen Dank dafür. 🙂
5. Dezember 2013 18:47 UhrAntworten#
Rainer
Leider führt die Änderung von datum auf int(255) beim sql Statement zu einer Fehlermeldung bzw. der mysql_num_rows führt so denke ich dazu das es zu der Warnung:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in ....
ich denke das
$b = mysql_query($a);
if (mysql_num_rows($b) == 0) { // Falls nicht

Änderungen wie von Chris beschrieben habe ich durchgeführt. Leider spreche ich nicht gut PHP um das Problem zu lösen.
Somit geht eine Prüfung auf Stunden leider nicht ☹
Gibt es vielleicht eine Lösung dafür?
5. Dezember 2013 18:57 UhrAntworten#
Chris (Administrator)
Hi,

füge am besten nach Zeile 32 (nach dem Aufruf von mysql_query()) die folgenden Zeilen ein und schaue dir sowohl die genaue Fehlermeldung sowie deine SQL-Anfrage an:
if (!$b) {
    echo '<p>Fehler: '.mysql_error().'</p>';
    echo '<p>SQL-Anweisung: '.$a.'</p>';
}


Gerne kannst du die Ausgabe dann auch noch einmal hier posten. 🙂

Grüße, Chris
5. Dezember 2013 19:09 UhrAntworten#
Rainer
Wow, das nenne ich super schnell. Tja, ich habe an dem sql query nichts geändert, sondern diesen hier aus dem Script übernommen.
Wenn ich es richtig verstehe kommt -21600 aus dem sql Statement heraus .
Diesen habe ich benutzt:
$a = "SELECT * FROM ipsperre WHERE ip = '".$ip."' AND datum > '".$timestamp - (60*60*6)."'";

Fehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-21600'' at line 1

SQL-Anweisung: -21600'

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in J:\xamps
5. Dezember 2013 19:14 UhrAntworten#
Chris (Administrator)
Probier mal folgendes:
$a = "SELECT * FROM ipsperre WHERE ip = '".$ip."' AND datum > '".($timestamp - (60*60*6))."'";

Alternativ kannst du dir mal den Wert von $timestamp ausgeben lassen.

Grüße, Chris
5. Dezember 2013 19:19 UhrAntworten#
Rainer
Hi,

vielen lieben Dank. Damit funktioniert es . Super einen schönen Abend noch

Grüße
Rainer
5. Dezember 2013 19:21 UhrAntworten#
Chris (Administrator)
Hi,

gerne, und danke für das Feedback. Ebenfalls. 🙂

Grüße, Chris

Jetzt bist du dran: Was denkst du?

Bitte beachte: Auch wenn das Angeben einer E-Mail-Adresse optional ist, so bist du doch nicht vollständig anonym, denn u.a. deine IP-Adresse wird mit dem Absenden dieses Formulars gespeichert.



Tastenkürzel


Überall

j: Älterer Artikel

k: Neuerer Artikel

s: Suchen

h: Hilfe


Auf Artikel-Seiten

t: Auf Twitter posten

f: Auf Facebook posten

g: Auf Google+ posten