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

Gästebuch selbst erstellen

basti1012

Senior HTML'ler
Nach einen kleinen a...tritt und etwas überlegen ,habe ich mir überlegt ein eigenes Gästebuch zu erstellen.
Ich hatte mir mal eins gedownloadet ,aber erstens ist es nicht so schön, es ist Werbung drinne,und das fremde Copyright nervt.
Könnte man zwar ändern,aber wie wir alle wissen ist es ja nicht erlaubt.
Deswegen habe ich angefangen das jetzt selbst zu erstellen.
Als erstes möchte ich das Script fertig stellen und solange bis es Fertig ist und ich es checke in einer TXT schreiben.
Wenn das Script fertig ist ,muß ich etwas lesen gehen damit ich die Datenbanken verstehe.
Aber soweit bin ich noch nicht.
Bis jetzt funktionert mein Script zwar ,aber nicht gut.
Sobald man einen Zeilensprung macht (Enter drückt ) wird vom Script eine neue Nachricht verschickt .

Dann muß die Ausgabe andersrum sein,also das die letzte Nachricht nach oben kommt.
Und es ist geplant die Seiten Anzahl zb auf (20 Einträge ) zu begrenzen ,damit man nicht ewig Scrollen muß.

So aber erstmal zum Code damit ihr was zum lachen habt.
Erstesn das Html Script Sender
Code:
<!DOCTYPE HTML>
<html>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<head>
<style>
body{
background:#123456;
}
#content{
padding-top:0px;
width:100%;
height:100%;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: center;
align-content: stretch;
align-items: center;
}
label{
width:30%;
font-size:25px;
font-weight:500;
color:white;
text-align:center;
}
input{
height:40px;
width:300px;
font-size:30px;
color:black;
}
textarea{
width:300px;
height:100px;
}
#ausgabe{
border-top:10px solid black;
border-left:10px solid black;
background:white;
width:80%;
margin-top:20px;
min-height:200px;
height:500px;
overflow-y:auto;
overflow-x:hidden;
box-shadow:10px 10px 10px black;
margin-bottom:10px;
}
.feld{
width:100%;
height:auto;
border:2px solid black;
}
.oben{
width:100%;
height:25px;
background:grey;
border:1px solid black;
}
.datum{
margin:0px;
padding-left:10px;
float:left;
margin-top:5px;
}
p{
margin:2px 10px 2px 10px;

}
.nname{
float:right;
margin:0px;
padding-right:10px;
margin-top:5px;
}
.ttext{
width:100%;
min-height:50px;
max-height:200px;
overflow:auto;
}
h1{
width:100%;
text-align:center;
text-decoration:underline;
color:white;
margin:0;
padding:0;
}


#spinner {
position: fixed;
top: 50%;
left: 50%;
margin-left: -50px;
margin-top: -50px;
text-align:center;
z-index:1234;
overflow: auto;
width: 100px;
height: 102px;
display:none;
}
</style>
</head>
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
<body>
<div id="spinner" class="spinner">
<img src="http://sampsonresume.com/labs/pIkfp.gif">
</div>
<div id="wrapper">
<header><h1>Mein Gästebuch</h1></header>
<div id="content">
<div id="ausgabe">
<?php
$speicherort = $_SERVER['DOCUMENT_ROOT']."/gast.txt";
$daten = array();
if (file_exists($speicherort)){
$daten = file($speicherort, FILE_IGNORE_NEW_LINES);
$count1 = 0;
while(isset($daten[$count1])) {
$daten[$count1] = explode(",", $daten[$count1]);
$count1++;
}
}

$count1 = 0;
while(isset($daten[$count1][0])){
$datum = str_replace('"', "", $daten[$count1][0]);
$nick = str_replace('"', "", $daten[$count1][4]);
$text = str_replace('"', "", $daten[$count1][5]);
echo "<div class='feld'><div class='oben'><h5 class='nname'>$nick</h5><h5 class='datum'>$datum</h5></div><p class='textt'>$text</p></div>\n";
$count1++;
}
?>

</div>
<label>Dein Name( Nickname )</label><br>
<input type="text" id="name" name="name" value="" maxlength="25"><br>
<label>Deine Nachricht</label><br>
<textarea id="sms" name="sms"value=""placeholder="Deine Message...."></textarea><br>
<input type="button" id="senden" value="Eintragen"><br>
<div id="reture">
Ip: <?php echo $ip = $_SERVER["REMOTE_ADDR"];?> wird nicht angezeigt
</div>
</div>
<script>
$('#senden').click(function(){
$('#spinner').css('display','block');
wer=$('#name').val();
smstext=$('#sms').val();

$.ajax({
type: "POST",
url: "mein-eigenes-gastebuch-speier-php.php",
data: {name: wer, sms:smstext},
success: function(data){
$('#spinner').css('display','none');
$('#reture').html(data);
}
});
});
</script>
</div>
</body>
</head>

Das ist der Php Teil


Code:
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);

$dateiname = $_SERVER['DOCUMENT_ROOT']."/gast.txt"; //Speicherort der .csv Datei
$datum_zeit = date("d.m.Y H:i:s");
$ip = $_SERVER["REMOTE_ADDR"];
$browser = $_SERVER["HTTP_USER_AGENT"];
$format = "csv";

$name    = $_POST['name'];
$sms    = $_POST['sms'];
echo "Dein Name : ".$name."<br>";
echo "Deine Nachricht : ".$sms."<br>";
echo "Gesendet am : ".$datum_zeit."<br>";
echo "Mit der Ip : ".$ip."<br>";

if (isset($name)) {
      $header = array("Datum", "Iptown",  "IP", "Seite", "Browser");
      $infos = array($datum_zeit, $ip , $browser , $name , $sms);
      if($format == "csv") {
            $eintrag= '"'.implode('", "', $infos).'"';
      } else {
            $eintrag = implode("\t", $infos);
      }
      $write_header = !file_exists($dateiname);
      $datei=fopen($dateiname,"a");
      if($write_header) {
                  $header_line = '"'.implode('", "', $header).'"';
            fputs($datei, $header_line."\n");
      }
      fputs($datei,$eintrag."\n");
      fclose($datei);
}else{
return;
}

?>
 
Ein paar Hinweise für den Anfang
  1. Du benutzt die falschen BBCodes, es gibt welche für PHP hier im Forum
  2. Rücke deinen Quellcode vernünftig ein.
  3. CSS-Code gehört in eine externe Datei.
  4. Statt while(isset($daten[$count1])) nutze foreach
  5. Trenne HTML und PHP soweit wie möglich. Das Lesen der Daten an den Anfang schieben
  6. Wozu brauchst du den Header in der Datei?
Aber was mich schon wieder nervt, warum um alles in der Welt baust du schon wieder Spielereien ein?!?!?! Diesen ganzen JavaScript-Sch.... kannst du einbauen, wenn du PHP kannst, aber jetzt noch nicht. Informiere dich über Affenformulare, lerne den Umgang mit Datenbanken, das ist leichter als du denkst! Mit einer Datenbank ist das Sortieren nach Datum kein Problem, Pagination, also x Beiträge pro Seite, kann man mit Datenbanken auch relativ leicht umsetzen.

Woran du ebenfalls denken solltest:
  1. Eingabe von HTML-Sonderzeichen berücksichtigen
  2. Zeilenumbrüche beachten
  3. Span-Schutz
  4. IP-Sperre
  5. Bad-Word Liste
  6. Freigabe von Beiträge durch den Admin
  7. Bearbeiten durch den Admin
  8. Löschen durch den Admin
Ich habe so den Eindruck, dass du einfach mal losgelegt hast, ohne dir vorher Gedanken darüber zu machen, wie man soetwas aufbaut. Für dich sind die Spielereien mal wieder wichtiger.
 
Css kommt später in extra Datei wenn ales Fertig ist,weil ich keine Lust habe ewig 3 Datein auf zu haben.
heder,nav und so weiter brauche ich weil das gästebuch nicht das einzigste auf der Seite sein soll.

Javascript habe ich weil ich sonst nicht weiß wie ich die Daten zum Php bekommen soll,auser submit button,doch nach den Senden springt er immer auf einer anderen Seite,keine Ahung wie man das umgeht.
zu 1-8 ,soweit denke ich noch nicht.Erstmal sollte es laufen bevor ich sowas einbaue.
Beim Js schreiben mache ich auch erst eins Fertig und wenn das läuft wird das nächste eingebaut.
Vieleicht macht ihr das anders und baut alles aufeinmal rein,aber ich beginne mit eins und wenn das geht kommt Punkt 2.

Auserdem was für Spielerrein. Funktioniert doch nix?
 
Css kommt später in extra Datei wenn ales Fertig ist,weil ich keine Lust habe ewig 3 Datein auf zu haben.
Sorry, aber diese Argumentation ist lächerlich!

Javascript habe ich weil ich sonst nicht weiß wie ich die Daten zum Php bekommen soll,auser submit button
Aber genau so fängt man an!

doch nach den Senden springt er immer auf einer anderen Seite,keine Ahung wie man das umgeht.
Stichwort Affenformular

zu 1-8 ,soweit denke ich noch nicht.Erstmal sollte es laufen bevor ich sowas einbaue.
Dir ist aber klar, dass ein nachträgliches Ranstückeln meist schwerer ist, als wenn man sich sofort Gedanken darüber macht.

Beim Js schreiben mache ich auch erst eins Fertig und wenn das läuft wird das nächste eingebaut.
Verzichte komplett auf JavaScript! Wenn dein Gästebuch sauber funktioniert, dann kannst du deine Spielereien einbauen, aber nicht schon am Anfang.

Wenn man bei jedem Posting von dir hier diskutieren muss, was für einen Anfänger besser ist, wirst du auf meine Hilfe verzichten müssen, denn das nervt.
 
Du machst dir das Leben unnötig schwer.

Du solltest hier nur ein PHP Dokument erstellen, das sich über das 'action' Attribut im <form...> Tag selbst aufruft. Schau doch mal, was du unter dem Stichwort 'Affenformular' findest.

Es könnte ggf Sinn machen mit 'include ('blablabla.php'), einzelne Scripte (zB das Einlesen, das Speichern...) in das Hauptdokument einzubinden.

Du solltest in diesem Dokument eine PHP Session nutzen und dann alle Variablen, die Bestand haben sollen, als $_SESSION['variabel_name'] definieren. Schau doch mal, was du zu den Begriffen 'PHP Session' und 'Session Variablen' findest.

Schmeiß (zunächst) dieses ganze JavaScript raus! Das brauchst du nicht.

Nutze ein normales HTML Formular für deine Dateneingabe und Übermittlung
HTML:
    <form name="eingabe_form" action="ich_rufe_mich_selber_auf.php" method="post">
      <label for="nic_name">Dein Name</label>
      <input type="text" id="nic_name" name="name"><br>
      <label for="dein_text">Dein Text</label>
      <textarea id="dein_text" name="text"></textarea><br>
      <input name="speichern" type="submit" value="Eintrag speichern">
    </form>

Es sollte irgendwie eine logische und nachvollziehbare Ablaufstruktur in dem Dokument sein.
So was wie ...
PHP:
<?php session_start();
if(isset($_POST['name']) and isset($_POST['text']))
 {/*was auch immer dann zu tun ist*/}
if(!isset($_SEESION['gb_inhalte']))
 {/*was auch immer dann zu tun ist, zB einlesen der EIntrage*/}

/*was auch immer hier noch an PHP Scripten notwendig ist */

?>
Dann den HTML Teil...
 
Das problem mit der Enter Taste bleibt immer noch .Sobald ein Enter im Text vorkommt schmeißt Php ein Fehler raus .Kann man jetzt sehen wenn man unten im Gästebuch kuckt.Die unteren Beiträge hatten ein/mehrere Enter
 
Dann hast du wohl in Zeile 197 und 198 einen Fehler.
 
Das ist die Zeile.
Code:
     echo "<div class='feld'><div class='oben'><h5 class='nname'>".$daten[$count1][2]."</h5><h5 class='datum'>".$daten[$count1][0]."</h5></div><p class='textt'>".$daten[$count1][3]."</p></div>\n";

Nur ohne Enter macht die Zeile keine Probleme
 
Und wir raten jetzt, woher $daten[$count1][2] kommt?

Nur um dir mal zu zeigen, wie einfach es mit einer Datenbank wäre, hier das Anzeigen der Einträge als simples Beispiel:
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>
  </head>
  <body>
  <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', 'datenbank');
   
    if (mysqli_connect_errno())
      die ("Connect failed: " . mysqli_connect_error());
     
    $query = "Select
                `id`,
                `date`,
                `name`,
                `email`,
                `message`,
                `ip`
              from
                `entries`
              order by
                `date` desc";

    $result = mysqli_query($mysqli, $query)
       or die ("MySQL-Error: " . mysqli_error($mysqli));
     
    if (mysqli_num_rows($result))
    {
        while ($row = mysqli_fetch_assoc($result))
        {
           echo "<tr>
                  <td>" . $row['date']    . "</td>
                  <td>" . htmlentities($row['name'], ENT_QUOTES, "UTF-8") . "</td>
                  <td>" . htmlentities($row['email'], ENT_QUOTES, "UTF-8")   . "</td>
                  <td>" . nl2br(htmlentities($row['message'], ENT_QUOTES, "UTF-8")) . "</td>
                  <td>" . $row['ip']      . "</td>
                </tr>";
        }
    }
    else
      echo "<tr>
             <td colspan='5'>Keine Einträge in der Datenbank vorhanden
            </tr>\n";
?>
   </table>
  </body>
</html>
 
Und noch ein wichtiger Hinweis für dich:

Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
Mir kommt es so vor das er den Zeilensprung als array liest.Da muß man wohl beim speichern was ändern,weil bei der Ausgabe macht er ja alles richtig
 
Ich kann machen was ich will.Sobald ein Zeilenumbruch drinne ist kommen die Fehler.Ohne Zeilenumbruch läuft es ja.
Fals einer nach Code fragt ,ich bin wieder am anfang angekommen.
#post1 nur ohne JS
 
Replace doch mal vor dem Speichern alle \n durch <br>.
hatte ich versucht,aber er erkennt den zeilenumbruch irgendwie nicht habe mit \n\t <br> versucht aber nix hat geklappt . Glaube aber das es an der Ausgabe liegt von Php Code.Hatte die Ausgabe mit JS versucht das klappte besser.Also mache ich irgendwas da Falsch.Aber keine Ahnung was
 
Wie hast du versucht die Zeilenumbrüche (\n) aus dem eingegebenen Text herauszubekommen... klappt irgendwie nicht ist keine wirkliche Aussage.
 
Zurück
Oben