Antworten auf deine Fragen:
Neues Thema erstellen

Problem mit IP-Reloadsperre bei Statistikscript

Mew

Aktives Mitglied

Hi Leute!

Ich bin mal wieder am Verzweifeln. Ich habe ein Script geschrieben, dass eine kleine Statistik der Besucher erstellt:

PHP:
  $Suchen = mysql_fetch_object(mysql_query("SELECT * FROM statistik WHERE IPAdresse = '$IP'")); 
	  
  @$IPAdresse = $Suchen->IPAdresse;
	 
  @$Reloadsperre = $Suchen->Uhrzeit - 1800; # 30min. Reloadsperre!

	  
  if($IPAdresse == $IP AND $Suchen->Uhrzeit+$Reloadsperre >= $Uhrzeit){ 
	 
	  
   $Suchen->Seitenaufrufe;
   $Seitenaufrufe = $Suchen->Seitenaufrufe+1; 
	  
  $Befehl = "UPDATE statistik SET Seitenaufrufe = '$Seitenaufrufe' WHERE IPAdresse = '$IP'";
  $MySQLmachen = mysql_query($Befehl);  

  }
  
  else
  
  {
	  
  $MySQLBefehl2 = "INSERT INTO statistik (IPAdresse, Herkunft, Referrer, Browser, Uhrzeit) VALUES ('$IP', '$country_name','$Referrer','$Browser','$Uhrzeit')";
  $MySQLmachen2 = mysql_query($MySQLBefehl2);
  
  }

Ich möchte eine Reloadsperre von 30min. haben, also wenn Jemand vor 30min. auf der Seite war und 5min. später wieder auf die Seite kommt, soll nur der Seitenaufruf hochgestellt werden, wenn er nach 40min. wieder raufkommt soll dann ein neuer Eintrag entstehen... Leider klappt das ganze nicht ganz.
Weiß jemand warum??? Ist sonst noch ein Fehler im Script??

Danke euch viele Grüße
 

saila

Moderatorle

AW: Problem mit IP-Reloadsperre bei Statistikscript

Hi,

entweder du setzt ein Cookie mit einem timestamp oder nimmst den Timestamp in die Session. Danach kannst du sehr schön prüfen, ob der timestamp > 60 * 30 ist oder nicht.
 

Mew

Aktives Mitglied

AW: Problem mit IP-Reloadsperre bei Statistikscript

Ich habe es so gemacht, dass ein DB-Eintrag bei jedem Besucher gemacht wird... IPAdresse, Browser...., Uhrzeit(timestamp)....
Und in dem Script will ich schauen, ob die Eingetragene Uhrzeit älter als 30min ist:

PHP:
 if($IPAdresse == $IP AND $Suchen->Uhrzeit+$Reloadsperre >= $Uhrzeit){

Aber das klappt irgendwie nicht :(
 

saila

Moderatorle

AW: Problem mit IP-Reloadsperre bei Statistikscript

Das ist unnötig DB-Belästigung :)

Also wenn du ja User-Daten hast, gibt es sicherlich eine Sesiion und dann wäre lediglich folgendes erforderlich:
PHP:
<?php
/* prüfen ob Session den Sperrtime-Wert enthält, ansonsten weise timestamp zu*/
$barrierTimeSess = isset($_SESSION['barrierTime']) ? $_SESSION['barrierTime'] + 1600 : '';
$barrierTimeCook = isset($_COOKIE['barrierTime']) ? $_COOKIE['barrierTime'] + 1600 : '';

if($barrierTimeSess <= time() || $barrierTimeCook <= time()) {
    /* zeige erneut die Statistik */    
} else {
    /* ansonsten was auch immer */
}
?>
 

Mew

Aktives Mitglied

AW: Problem mit IP-Reloadsperre bei Statistikscript

hmmm ich hatte das alles jetzt so geschrieben und wollte eigentlich nich alles wieder ändern..... Geht es denn nicht eigentlich auch mit dem timestamp etc.??? ich blicke da bald gar nicht mehr durch :(
 

saila

Moderatorle

AW: Problem mit IP-Reloadsperre bei Statistikscript

Naja, du speicherst die Uhrzeit und erst bei der Prüfung nimmst du die Sperrzeit hinzu. Also machst du z.B.:

12:00 + 00:30 >= $Uhrzeit

Das ist aber schon im Aufbau etwas undurchsichtig - auch für z.B. spätere Änderungen. Speicher doch einfach den
Code:
$speicherZeit = time() + 1600;
in der Datenbank und frage später einfach
Code:
$suche->uhrzeit >= time()

Der Feld-Type für die Datenbank ist integer 10. Fertig.
 

Mew

Aktives Mitglied

AW: Problem mit IP-Reloadsperre bei Statistikscript

Ich habe es mal so gemacht, wie du sagtest... nun habe ich irgendwie ein ganz anderes Problem und konnte leider noch nicht mal deinen Vorschlag testen :(

so sieht mein Script aus:

PHP:
<?PHP

  $IP = $_SERVER["REMOTE_ADDR"]; #IP Adresse wird ermittelt.
  $Browser = $_SERVER["HTTP_USER_AGENT"]; #Der Browser wird ermittelt.
  @$Referrer = $_SERVER["HTTP_REFERER"]; #Es wird ermittelt, woher der Besucher kommt.
  $Uhrzeit = time();

  
  if($Referrer == ""){
	
	$Referrer = "keine Informationen";  
	  
  }
  
  $country_query  = "SELECT country_code2,country_name FROM iptoc ".
         "WHERE IP_FROM<=inet_aton('$REMOTE_ADDR') ".
          "AND IP_TO>=inet_aton('$REMOTE_ADDR') ";
  $country_exec = mysql_query($country_query);
  $ccode_array=mysql_fetch_array($country_exec);
  $country_name=$ccode_array['country_name'];
  
   
  
  $Suchen = "SELECT * FROM statistik WHERE IPAdresse = '$IP'"; 
  $Suchen_Ausführen = mysql_query($Suchen);
  $Suchen_zaehlen = mysql_num_rows($Suchen_Ausführen);
  
  if($Suchen_zaehlen != 0 AND $Uhrzeit+1800 >= time()){
	  
	$IPAdresse = mysql_result($Suchen_Ausführen,0, 'IPAdresse');
	$Uhrzeit = mysql_result($Suchen_Ausführen,0, 'Uhrzeit');
	$Seitenzahl = mysql_result($Suchen_Ausführen,0, 'Seitenaufrufe');
	 	  
  $Seitenzahl = $Seitenzahl+1;
	  
  $Befehl = "UPDATE statistik SET Seitenaufrufe = $Seitenzahl WHERE IPAdresse = '$IP'";
  $MySQLmachen = mysql_query($Befehl); 
	  
  }
  
  else
  
  {
	  
  $MySQLBefehl2 = "INSERT INTO statistik (IPAdresse, Herkunft, Referrer, Browser, Uhrzeit) VALUES ('$IP', '$country_name','$Referrer','$Browser','$Uhrzeit')";
  $MySQLmachen2 = mysql_query($MySQLBefehl2);
  }

?>

Ich habe mir mal den SQL BEfehl ausgeben lassen: UPDATE statistik SET Seitenaufrufe = 24+1 WHERE IPAdresse = '92.78.179.190'

In der Datenbank steht dann bei Seitenaufrufe 30.
Wie kann das sein? Habe den Code im footer danach kommt nichts mehr... Er trägt immer ganz andere Zahlen ein.....

Hoffe jemand kann mir helfen :)
 

netbandit

Aktives Mitglied

AW: Problem mit IP-Reloadsperre bei Statistikscript

Ich misch mich mal kurz ein: Was haben Umlaute im Variablennamen zu suchen?

PHP:
$Suchen_Ausführen
 

saila

Moderatorle

AW: Problem mit IP-Reloadsperre bei Statistikscript

Also nun mal ganz von Anfang an :)

In dein Script füge ganz am Anfang nach <?php folgendes ein:
error_reporting(E_ALL);

Dann ändere wie von netbandit alle Variablen die Umlaute enthalten. Steht auch übrigens in den Grundregeln für php.

Dann zeige mal die Tabellenstruktur.

Danach gehen wir den Code durch. Da ist einiges zu ändern ;)
 

Mew

Aktives Mitglied

AW: Problem mit IP-Reloadsperre bei Statistikscript

Hi!

Danke für eure Hilfe....
Also habe error_reporting(E_ALL); eingefügt. Die Variablen sind auch geändert.

Das ist die Tabellenstruktur:

Code:
ID  	int(4)  	 	  	Nein  	 	auto_increment  	  
IPAdresse 	varchar(15) 	utf8_swedish_ci 		Nein 			
Herkunft 	varchar(40) 	utf8_swedish_ci 		Nein 			
Referrer 	varchar(250) 	utf8_swedish_ci 		Nein 	keine 
Browser 	varchar(120) 	utf8_swedish_ci 		Nein 			
Uhrzeit 	int(15) 		                                        Nein 	0 		
Seitenaufrufe 	int(3) 	                                         Nein 	0

Hier das Script noch einmal:

PHP:
<?PHP
error_reporting(E_ALL);

$IP = $_SERVER["REMOTE_ADDR"]; #IP Adresse wird ermittelt.
  $Browser = $_SERVER["HTTP_USER_AGENT"]; #Der Browser wird ermittelt.
  @$Referrer = $_SERVER["HTTP_REFERER"]; #Es wird ermittelt, woher der Besucher kommt.
  $Uhrzeit = time();

  
  if($Referrer == ""){
	
	$Referrer = "keine Informationen";  
	  
  }
  
  $country_query  = "SELECT country_code2,country_name FROM iptoc ".
         "WHERE IP_FROM<=inet_aton('$REMOTE_ADDR') ".
          "AND IP_TO>=inet_aton('$REMOTE_ADDR') ";
  $country_exec = mysql_query($country_query);
  $ccode_array=mysql_fetch_array($country_exec);
  $country_name=$ccode_array['country_name'];
  
   
  
  $Suchen = "SELECT * FROM statistik WHERE IPAdresse = '$IP'"; 
  $Suchen_Ausfuehren = mysql_query($Suchen);
  $Suchen_zaehlen = mysql_num_rows($Suchen_Ausfuehren);
  
  if($Suchen_zaehlen != 0 AND $Uhrzeit+1800 >= time()){
	  
	$IPAdresse = mysql_result($Suchen_Ausfuehren,0, 'IPAdresse');
	$Uhrzeit = mysql_result($Suchen_Ausfuehren,0, 'Uhrzeit');
	$Seitenzahl = mysql_result($Suchen_Ausfuehren,0, 'Seitenaufrufe');
	 	  
  $Seitenzahl = $Seitenzahl+1;
	  
  $Befehl = "UPDATE statistik SET Seitenaufrufe = $Seitenzahl WHERE IPAdresse = '$IP'";
  $MySQLmachen = mysql_query($Befehl); 
	  
  }
  
  else
  
  {
	  
  $MySQLBefehl2 = "INSERT INTO statistik (IPAdresse, Herkunft, Referrer, Browser, Uhrzeit) VALUES ('$IP', '$country_name','$Referrer','$Browser','$Uhrzeit')";
  $MySQLmachen2 = mysql_query($MySQLBefehl2);
  }

?>

Habe das mal einmal laufen lassen und das ist in der DB:

Code:
1  	92.78.179.190  	GERMANY  	http://www.angelfreundebb.de/admin/intern.php  	Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1....  	1262426676  	5

Also wieder 5 Seitenaufrufe.... Kann das sein, dass das mit einer weiterleitung zu tun hat???
Also ich leite z.B. von http://AngelfreundeBB.de auf http://www.AngelfreundeBB.de. Aber eigentlich sollte das doch nichts damit zu tun haben oder?

Viele Grüße
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Problem mit IP-Reloadsperre bei Statistikscript

Hi,

also hier mal etwas angepasst:
PHP:
<?php
error_reporting(E_ALL);

/**
 * function servers($vars) // damit man einen Überblick hat
 * 
 * @param: string $vars
 * @return: string
 */
function servers($vars) {
    return $nVars = isset($_SERVER[$vars]) ? $_SERVER[$vars] : '';
}

$IP            = servers('REMOTE_ADDR');         #IP Adresse wird ermittelt.
$Browser    = servers('HTTP_USER_AGENT');     #Der Browser wird ermittelt.
$Referrer    = servers('HTTP_REFERER');         #Es wird ermittelt, woher der Besucher kommt.
$Uhrzeit    = time() + 1800;                #aktueller timestamp

// select  
$country_query  = "SELECT 
                        country_code2,
                        country_name 
                    FROM 
                        iptoc 
                     WHERE 
                         IP_FROM <= INET_ATON('". $REMOTE_ADDR ."') AND
                          IP_TO >= INET_ATON('". $REMOTE_ADDR ."
                      LIMIT 1')";

$country_exec     = mysql_query($country_query);
$ccode_array    = mysql_fetch_array($country_exec);
$country_name     = $ccode_array['country_name'];
  
   
$Suchen = "SELECT * FROM statistik WHERE IPAdresse = '$IP'"; 
$Suchen_Ausfuehren = mysql_query($Suchen);
$Suchen_zaehlen = mysql_num_rows($Suchen_Ausfuehren);
  
if($Suchen_zaehlen AND $Uhrzeit >= time()){
      
    $IPAdresse = mysql_result($Suchen_Ausfuehren,0, 'IPAdresse');
    $Uhrzeit = mysql_result($Suchen_Ausfuehren,0, 'Uhrzeit');
    $Seitenzahl = mysql_result($Suchen_Ausfuehren,0, 'Seitenaufrufe');
           
    $Seitenzahl = $Seitenzahl+1;
      
    $Befehl = "UPDATE statistik SET Seitenaufrufe = Seitenaufrufe+1 WHERE IPAdresse = '". $IP ."' LIMIT 1";
    $MySQLmachen = mysql_query($Befehl);
    // hier wäre noch zu prüfen, ob der Query ausgeführt wurde 
      
} else {
      
    $MySQLBefehl2 = "INSERT INTO statistik (
                              IPAdresse, 
                              Herkunft, 
                              Referrer, 
                              Browser, 
                              Uhrzeit ) 
                    VALUES (
                              '". $IP ."', 
                              '". $country_name ."',
                              '". $Referrer ."',
                              '". $Browser ."',
                              '". $Uhrzeit ."')";
      
    $MySQLmachen2 = mysql_query($MySQLBefehl2);
  
}
?>
In der Tabellenstrutkur kannst du die Uhrzeit auf INT(10) setzen, weil ein timestamp immer aus 10 Zeichen besteht. Wenn du dir sicher bist, dass die Seitenaufrufe nicht über 999 gehen, kannst du da TINYINT verwenden (3) ansonsten würde ich hier SMALLINT(5) verwenden.

Wenn du beim Testen 5 Einträge erhälst (unter der Voraussetzung, das die Tabelle leer war), solltest du prüfen, wo du ein header() verwendest.

Und woher kommt die Variable $REMOTE_ADDR?
 

saila

Moderatorle

AW: Problem mit IP-Reloadsperre bei Statistikscript

Warum es bei dir nicht läuft, kann ich so nicht ohne Blick auf das gesamte Script sagen. Bei läuft auf jedenfall das Script:

Tabelle "statistik":
Code:
CREATE TABLE `test`.`statistik` (
  `ID` INTEGER(4) UNSIGNED NOT NULL AUTO_INCREMENT,
  `IPAdresse` VARCHAR(15) NOT NULL DEFAULT '',
  `Herkunft` VARCHAR(40) NOT NULL DEFAULT '',
  `Referrer` VARCHAR(250) NOT NULL DEFAULT '',
  `Browser` VARCHAR(120) NOT NULL DEFAULT '',
  `Uhrzeit` INTEGER(10) UNSIGNED NOT NULL DEFAULT 0,
  `Seitenaufrufe` TINYINT UNSIGNED NOT NULL DEFAULT 0,
  PRIMARY KEY(`ID`),
  INDEX `Index_2`(`Seitenaufrufe`, `Uhrzeit`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
Script:
PHP:
<?php
error_reporting(E_ALL);

$sql = mysql_connect('localhost', 'root', 'erfolg12');
mysql_select_db('test', $sql);
$REMOTE_ADDR = '127.0.0.2';

/**
 * function servers($vars) // damit man einen Überblick hat
 * 
 * @param: string $vars
 * @return: string
 */
function servers($vars) {
    return $nVars = isset($_SERVER[$vars]) ? $_SERVER[$vars] : '';
}

$IP            = servers('REMOTE_ADDR');         #IP Adresse wird ermittelt.
$Browser    = servers('HTTP_USER_AGENT');     #Der Browser wird ermittelt.
$Referrer    = servers('HTTP_REFERER');         #Es wird ermittelt, woher der Besucher kommt.
$Uhrzeit    = time() + 1800;                #aktueller timestamp

// select  
$country_query  = "SELECT 
                        country_code2,
                        country_name 
                    FROM 
                        iptoc 
                     WHERE 
                         IP_FROM <= INET_ATON('". $REMOTE_ADDR ."') AND
                          IP_TO >= INET_ATON('". $REMOTE_ADDR ."')
                      LIMIT 1)";
$country_exec   = mysql_query($country_query) or die (mysql_error());
$nums = mysql_num_rows($country_exec);

$ccode_array    = '';
$country_name    = '';

if($nums) {
    $ccode_array    = mysql_fetch_array($country_exec);
    $country_name     = $ccode_array['country_name'];
}  
   
$Suchen = "    SELECT 
                * 
            FROM 
                statistik 
            WHERE 
                IPAdresse = '$IP'"; 
$Suchen_Ausfuehren = mysql_query($Suchen) or die (mysql_error());
$Suchen_zaehlen = mysql_num_rows($Suchen_Ausfuehren);
  
if($Suchen_zaehlen AND $Uhrzeit >= time()){
      
    $IPAdresse = mysql_result($Suchen_Ausfuehren,0, 'IPAdresse');
    $Uhrzeit = mysql_result($Suchen_Ausfuehren,0, 'Uhrzeit');
    $Seitenzahl = mysql_result($Suchen_Ausfuehren,0, 'Seitenaufrufe');
           
    $Seitenzahl = $Seitenzahl+1;
      
    $Befehl = "UPDATE statistik SET Seitenaufrufe = Seitenaufrufe+1 WHERE IPAdresse = '". $IP ."' LIMIT 1";
    $MySQLmachen = mysql_query($Befehl) or die (mysql_error());
    // hier wäre noch zu prüfen, ob der Query ausgeführt wurde 
      
} else {
      
    $MySQLBefehl2 = "INSERT INTO statistik (
                              IPAdresse, 
                              Herkunft, 
                              Referrer, 
                              Browser, 
                              Uhrzeit ) 
                    VALUES (
                              '". $IP ."', 
                              '". $country_name ."',
                              '". $Referrer ."',
                              '". $Browser ."',
                              '". $Uhrzeit .")";
      
    $MySQLmachen2 = mysql_query($MySQLBefehl2) or die (mysql_error());
  
}
?>
Mit dieser Version solltest du zumindest Fehlermeldungen bzgl. Datenbank erhalten.

Wird das Script in Drupal eingesetzt? Wenn ja ist es ohnehin schon nicht Drupal-Konform. Aber das nur nebenbei - wenn dem so wäre :)
 
Zuletzt bearbeitet:

Mew

Aktives Mitglied

AW: Problem mit IP-Reloadsperre bei Statistikscript

Hmmm ich habe dir mal eine PN geschickt... hoffentlich klappt das dann nochmal :)
 

Mew

Aktives Mitglied

AW: Problem mit IP-Reloadsperre bei Statistikscript

Dank saila ist das Problem gefunden, jedoch leider noch nicht ganz behoben.
Wir haben herausgefunden, dass der header mehrfach durchlaufen wird.
Es muss an der .htaccess liegen.... Wenn ich diese Zeile dort herausnehme klappt es:

Code:
ErrorDocument 404 /fehler404.php

Das ist der Pfad der angzeigt werden soll, wenn jemand auf die 404 Seite kommen würde.
Wie kann das sein, dass dadurch mein header zweimal durchlaufen wird, manchmal sogar mehrfach???

Hoffe mir kann da jemand weiterhelfen, sodass ich die Fehlerseite wieder verwenden kann...
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben