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

Gästebuch selbst erstellen

Weil der ganze "Mist" ja so schwer ist, habe ich das mal in 15 Minuten zusammengeschrieben. Das ist noch nicht optimal, aber vielleicht verstehst du es ja so besser. Aber bitte jetzt nicht nur Copy/Paste, sondern versuche zu verstehen, was da passiert:
Tabelle
Code:
CREATE TABLE `gb` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `email` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
 `date` datetime NOT NULL,
 `message` text COLLATE utf8_unicode_ci NOT NULL,
 `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
 `ip` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
index.php
PHP:
<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Gästebuch</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
  <a class='link' href="add.html">Eintrag hinzufügen</a><br><br>
  <table>
     <tr>
       <th>Datum</th>
       <th>Name</th>
       <th>eMail</th>
       <th>Nachricht</th>
       <th>IP</th>
     </tr>
<?php
    $mysqli = mysqli_connect('localhost', 'user', 'passwort', 'db');
  
    if (mysqli_connect_errno())
      die ("Connect failed: " . mysqli_connect_error());
 
    mysqli_set_charset($mysqli, "utf8");
    
    $query = "Select
                `id`,
                DATE_FORMAT(`date`, '%d.%m.%Y, %h:%i') as mydate,
                `name`,
                `email`,
                `message`,
                `ip`
              from
                `gb`
              order by
                `date` desc";

    $result = mysqli_query($mysqli, $query)
       or die ("MySQL-Error: " . mysqli_error($mysqli));
      
    if (mysqli_num_rows($result))
    {
        $i = 0;
      
        while ($row = mysqli_fetch_assoc($result))
        {
           $style = ($i++ % 2) ? "class='light'" : "class='dark'";
          
           echo "<tr>
                  <td $style>" . $row['mydate']    . "</td>
                  <td $style>" . htmlentities($row['name'], ENT_QUOTES, "UTF-8") . "</td>
                  <td $style>" . htmlentities($row['email'], ENT_QUOTES, "UTF-8")   . "</td>
                  <td $style>" . nl2br(htmlentities($row['message'], ENT_QUOTES, "UTF-8")) . "</td>
                  <td $style>******************</td>
                </tr>";
        }
    }
    else
      echo "<tr>
             <td colspan='5'>Keine Einträge in der Datenbank vorhanden
            </tr>\n";
?>
   </table>
  </body>
</html>
add.html
Code:
<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Gästebuch</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
  <h1>Eintrag hinzufügen</h1>
    <form action="save.php" method="post">
      <fieldset>
        Name:<br>
        <input type="text" name="name" required><br>
        eMail:<br>
        <input type="email" name="email" required><br>
        Eintrag:<br>
        <textarea name="message" cols='80' rows='10' required></textarea><br><br>      
        <input type="submit" value="Submit">
      </fieldset>
    </form>
  </body>
</html>
save.php
PHP:
<?php
    if (isset($_POST['name']))
    {
       $mysqli = mysqli_connect('localhost', 'user', 'passwort', 'db');
       if (mysqli_connect_errno())
         die ("Connect failed: " . mysqli_connect_error());
  
       mysqli_set_charset($mysqli, "utf8");
      
       $query = "Insert
                    into
                      `gb`
                         (`date`, `name`, `email`, `message`, `ip`)
                     values
                        (now(), '%s', '%s', '%s', '%s')";
                      
       $query = sprintf($query, mysqli_real_escape_string($mysqli, $_POST['name']),
                                mysqli_real_escape_string($mysqli, $_POST['email']),
                                mysqli_real_escape_string($mysqli, $_POST['message']),
                                $_SERVER['REMOTE_ADDR']);
       $result = mysqli_query($mysqli, $query)
          or die ("MySQL-Error: " . mysqli_error($mysqli));
        
       header("Location: index.php");
    }
?>
style.css
Code:
  html, body {
    margin: 10px;
    padding: 10px;
    background-color: #eee;
  }
  main {
    width: 90%;
    padding: 0px;
    margin: 0px auto 20px auto;
  }
  h1 {
    text-align: center;
  }
  table {
    width: 90%;
    margin: 0px auto;
    border-collapse: collapse;
  }
  td, th {
    padding: 5px;
    text-align: left;
    border: 1px solid #000000; border-collapse: collapse;
  }
  th { bachground.color: #c0c0c0; }
  .dark {
    background-color: #aaa;
  }
  .light {
    background-color: #ccc;
  }
  .form_wrapper {
    width: 90%;
    margin: 0px auto;
  }
  input#nic_name {
    width: 100%;
    max-width: 300px;
  }
  textarea {
    display: block;
    width: 100%;
    height: 15vh;
    margin: 0px auto;
  }
 
@m.scatello meistens sind Beispiele doch sehr hilfreich.Das nächste Script was solche Speicherungen in der Db haben ,sollte ich jetzt wohl auch hin bekommen.
Mußte zwar erst etwas rum testen weil es nicht klappen wollte ,aber jetzt läuft alles.
Habe mitlerweile auch geschafft eine 90 Sekunden sperre einzubauen ,fals einer mit der gleichen id spamen will.
Jetzt dachte ich noch an vor und zurück Button ,so das immer nur 20 Einträge angezeigt werden,und dann ist das Hauptbuch ja fertig (Bis auf Styling ) ,aber da muß ich mir noch was einfallen lassen weil styling und layout nicht so mein ding ist.
Dann überlege ich noch eine böses Wort sperre einzubauen und vieleicht noch ein Admin bereich.
Obwohl ich den ja eigentlich über der db schon habe. Was fällt euch den noch ein was in so ein Gästebuch rein muß?
Frage zu den Code.
Code:
CREATE TABLE `gb` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `email` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
 `date` datetime NOT NULL,
 `message` text COLLATE utf8_unicode_ci NOT NULL,
 `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
 `ip` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Ich hatte den in der Db Kopiert und dann wurde die Datenbank erstellt ,ohne das man jede Spalte da selber erstellen muß.
Hat dieser Code ein bestimmten Namen? Gibt es da so was wie ein Generator ,der bei den erstellen des Code hilft?

Gehöhrt das noch zu php? Oder ist das schon eine andere programier sprache ?
 
Was fällt euch den noch ein was in so ein Gästebuch rein muß?
  1. Zeilenumbrüche beachten
  2. Spam-Schutz
  3. IP-Sperre
  4. Bad-Word Liste
  5. Freigabe von Beiträge durch den Admin
  6. Bearbeiten durch den Admin
  7. Löschen durch den Admin
Schutz vor Spam-Bots fehlt da noch in der Liste.
Hat dieser Code ein bestimmten Namen? Gibt es da so was wie ein Generator ,der bei den erstellen des Code hilft?
Das ist SQL (Structured Query Language), die Sprache von Datenbanken. Zum Verwalten von Datenbanken ist phpMyAdmin nicht schlecht.

Aber jetzt sind wir genau an dem Punkkt angekommen, wo wir eigentlich nicht hin sollten. Du hast meinen Quellcode per Copy/Paste übernommen und fertig. Richtig beschäftigt hast du dich doch bestimmt nicht damit und somit nichts gelernt.
 
Richtig beschäftigt hast du dich doch bestimmt nicht damit und somit nichts gelernt.
Als erstes habe ich copy paste gemacht zum testen ob und wie es läuft.
dann habe ich zumindest das meiste verstanden. auser dem Structured Query Language Code.
Dann habe ich noch kleinigkeiten geändert.
Wie gesagt wenn ich ich sowas nochmal brauche kriege ich es wohl diesmal selber hin.

Schutz vor Spambots?
Habe ich die mit der 90 Sekunden sperre nicht ausgeschlossen ?
Ausser wenn der Bot wartet,dann kann er weiter spamen.
Wie kann man den Bots noch ausschliesen ?
Ich denke vieleicht daran das 2 gleiche Einträge hintereinander geblockt werden
 
Sieht OK aus.

Aber beachte, in Tutorials wird meist aus Bequemlichkeit "Select *" geschrieben, was du nicht machen solltest.
 
Zurück
Oben