Einfacher Reloadschutz auf Textbasis greift nicht
Enrico
- php
0 Harry
Guten Morgen, liebe Workaholics ;-)
Als Einstieg in unser Gästebuch wird zunächst ein Menü angezeigt, das folgende Punkte enthält:
-Eintrag erstellen
-Einträge lesen
-Gästebuch verwalten
-Statistik anzeigen
Nun habe ich in dieser Menüdatei einen einfachen Reloadschutz auf Textbasis mit Vergleich der IP-Adresse und des Zeitstempels eingebaut, der die Schaltfläche "Eintrag erstellen" verstecken bzw. anzeigen soll, je nach dem, ob innerhalb eines vorgegebenen Zeitraums bereits ein Eintrag erstellt wurde oder nicht:
<html>
<head>
...
</head>
<body>
<?php
$Zeitstempel = time ();
$Zeitsperre = 86400;
$Gefunden = false;
$GueltigeIP = true;
$DateiIP = "CSV.GaestebuchIP.csv";
$ListeIP = file ($DateiIP);
$Fehler = false;
$FehlermeldungenTemp[] = "";
// IP feststellen
if ($_SERVER["HTTP_X_FORWARDED_FOR"])
{
if ($_SERVER["HTTP_CLIENT_IP"])
$IP = $_SERVER["HTTP_CLIENT_IP"]; // Proxy-Server
else
$IP = $_SERVER["REMOTE_ADDR"]; // Proxy-Server
$IP = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
if ($_SERVER["HTTP_CLIENT_IP"])
$IP = $_SERVER["HTTP_CLIENT_IP"];
else
$IP = $_SERVER["REMOTE_ADDR"];
}
// IP prüfen
$GueltigeSegmente = 0;
if (ereg('^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$', $IP, $segment))
{
if (($IP != "0.0.0.0") || ($IP != "255.255.255.255"))
{
for ($i = 1; $i < 5; $i++)
{
if ($segment[$i] >= 0 && $segment[$i] <= 255)
$GueltigeSegmente += 1;
}
if ($GueltigeSegmente != 4)
$GueltigeIP = false;
}
else
$GueltigeIP = false;
}
else
$GueltigeIP = false;
// Reload prüfen
if ($GueltigeIP)
{
if (count ($ListeIP) > 0)
{
foreach ($ListeIP as $Zeile)
{
$GesplitteteZeile = explode("|", $Zeile);
if (($GesplitteteZeile[0] + $Zeitsperre) > $Zeitstempel)
$NeueIPListe[] = trim ($Zeile) . "\n";
}
foreach ($NeueIPListe as $Zeile)
{
$GesplitteteZeile = explode("|", $Zeile);
if (trim ($GesplitteteZeile[1]) == $IP)
$Gefunden = true;
}
}
$DateiZeiger = fopen($DateiIP, "w");
if (count ($ListeIP) > 0)
{
foreach ($NeueIPListe as $Zeile)
fwrite ($DateiZeiger, trim ($Zeile) . "\n");
}
if (!$Gefunden)
fwrite ($DateiZeiger, $Zeitstempel . "|" . $IP . "\n");
fclose ($DateiZeiger);
... Aufbau des Menüs ...
if (!$Gefunden)
echo '<img border="0" src="pic/nav/N_eintrag_erstellen.png" width="86" height="16">';
else
echo '<img border="0" src="pic/gfx/L_spacer.gif" width="86" height="1">';
... Aufbau des Menüs ...
}
else
echo "Ungültige IP-Adresse";
?>
</body>
</html>
Mein Problem ist nun aber, dass die Variable "$Gefunden" scheinbar übergangen wird, weil die Schaltfläche "Eintrag erstellen" immer angezeigt wird.
Was habe ich falsch gemacht ?
Schon mal vielen Dank im Voraus.
Gruss, Enrico
Holladiewaldfee,
Mein Problem ist nun aber, dass die Variable "$Gefunden" scheinbar übergangen wird, weil die Schaltfläche "Eintrag erstellen" immer angezeigt wird.
Ich habe Deinen Code nicht komplett durchgeschaut, aber hast Du schonmal überprüft, ob der Interpreter überhaupt bis zu der Stelle kommt, an der $Gefunden = true gesetzt wird? Laß Dir doch an der entsprechenden Stelle einfach mal eine Meldung ausgeben, z.B. "Jetzt true" oder sowas. Kommt die Meldung nicht wie erwartet, gehe eine Ebene höher und probiere es da mit einer Meldung usw., bis Du die fehlerhafte Ebene findest.
Auf Gut-Neu-Deutsch: Debugging :)
Ciao,
Harry