Problem mit IP-Lock Klasse

CHAKKA1992

Mitglied
Hallo an alle,

ich habe mir mit PHP ein Gästebuch programmiert. Nun habe ich die "Klasse zum loggen von IPs ohne MySQL"(tutorial auf dieser domain) eingebaut. Nur leider wird die IP schon gespeichert, bevor die Berechtigung abgefragt wird, d.h. es sind keine Einträge möglich.
Woran liegt das?

URL:
http://stumppi.st.funpic.de/TEST/page_buch.php
Quellcode:
PHP:
require_once("class_iplock.php");
	$pruefen = new ip_check();
	if ($pruefen -> ip_pruefen())
		{
		if($this -> zeigezahl == "true")
			{
			$file = fopen("book.txt","r+");
			fputs($file,$contents3);
			fclose($file);
			mail ("a-stumppi@t-online.de", "Neuer Gaestebucheintrag", "$name schreibt:\r\n $text4"); 
			mail ($email, "Gaestebucheintrag auf www.andre-stumpp.de.tf", "Hallo $name\r\n\r\nDanke für den Gästebucheintrag! Ich hoffe du kommst mal wieder auf meine HP! \n\nStumppi\nWebmaster www.andre-stumpp.de.tf");
			break;
			$save = "ok";
			}
		else
			{
			echo("Du kannst nur einen Eintrag pro Stunde schreiben");
			}
		}

In Hoffnung auf hilfe,
chakka1992
 
PHP:
require_once("class_iplock.php");
	$pruefen = new ip_check();
	if ($pruefen -> ip_pruefen()==TRUE)
		{
		if($pruefen -> zeigezahl == 1)
			{
			$file = fopen("book.txt","r+");
			fputs($file,$contents3);
			fclose($file);
			mail ("a-stumppi@t-online.de", "Neuer Gaestebucheintrag", "$name schreibt:\r\n $text4"); 
			mail ($email, "Gaestebucheintrag auf www.andre-stumpp.de.tf", "Hallo $name\r\n\r\nDanke für den Gästebucheintrag! Ich hoffe du kommst mal wieder auf meine HP! \n\nStumppi\nWebmaster www.andre-stumpp.de.tf");
			break;
			$save = "ok";
			}
		else
			{
			echo("Du kannst nur einen Eintrag pro Stunde schreiben");
			}
		}

wenn dann so
Code:
if($pruefen -> zeigezahl == 1)
da mit "zeigezahl" sicher die Variable aus der IP-Log Klasse gemeint ist und nicht aus deiner eignen Klasse!
was machst du mit der book.txt
danke für die IP Klasse sowas wollt ich auch schon selber schreiben, nun brauch ichs nich mehr zu machen ;-)
 
Zuletzt bearbeitet:
Also:
-In der Datei Book.txt wird der eigentliche Eintrag gespeichert.
-mit "zeigezahl" ist allerdings die Variable aus Folgender Klasse von Tucker gemeint:
http://www.tutorials.de/forum/php-tutorials/247088-php-klasse-zum-loggen-von-ips-ohne-mysql.html

Warum habe ich das folgende Problem?
-Die IP-Speicherung mit timestamp funktioniert. Nur wenn abgefragt wird, ob die IP schon gespeichert ist, liefert es mir immer die Ausgabe "true"...

Ich denke mir dass die IP gespeichert wird, bevor sie abgefragt wird.
Oder berufe ich mich einfach auf die Falsche Variable($this _>zeigezahl)?

MFG
chakka1992
 
Hi,
ich habe gestern die Klasse ein wenig verändert, damit die Funktion nur false oder true zurückliefert.
PHP:
<?php
/******************************/
/*   Klasse by Carsten Beeg   */
/*  carsten_beeg@cabe2010.de  */
/******************************/
class ip_check
{
	var $pfad; 
	var $sperrzeit;
	var $ip;
	var $array;
	var $zeigezahl;
	
	
	function ip_pruefen()
	{
		// CONFIG
		$this -> pfad = "iplock.txt"; // absoluter Pfad zur .txt in der IP und Zeit gespeichert werden sollen
		$this -> sperrzeit = 5*60; // Zeit für Sperre (aktuell 5 Minuten)
		// CONFIG ENDE
		
		
		$this -> ip = $_SERVER['REMOTE_ADDR'];
		$this -> datei = file($this -> pfad);
		
		if (isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR']))
		{
			$this -> zeigezahl = 1; //Dient dazu, um zu sehen, ob IP gespeichert ist oder nicht
									// 1 noch nicht vorhanden 
									// 0 vorhanden
											// --> 0 oder 1 (true oder false wird an gbook.php übergeben
											// wird in if- Klausel abgefragt und je nach Wert wird Eintrag gespeichert
											// oder nicht
											
			for ($i = 0 ; $i < count($this -> datei) ; $i ++)
			{
				$daten= explode("|", $this -> datei[$i]);
				$sperre_ende=$daten[1] + $this -> sperrzeit;
				
				if ($daten[0] == $this -> ip) // Wenn IP gespeichert, auf Speicherzeit überprüfen
				{		
					if ($sperre_ende >= time())
					{
						// Sperre noch nicht abgelaufen
						$this -> zeigezahl=0;
						break;				
					}
				}
				
				if  ($sperre_ende < time())
				{
					// Sperre abgelaufen
					unset($this -> datei[$i]); // Zeile des entsprechenden Eintrages löschen (wird dadurch nachfolgend nicht mehr in Datei geschrieben)
				}
					
			}
			
			$this -> ip_schreiben();
		}
		else
		{
			$this -> zeigezahl = 0;
		}	
		
		$status = TRUE;
		if($this -> zeigezahl == 0) $status = FALSE;
		return $status;
	}
	
	function ip_schreiben()
	{	
		if (isset($this -> ip) && !empty($this -> ip))
		{		
			$fp=fopen($this -> pfad, "w") or die ("Datei konnte nicht geöffnet werden");
			
			$daten="";
			
			if ($this -> zeigezahl == 1) // Falls IP schon geschrieben, nicht nochmal schreiben.
			{
				$daten=array($this -> ip, time()); // Array Daten aus IP und aktuellen timestamp
				
				$string=implode("|", $daten); // Array Daten wird über Trennzeichen "|" zusammengefügt
				
				fputs($fp, $string."\n");
			}
			fputs($fp, implode("", $this -> datei));
			
			fclose($fp);			
		}
	}
}
 
Danke, nun funktioniert alles perfekt....

ich bin immer wieder positiv überrascht was für absolute Profis hier immer so rumwerkeln....so will ich auch mal programmieren können:rolleyes:

MFG
chakka1992
 
Zurück