zisslaweng.de

 Home    CSS    PHP    HTML    JavaScript    Allgemein    Sitemap   exemption-filter

Gähn, noch ein Gästebuch..

..aber eins, das einige nützliche Anforderungen erfüllt.

Besonders wichtig war mir (mal abgesehen von Sicherheitsaspekten), dass ich nicht jeden Tag nachsehen muss, ob irgendein Mist eingetragen wurde.

Moderiert ja, aber unauffällig. Wer etwas einträgt soll es auch sofort sehen können, sonst führt das häufig dazu, dass Einträge mehrfach gemacht werden. Was die Allgemeinheit sehen soll erst nach einer Überprüfung, denn dafür ist rechtlich der Webmaster verantwortlich.

Die Datenbank-Tabelle z_gb erzeugen Sie mit folgendem SQL Befehl.
CREATE TABLE `z_gb` (
  `id` int(11) NOT NULL auto_increment,
  `date` datetime default NULL,
  `name` tinytext,
  `ort` tinytext,
  `mail` tinytext,
  `url` tinytext,
  `rubrik` varchar(32) DEFAULT NULL,
  `sid` tinytext default NULL,
  `comment` text,
  PRIMARY KEY  (`id`),
  KEY `date` (`date`),
  KEY `rubrik` (`rubrik`)
) ENGINE=MyISAM;

Verwendet werden die bereits bekannten Klassen BaseDbMapper und SessionClass. Neu hinzu die Klasse GbDbMapper in der Datei z_gbdbclass.php5.

class GbDbMapper extends BaseDbMapper {

public function get_entries ($sid, $rubrik){
  $sql  = "
  SELECT 
    date_format(date,'%d.%m.%Y %H:%i') as date,
    name, 
    ort, 
    mail, 
    url,
    rubrik, 
    comment 
  FROM z_gb
  WHERE rubrik like '$rubrik' && 
     ( isnull(sid) 
      || sid = '$sid' )
  ORDER BY unix_timestamp(date) desc
  ";
  $result = $this->base_query($sql);
  $this->store_result();
  return $result;
}

public function ins_entry ($date,$name,$mail, $url, $rubrik,
                                    $ort, $comment, $sid) {
  $sql  = "
  INSERT INTO z_gb 
    (date, name, mail, url, ort, comment,sid)
  VALUES ('$date',
    '".$this->real_escape_string($name)."',
    '".$this->real_escape_string($mail)."',
    '".$this->real_escape_string($url)."',
    '$rubrik',
    '".$this->real_escape_string($ort)."',
    '".$this->real_escape_string($comment)."',
    '$sid')
  ";
  return $this->base_query($sql);
 }
}

Für einen neuen Eintrag ins Gästebuch hier vorerst nur die Funktion ins_entry() interessant. Eventuell vorhandene HTML-Tags der Eingaben sind hier bereits entfernt, hier zur Sicherheit noch die Funktion esc_string(), eine Methode der Basisklasse BaseDbMapper.

Der HTML Code nicht besonders aufregend, deshalb nicht gelistet, aber zum Ansehen in der download-Datei enthalten.

Hier nur so viel: die Seite enthält Formularfelder, verwendet wird die POST Methode. Zu Beginn der Seite nach dem Code betreffend Session die Überprüfung, wurde der Submit Button gedrückt? Dann folgt das Auslesen des $_POST Arrays, mindestens Name und Inhalt müssen Werte enthalten. Vom Input der Formularfelder werden mittels strip_tags() eventuell vorhanden HTML Tags entfernt, wesentlich das Speichern selbst in nur 2 Zeilen Code. Beachten Sie, dass die SessionID ebenfalls gespeichert wird. Dazu auf der nächsten Seite mehr.

 $gb = new GbDbMapper();
 ....
 $nr = $gb->ins_entry($date,$name,$mail,$url,'gb',$ort,
     $comment,session_id());

Dann wird noch eine Mail an den Webmaster generiert, der soll dann entscheiden... und das war's auch schon.

 Überprüfen Sie die mit $_POST[] übermittelten Daten! Lesen Sie eine Zusammenfassung der möglichen Maßnahmen im Artikel In der Defensive

Logo