kostenloser Webspace werbefrei: lima-city


IP-Sperre für GB

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    hi!
    ich wollte in mein gästebuch eine ip-sperre einbauen um doppelte einträge zu verhindern. also jede 10 min ein eintrag usw ihr wisst schon wie ich das meine ;)
    nur bekomme ich das nicht hin und hab am anfang nicht an so eine sperre gedacht und sie im script nicht berücksichtigt. ich möchte aber nicht ein neues script schreiben, da mein gb im moment super funzt nach einigen anfänglichen schwierigkeiten.
    deshalb frage ich lieber die profis ;)
    wäre nett, wenn ihr mir helfen würdet =)
    das gb basiert auf mysql
    datum int(12)
    name varchar(50)
    eintrag text

    hier der code zum einfügen des eintrages:

    <?php
    
    $DatabasePointer=mysql_connect("", "", "");
    mysql_select_db("", $DatabasePointer);
    $time = time();
    
    $SQL = "INSERT INTO Gaestebuch (Datum, Name, Eintrag) VALUES ('$time', '".$_REQUEST['Name']."', '".$_REQUEST['Eintrag']."')";
    mysql_query($SQL, $DatabasePointer);
    
    if(mysql_affected_rows($DatabasePointer)==1)
    {
    ?>
    <center><font face="Verdana" size="2">
    Vielen Dank f&uuml;r Ihren Eintrag!<br>
    <a href="gaestebuch.php">Zur&uuml;ck</a></center>
    <?php
    }
    else
    {
    ?>
    <center><font face="Verdana" size="2">
    Beim Eintragen ist ein Fehler aufgetreten!<br>
    <a href="javascript:history.back();">Zur&uuml;ck</a></center>
    <?php
    }
    ?>



    ich hoffe ihr könnt mir helfen

    mfg



    Beitrag geaendert: 23.1.2007 18:39:05 von italien06

    Beitrag geaendert: 23.1.2007 18:39:27 von italien06
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Naja, zuerst solltest du in der Tabelle mal eine neue Spalte anlegen, in der dann die IP gespeichert wird.
    Ich denke mal, die Spalte Datum ist ein Timestamp, oder ;)
    Zum Eintragen der IP musst du eigentlich nicht viel hinzufügen:
    $time = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    
    $SQL = 'INSERT INTO Gaestebuch (Datum, ip, Name, Eintrag) VALUES ('$time', '$ip', ''.$_REQUEST['Name'].'', ''.$_REQUEST['Eintrag'].'')';
    mysql_query($SQL, $DatabasePointer);


    Eher wichtig ist allerdings vor jedem neuen Eintrag zu prüfen, ob die IP schon vorhanden ist und besonders wichtig, ob die Sperrzeit schon vorbei ist:
    $time = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    $lock = 7200; //Sperrzeit in Sekunden
    
    $query = mysql_query("SELECT Datum FROM Gaestebuch WHERE ip='$ip'");
    $res = mysql_fetch_array($query);
    if($res['Datum']>=$time-$lock)
    {
     echo "IP-Sperre noch aktiv";
    }else{
     $SQL = 'INSERT INTO Gaestebuch (Datum, ip, Name, Eintrag) VALUES ('$time',   '$ip', ''.$_REQUEST['Name'].'', ''.$_REQUEST['Eintrag'].'')';
     mysql_query($SQL, $DatabasePointer);
    // [der weitere Code]
    }

    Ich denke das sollte so ungefähr gehn.
  4. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    mhmm ich hab alles versucht, aber jetzt wird immer die fehlermeldung
    "Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING" für diese zeile angezeigt :
    $SQL = "INSERT INTO Gaestebuch (Datum, ip, Name, Eintrag) VALUES ('$time',   '$ip', "'.$_REQUEST['Name'].'", "'.$_REQUEST['Eintrag'].'")";
  5. s********n

    Hast du in der Tabelle der Spaltenname Ip oder ip?
    Zudem musst du dich auf '' oder' achten!
    Das Forum kann '' nicht anzeigen!!!
    Ich weiß nicht wo sonst der Fehler liegt...

    Ich wollte dir eigentlich nur davon abhalten ne IP-Sperre einzubauen!

    Es gibt auch andere Wege Spammer davon abzuhalten!

    Falls du wissen willst wie, benutz mal die Forumssuche!!!

    Beitrag geaendert: 24.1.2007 16:24:58 von skate-4fun
  6. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    der spaltenname ist "ip" mit kleinem "i".
  7. s********n

    Ich hab eben noch erwähnt, dass mit den '' und ' was falsch ist!!!

    Du musst da was ändern...!
    Falls du nicht weisst wie, schreib mir ne PN!
  8. ähm das mit der Datenbank ist zwar nett, aber
    für große Datenbanken vl nicht so gut. Weil
    es sehr viele Ressourcen braucht. Was nicht so
    sicher ist aber trotzdem auch immer gut funzt:
    mit $_SESSION's
    also beim eintragen:

    if($_SESSION['input']-time() >= 60*60*10)
    // Dein Code!!
    $_SESSION['input'] = time();




    Beitrag geaendert: 24.1.2007 22:24:14 von sirseven
  9. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    könnte mir jemand das mit den sessions in mein script(s. oben) einbauen?
    ich check das i-wie nich so richtig ^^
    thx schonmal
    mfg
  10. x*****k

    Was macht die ganze IP-Sperre denn für einen Sinn?
    Leute ohne statische IP, brauchen ihren Computer bzw. ihr Modem/Router nur neuzustarten... Danach haben sie ebenfalls eine neue IP...
    Spam wird damit nicht verhindert. Jedoch macht eine Time-Sperre Sinn! :blah:
    mfg
  11. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    wie wäre es, wenn du zunächst alle beiträge liest, bevor du hier einen sinnlosen beitrag verfasst ;)
    im moment sind wir bei der lösung, es mit sessions zu machen und keine ip-sperre !
  12. x*****k


    wie wäre es, wenn du zunächst alle beiträge liest, bevor du hier einen sinnlosen beitrag verfasst ;)
    im moment sind wir bei der lösung, es mit sessions zu machen und keine ip-sperre !


    jo aber ich red halt ned von dem :P
  13. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    lies vorher! im moment geht es um sessions und da hilft so ein beitrag von dir nicht weiter! auch wenn du gulden brauchst um dein minus wegzubekommen solltest du vorher erstmal lesen, worum es im moment eigentlich geht(und nicht nur die überschrift ;) )
  14. Weißt du jetzt eigentlich schon wie du es machen willst?
    Mit Sessions ist natürlich auch ne Möglichkeit, hab ich nur gar nicht dran gedacht, da ich in meinem GB die IP eh mit speichere.
    Zu Code für Sessions:
    In jede Datei die sich "ausführen" lässt (ist zwar nicht das richtige Wort, aber egal), muss am Anfang session_start(); rein. Ich denke bei dir reicht die Datei, die den Eintrag in der Datenbank speichert.
    // session starten
    session_start();
    
    // variablen fetslegen
    $time = time();
    $lock= 60*60; // eine stunde, halten sessions überhaupt so lange?
    
    if(!isset($_SESSION['input']) || $_SESSION['input']<$time-$lock) 
    {
    // wenn session nicht registriert ist oder die sperrzeit vorbei ist, session auf neue zeit setzen und eintrag erlauben
     $_SESSION['input'] = $time;
     $eintragen = true;
    }elseif(isset($_SESSION['input']) && $_SESSION['input']>=$time-$lock){
    // wenn session gesetzt ist und zeit noch nicht vorbei ist, session auf neue zeit setzten und eintrag erlauben
     $_SESSION['input'] = $time;
     $eintragen = false;
    }
    
    if($eintragen == true) // wenn eintragen erlaubt ist
    {
    
     // dein code zum eintragen
    
    }else{
    // wenn eintragen nicht erlaubt ist
     echo "Sperrzeit noch aktiv";
    }

    Hab Code mal kommentiert, hoffe der geht so. Wobei ich mir nicht ganz sicher bin ist, ob Session überhaupt eine Stunde lang aktiv bleiben. Kann sein, dass die automatisch nach 20 min beendet werden.

    ach ja: und keine flames leute, entspannt euch

    Beitrag geaendert: 26.1.2007 15:56:55 von tct
  15. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    okay danke ich werde es gleich mal ausprobieren!
    aber ich habe noch ne frage dazu:
    wenn dann z.b. gerade schon ein eintrag gemacht wurde (sessions) und ein fehler auftritt(das script ohne sessions) werden dann 2 fehlermeldungen ausgegeben, oder muss ich das i-wie beides zusammenführen?

  16. okay danke ich werde es gleich mal ausprobieren!
    aber ich habe noch ne frage dazu:
    wenn dann z.b. gerade schon ein eintrag gemacht wurde (sessions) und ein fehler auftritt(das script ohne sessions) werden dann 2 fehlermeldungen ausgegeben, oder muss ich das i-wie beides zusammenführen?

    Hm versteh ich zwar grad nicht, aber wenn ein Eintrag gemacht wurde, dann ist doch alles toll. Wenn dann auf einer anderen Seite ein Fehler auftritt, hat das ja nichts mehr mit den Sessions zu tun.
    Oder wie meinst du das?
  17. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    also in der datei, die den eintrag einträgt, ist ja einmal das script zum eintragen der daten in die db und dann noch das mit den sessions. und beide geben einen fehler aus, wenn es nicht klappt! und wenn es beides nicht klappt werden 2 fehlermeldungen ausgegeben...oder?!
  18. Du meinst, wenn die Sperrzeit noch nicht abgelaufen ist, wird gesagt, dass der User noch warten muss und dass dann kein Eintrag in die DB gemacht wurde?
    Das sollte eigentlich nicht so sein, denn der Code zum Eintragen in die DB sollte ja nur ausgeführt werden, wenn die Session das erlaubt.
    Also entweder "Fehler" bei der Session oder "Fehler" beim eintragen, beides gleichzeitig sollte eigentlich nicht auftreten.

    Beitrag geaendert: 26.1.2007 16:26:21 von tct
  19. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    hmm ich weiß nicht, wie ich das sessions script mit meinem script zusammen in eine datei packen soll...

    <?
    
    $DatabasePointer=mysql_connect("", "", "");
    mysql_select_db("", $DatabasePointer);
    $time = time();
    
    
    
    
    $SQL = "INSERT INTO Gaestebuch (Datum, Name, Eintrag) VALUES ('$time', '".$_REQUEST['Name']."', '".$_REQUEST['Eintrag']."')";
    
    mysql_query($SQL, $DatabasePointer);
    
    
    
    if(mysql_affected_rows($DatabasePointer)==1)
    
    {
    
    ?>
    
    <center><font face="Verdana" size="2">
    
    Vielen Dank für Ihren Eintrag!<br>
    
    <a href="gaestebuch.php">Zurück</a></center>
    
    <?php
    
    }
    
    else
    
    {
    
    ?>
    
    <center><font face="Verdana" size="2">
    
    Beim Eintragen ist ein Fehler aufgetreten!<br>
    
    <a href="javascript:history.back();">Zurück</a></center>
    
    <?php
    
    }
    ?>



    weil wenn ich diesen code in die if schleife des sessions scripts einbaue kommt ne fehlermeldung wegen der vielen "else"
  20. Das, was du da grade gepostet hast, muss schon in den anderen Code rein und zwar hier
    if($eintragen == true) // wenn eintragen erlaubt ist
    
    {
    
    
    
     // dein code zum eintragen
    
    
    
    }else{

    Und ne Fehlermeldung wär nicht schlecht. "Wegen der vielen else" ist nicht so sehr hilfreich. Wenn der Code keine Fehler hat, ist es egal wie viele else dort stehen.
    Ich will natürlich nicht ausschließen, dass der Fehler in meinem Schnipsel ist, aber ohne Fehlermeldung kann ich gar nichts sagen,

    Ich denke allerdings, dass du den Teil hier
    }elseif(isset($_SESSION['input']) && $_SESSION['input']>=$time-$lock){

    durch ein einfaches }else{ ersetzen kannst.
    Dachte erst das wär so nötig, aber sollte auch ohne gehn.

    Beitrag geaendert: 26.1.2007 17:04:36 von tct
  21. Autor dieses Themas

    italien06

    italien06 hat kostenlosen Webspace.

    also das script zum einfügen des eintrages funzt jetzt ohne probleme nur bekomme ich diese fehlermeldung und einträge können deshalb immer noch ohne limit verfasst werden
    ->
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/***/header.php:10) in /home/***/eintrag-einfuegen.php on line 10

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/***/header.php:10) in /home/***/eintrag-einfuegen.php on line 10

    also ich benutze einen image preloader könnte das daran liegen, weil sonst hab ich nichts, was mit ich damit in verbindung bringen würde.
    aber der preloader ist nicht in der header datei

    Beitrag geaendert: 26.1.2007 17:50:14 von italien06
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!