IP Sperre mit Refferer erweitern

PC Freak

Erfahrenes Mitglied
Hallo, ich habe damals zusammen mit einem anderen User eine IP Sperre programmiert. Klappt auch super, doch möchte ich nun eine kleine Änderung vornehmen und krieg es ohne PHP Kenntnisse nicht hin:

Unzwar habe ich diese Zeile hinzugefügt:

PHP:
$_SERVER["HTTP_REFERER"]='google' // Und wenn der Referer Google ist
Wie muss diese Zeile richtig lauten ? (anführungszeichen usw.)

Also wenn die IP des Benutzers noch nicht in der Datenbank auftaucht und der Referer Google ist, soll etwas ausgegeben werden:

PHP:
$pruef=mysql_query("SELECT ip FROM ipsperre WHERE ip='$ip'") or die(mysql_error());
if(@!mysql_fetch_array($pruef)) { // Wenn die IP nicht gefunden wurde
$_SERVER["HTTP_REFERER"]='google' // Und wenn der Referer Google ist

    mysql_query("INSERT INTO ipsperre (ip, time) VALUES ('$ip', '$jetzt')") or die(mysql_error());
    echo $zugriff;

    // IP wurde gefunden
} else { // ansonsten Verweigerung
    echo "kein Zugriff";
}
?>
 
Zuletzt bearbeitet:
Wenn ich dich richtig verstanden habe soll das Skript erweitern, dass noch überprüft wird, ob der Refferer Google ist.
Dann kann es so aussehen:
PHP:
$pruef=mysql_query("SELECT ip FROM ipsperre WHERE ip='$ip'") or die(mysql_error());
if(@!mysql_fetch_array($pruef) && $_SERVER["HTTP_REFERER"]=='google' ) {

    mysql_query("INSERT INTO ipsperre (ip, time) VALUES ('$ip', '$jetzt')") or die(mysql_error());
    echo $zugriff;

    // IP wurde gefunden
} else { // ansonsten Verweigerung
    echo "kein Zugriff";
}
?>
 
Soll google in die Datenbank gespeichert werden

Was das stückencode für mich sagt:

PHP:
f(@!mysql_fetch_array($pruef)) { // Wenn die IP nicht gefunden wurde

$_SERVER["HTTP_REFERER"]='google';
 // Ja IP nicht gefunden setzen wir REFERER auf google.
// Weil es so viel sinn macht speichern wir anschliessend in 
// die Datenbank

mysql_query("INSERT INTO ipsperre (ip, time) VALUES ('$ip', '$jetzt')") or die(mysql_error());
echo $zugriff;

Ich vermute du willst wenn es google ist
das es die Insert abfrage überspringt

PHP:
$pruef=mysql_query("SELECT ip FROM ipsperre WHERE ip='$ip'") or die(mysql_error());
if(@!mysql_fetch_array($pruef) && $_SERVER["HTTP_REFERER"]!='google'  ) { // Wenn die IP nicht gefunden wurde


    mysql_query("INSERT INTO ipsperre (ip, time) VALUES ('$ip', '$jetzt')") or die(mysql_error());
    echo $zugriff;

    // IP wurde gefunden
} else { // ansonsten Verweigerung
    echo "kein Zugriff";
}
?>

Ohne Gewähr :)
 
Der Referer wird aber nicht nur "google" beinhalten, deshalb empfehle ich eine Prüfung mit [phpf]strpos[/phpf].
 
Kann sein das mein Vorposter recht hat.
mit der Aussagen logik hab ich es ein bisschen:)

Ich probier halt gerne
PHP:
if(@!mysql_fetch_array($pruef) && $_SERVER["HTTP_REFERER"]!='google'  )

oder
if(@!mysql_fetch_array($pruef) && $_SERVER["HTTP_REFERER"]=='google'  )
 
Ich meinte eher:

PHP:
if(@!mysql_fetch_array($pruef) && strpos($_SERVER["HTTP_REFERER"], 'google' ) === false )

Das würde jetzt prüfen:
IP ist nicht in der Datenbank UND der Referer ist nicht Google.

Grundsätzlich solltest du aber bedenken, dass der Referer nicht immer gesetzt ist.
 
PHP:
if(@!mysql_fetch_array($pruef) && strpos($_SERVER["HTTP_REFERER"], 'google' ) === false )
Das würde jetzt prüfen:
IP ist nicht in der Datenbank UND der Referer ist nicht Google.

Die Ip darf noch nicht in der Datenbank sein und der Referer muss Google sein.

Mit dem Code klappt das leider irgendwie nicht. Scheint so als erkenne dass Script nicht, ob ich von Google komme:

PHP:
$sperre=time()-3600;
$jetzt=time();
$ip = getip();

mysql_query("DELETE FROM ipsperre WHERE time<$sperre") or die(mysql_error()); // Löscht Einträge, die veraltet sind

$pruef=mysql_query("SELECT ip FROM ipsperre WHERE ip='$ip'") or die(mysql_error());
if(@!mysql_fetch_array($pruef) && $_SERVER["HTTP_REFERER"]=='google' ) {

    mysql_query("INSERT INTO ipsperre (ip, time) VALUES ('$ip', '$jetzt')") or die(mysql_error());
    echo $werbung;

    // IP wurde gefunden
} else { // ansonsten Verweigerung
    echo "";
}
?>
 
Wenn es google sein muss wenn es die IP nicht gibt
dann statt false true

VOM Felix
if(@!mysql_fetch_array($pruef) && strpos($_SERVER["HTTP_REFERER"], 'google' ) ===true )
 
Danke für die Verbesserung, allerdings gibt [phpf]strpos[/phpf] kein true zurück.

PHP:
if(@!mysql_fetch_array($pruef) && strpos($_SERVER["HTTP_REFERER"], 'google' ) !== false )

hmmNaGut, verwende doch bitte die PHP Tags um Code in die richtige Box zu tun und das Highlight zu aktivieren.

[php ][/php ]

Ohne Leerzeichen, versteht sich.
 
Zurück