• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Gästebuch

Status
Für weitere Antworten geschlossen.

haddi

Neues Mitglied
Hallo,
brauch drigend Hilfe, und zwar habe ich ein (einfaches, fast zu einfach) gästebuch erstellt -> Guckst du. Und da ist jetzt des Problem, dass ich eine Reload sperre als spamschutz eingebaut habe, nun, es geht nicht. Normal sollte es ja die sekunden an die reload.txt senden, aber in reload.txt steht nichts?
Könnt ihr mir bitte Helfen?
Anbei die index.php.
Anhang anzeigen html.txt

**Edit: Sogar wenn man in den Quellcode anschaut, zeigt es ja die Sekunden an, oder was das ist:
HTML:
    <h1>Mein Gästebuch</h1>
    <form action="/gaestebuch/index.php" method="post">

          <input type="hidden" name="uw" [b]value="1161981270"[/b]>
      Dein Text:<br>

Bin schon auf eure Antworten gespannt.
 
Für nen Gästebuch, zumindest für nen zu einfaches GB, brauchste ne DB. Du kanns einfach ne Reloadsperre per IP oder, wenne keine DB hastm mit Cookies machen.

Ich sehe bei ner Reloadsperre kein Problem.
 
ok, werde mich mal umschauen, danke.
aber im buch, dass ich habe, steht es aber auch so drinne.
 
Zuletzt bearbeitet:
nein wills ja selber machen!
ich will vorerst keine DB benutzen, will erstmal so klarkommen ;heart

Edit: Habe es ein wenig verschönert und (versucht) eine IP Sperre einzubauen.
Habe mal gegoogelt und habe folgendes gefunden:
PHP:
<?php
// Speicherung der Daten in einer Datei
  function schreiben($datei,$mode){

    $fp = @fopen($datei,$mode);
    flock($fp,2);
    fwrite($fp,$_SERVER["REMOTE_ADDR"]."|".time()."\n");
    flock($fp,3);
    fclose($fp);

  }
  function ip_sperre() {

    // Einstellungen
    $reloadlogdatei = "reload.txt";
    $anzahleintraege = 1;
    $zeitlimit = 60; // in Sekunden

    // Prüft, ob Datei existiert => ansonsten Erstellen
    if(!file_exists($reloadlogdatei)) {
      $datei = fopen($reloadlogdatei,"w+");
      fclose($datei);
    }
    $fp = file($reloadlogdatei);
    $size = sizeof($fp);

    // Beschreibt die Datei, wenn Liste voll
    if($size >= $anzahleintraege){
      schreiben($reloadlogdatei,"w");
    // Prüft, ob eine IP in der Liste steht
    } else {

      for ($i=0;$i<=$size;$i++) {
        $zeile = explode("|",$fp[$i-1]);
        // IP wird gefunden
        if ($zeile[0] == $_SERVER["REMOTE_ADDR"] AND $zeile[1] > (time()-$zeitlimit)){
          $ausgabe = true;
        // IP wird nicht gefunden
        } else  {
          $ausgabe = false;
        }
      }
      // Protokolliert die IP-Adresse (schreibt)
      schreiben($reloadlogdatei,"a+");
    }
    return $ausgabe;
  }

  // Hauptaufruf des Programms
  if(ip_sperre()==false) echo "Zugriff erlaubt";
  else echo "IP wurde gefunden";
?>

aber wenn ihr auf das gästebuch schaut, und einen eintrag schreibt, und dann aktualisiert, schreibt der jedes mal einen eintrag, obwohl es die ip in reload.txt gespeichert hat.
In der sperre steht, sowie ich das jetzt verstehen konnte, 1 eintrag innerhalb 1minute schreiben, was geht da nicht?
 
Zuletzt bearbeitet:
Gästebuch²

Hallo,
jetzt habe ich es mit mysql gemacht. :-P
Nun habe ich als erstes das Script gemacht, welches die einträge anzeigen soll.
Nun heißt es,
Parse error: parse error, unexpected '>' in C:\xampp\htdocs\haddis_book\index.php on line 35
.

hier die index.php
PHP:
<body>
    <div style="width: 600px">
      <?php
        @mysql_connect("xxx", "xxx", "xxx") or die("Verbindung zur Datenbank ist gescheitert!");
        @mysql_select_db("xxx") or die ("Datenbankzugriff gescheitert!");
        $sql1 = "SELECT * FROM eintraege";
        $sql2 = "SELECT * FROM eintraege ORDER BY id DESC LIMIT 0, 4";
        $result1 = mysql_query($sql1);
        $zeilen = mysql_num_rows($result1);
        $result2 = mysql_query($sql2);
        
        echo "<p>Anzahl der Eintr&auml;ge: $zeilen</p>\n";
        
        while($row = mysql_fetch_assoc($result2)) {
          echo "<p><strong>1.</b>" .
            " <b>" . htmlspecialchars($row["Name"]) . "</b> " .
            "(" . htmlspecialchars($row["Wohnort"]) .
            "(" . htmlspecialchars($row["Email"]) .
            "(" . htmlspecialchars($row["Homepage"]) .
            "))).:Schrieb am " .
            "<strong>" . $row["Datum"] . "</strong>:</p>
//Line 35"<p>" . nl2br(htmlspecialchars($row["Eintrag"])) .
            "</p><hr>\n";
        }
        mysql_close();
      ?>
    </div>
anbei noch ein screenshot von phpmyadmin:
http://www.directupload.net/images/061028/uVRBEOY2.jpg

was meint der? wo ist da der fehler in linie 35
Habe das skript schon mehrfach geändert und durchgeschaut, ohne erfolg.
Es ist bestimmt nur wieder einer meiner leichtsinssfehler ;ugl
freue mich schon auf eure antworten

Themen zusammengeführt - Bitte demächst nur ein Thema (boehseronkel)
 
Zuletzt bearbeitet von einem Moderator:
Du hättest nur einmal einen Syntax-highlighter gebraucht, dann hättest du den Fehler sofort gesehen:

PHP:
<body>
    <div style="width: 600px">
      <?php
        @mysql_connect("xxx", "xxx", "xxx") or die("Verbindung zur Datenbank ist gescheitert!");
        @mysql_select_db("xxx") or die ("Datenbankzugriff gescheitert!");
        $sql1 = "SELECT * FROM eintraege";
        $sql2 = "SELECT * FROM eintraege ORDER BY id DESC LIMIT 0, 4";
        $result1 = mysql_query($sql1);
        $zeilen = mysql_num_rows($result1);
        $result2 = mysql_query($sql2);
        
        echo "<p>Anzahl der Eintr&auml;ge: $zeilen</p>\n";
        
        while($row = mysql_fetch_assoc($result2)) {
          echo "<p><strong>1.</b>" .
            " <b>" . htmlspecialchars($row["Name"]) . "</b> " .
            "(" . htmlspecialchars($row["Wohnort"]) .
            "(" . htmlspecialchars($row["Email"]) .
            "(" . htmlspecialchars($row["Homepage"]) .
            "))).:Schrieb am " .
            "<strong>" . $row["Datum"] . "</strong>:</p>";
//                       Fehlte ein Anführungszeichen --^ 
//Line 35"<p>" . nl2br(htmlspecialchars($row["Eintrag"])) .
            "</p><hr>n";
        }
        mysql_close();
      ?>
    </div>

/E: Du solltest zudem htmlspecialchars verwenden, bevor du Einträge in die DB packst.
 
mensch bin ich blöd. wie ich schon geschrieben hatte :oops: :D .
Danke.
Aber jetzt zeigt der mir den text nicht an?? :oops:
PHP:
      <?php
        @mysql_connect("localhost", "root", "21531877") or die("Verbindung zur Datenbank ist gescheitert!");
        @mysql_select_db("haddis_book") or die ("Datenbankzugriff gescheitert!");
        $sql1 = "SELECT * FROM eintraege";
        $sql2 = "SELECT * FROM eintraege ORDER BY id DESC LIMIT 0, 4";
        $result1 = mysql_query($sql1);
        $zeilen = mysql_num_rows($result1);
        $result2 = mysql_query($sql2);
        
        echo "<p>Anzahl der Eintr&auml;ge: $zeilen</p>\n";
        
        while($row = mysql_fetch_assoc($result2)) {
          echo "<p><strong>1.</strong>" .
            " <b>" . htmlspecialchars($row["Name"]) . "</b> " .
            "(" . htmlspecialchars($row["Wohnort"]) .
            "(" . htmlspecialchars($row["Email"]) .
            "(" . htmlspecialchars($row["Homepage"]) .
            ")<br>.:Schrieb am " .
            "<strong>" . $row["Datum"] . "</strong>:</p>";
            "<p>" . nl2br(htmlspecialchars($row["Eintrag"])) .
            "</p><hr>\n";
        }
        mysql_close();
      ?>

haddis_book2.jpg

//Sowie den <hr>
 
PHP:
"<strong>" . $row["Datum"] . "</strong>:</p>";
Da beendest du das echo mit dem Semikolon. Da muss ein Punkt hin:

PHP:
<?php
        @mysql_connect("localhost", "root", "21531877") or die("Verbindung zur Datenbank ist gescheitert!");
        @mysql_select_db("haddis_book") or die ("Datenbankzugriff gescheitert!");
        $sql1 = "SELECT * FROM eintraege";
        $sql2 = "SELECT * FROM eintraege ORDER BY id DESC LIMIT 0, 4";
        $result1 = mysql_query($sql1);
        $zeilen = mysql_num_rows($result1);
        $result2 = mysql_query($sql2);
        
        echo "<p>Anzahl der Eintr&auml;ge: $zeilen</p>\n";
        
        while($row = mysql_fetch_assoc($result2)) {
          echo "<p><strong>1.</strong>" .
            " <b>" . htmlspecialchars($row["Name"]) . "</b> " .
            "(" . htmlspecialchars($row["Wohnort"]) .
            "(" . htmlspecialchars($row["Email"]) .
            "(" . htmlspecialchars($row["Homepage"]) .
            ")<br>.:Schrieb am " .
            "<strong>" . $row["Datum"] . "</strong>:</p>".
            "<p>" . nl2br(htmlspecialchars($row["Eintrag"])) .
            "</p><hr>\n";
        }
        mysql_close();
      ?>
 
Dazu musste einen regex machen, der prüft ob ein http:// am anfang des Links ist. Ich kenn mich nicht so sehr mit Regex aus, ließ dir dazu am besten mal das hier durch: http://tut.php-q.net/regex.html


Das ganez könnte so in der Richtung aussehen:
PHP:
if(!preg_match('=^http://.+?=', $row['homepage'])
$row['homepage'] = "http://".$row['homepage'];

Bin aber kein Experte auf dem Gebeit von Regulären Ausdrücken, also nicht hauen wenns falsch ist :o


Oder meinste jetzt die automatische Umwandlung von Links innerhalb von Einträgen?
 
Also ich würd das mit Explode machen ;ugl (Hängt auch damit zusammen, dass ich RegEx noch nicht angeschaut habe)
 
PHP:
if(strtolower(substr($row['Homepage'], 0, 7)) == "http://") {
                // Wenn der Teilstring gleich "http://" ist, so
                // soll er den Link ohne "http://" erzeugen, denn
                // der Steht ja schon drin
                echo " (<a href=\"".$row['Homepage']."\">Homepage</a>)";
            } else {
                // Wenn nicht, so soll er das "http://" manuell hinzufügen
                echo " (<a href=\"http://".$row['Homepage']."\">Homepage</a>)";
http://tut.php-q.net/guestbook.html#u3

Mfg
Alti
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben