InternInhaltsverzeichnisGlossarBausteineLinklisteTutorialsKommentare

Thema: Gästebuch Artikel anzeigen

Peter G. schrieb am Donnerstag, den 25 November 2021 #81
Hallo - Guten Morgen.

Wie bekomme ich das Gästebuch via php include in eine fertige Seite geladen?
Ich möchte, dass bei "Eintragen" und "Vorschau" etc. vorhandener Head Frame, Menü und Footer aus den fertigen BEreichen immer mit übernommen wird.

Mit <?php include "gb.php"; ?> funktioniert nur die Startseite.
Da der neue Eintrag über "print" dargestellt wird fehlen natürlich unser HEader und Footer.

Habt ihr einen Lösungsansatz?

Danke
L.G.
Peter
Werner schrieb am Donnerstag, den 25 November 2021 #82
Hallo,
und warum nicht Header und Footer mit Include einbinden?
» werner-zenk.de/tipps/seiten_dynamisch_mit_php_erstellen.php
Ich habe das bei über 800 Dateien so gemacht und funktioniert ohne Probleme.
Peter G. schrieb am Donnerstag, den 25 November 2021 #83
Hallo Werner.

Header und Footer einbinden ist schon klar.
Aber es sind auch noch einige wesentliche DIVS die Teile aus dem Body beinhalten und die unbedingt mit dargestellt werden sollen/müssen.
Und da fängt das Problem an.
Dazu kommt, dass in <body> Bereich auch noch etliche Dinge über eine CSS Datei aufbereitet werden.

Hab keinen Plan wie ich das dann alles zusammenbringen könnte.
Es sei denn im Bereich "print" diese Parts mit includieren?
Werner schrieb am Freitag, den 26 November 2021 #84
Am einfachsten wäre natürlich ein iFrame zu verwenden.

Zum Thema Include, du kennst deine Verzeichnisse am besten und weist, wo was eingebunden wird.

Im Gästebuch müssen dann sämtliche Pfade, relativ von der Datei (in der diese eingebunden wird) angegeben werden. Das betrifft nicht nur PHP-Include, sondern auch externe CSS und JavaScript Dateien.
Ich spreche hier vom MySQL-Gästebuch, das SQLite-Gästebuch ist da schwieriger anzupassen, weil auch der Dateipfad zur Datenbank-Datei geändert werden muss.

Im Grunde kann man auch das Gästebuch so ändern das es zum Rest (des Designs) der Homepage passt.
Adrian Edelmann schrieb am Dienstag, den 14 Dezember 2021 #85
Gibts ne Möglichkeit die Vorschau wegzulassen und direkt die Chapta und den Button senden aufzurufen. Ohne diese Schleife über:

<input class="btn btn-primary" type="submit" name="vorschau" value="Vorschau" formnovalidate="formnovalidate"> &emsp;
' . ($_SERVER["REQUEST_METHOD"] == "POST" ? '<input class="btn btn-primary" type="submit" name="submit" value="Feedback senden">' : '') . '
</p>
</form>';


// Vorschau
if (isset($_POST["vorschau"]) &&
strlen($_POST["name"]) >= 1 &&
strlen($_POST["nachricht"]) >= 1) {
print '<fieldset class="vorschau"><h3>Vorschau</h3>' .
'<b>' . $name . '</b>' . ' ' .
(bewertung($bewertung, $STERN_NUMMER, $STERNE_ANZAHL)) . '<br>' .
'<br>' . code($nachricht, true) . '<br>' .
($FORMFELD_EMAIL == "ja" && $email != "" ? '<br>E-Mail: <em>' . $email . '</em><small style="color: rgb(81, 142, 11)"><br>Deine Email wird im Gästebuch nicht angezeigt</small> ' : '') .
($FORMFELD_HOMEPAGE == "ja" && $homepage != "" ? '<br>Homepage: <a href="' . $homepage . '" target="_blank">' . $homepage . '</a>' : '') .
'</fieldset><br><br>';
}

Wie müsste ich den Code umschreiben?

Oder zumindest die setfield class vorschau über dem Senden Button zu plazieren, also innerhalb des Formulars?
Werner schrieb am Dienstag, den 14 Dezember 2021 #86
Hier die Änderung für das SQLite-Gästebuch (gb.php):

Diesen Beitrag vollständig anzeigen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
<!DOCTYPE html>
<html>
 <head lang="de">
  <meta charset="UTF-8">
  <title>Gästebuch</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="gb_style.css">
 </head>
<body>

<h2>Gästebuch</h2>

<?php
/*
 * Gästebuch - gb.php (utf-8)
 */

include "gb_konfig.php";

if (!isset(
$_GET["eintragen"])) {

 print 
'<p><a href="gb.php?eintragen">In das Gästebuch eintragen</a></p>';

 
// Anzahl der Seiten berechnen
 
$AnzahlDatensaetze $db->query("SELECT COUNT(*) FROM `" $TABLE_PREFIX "_gaestebuch` WHERE `anzeige` = '1'")->fetchColumn(0);

 if (
$AnzahlDatensaetze 0) {
  
$Seitenanzahl ceil($AnzahlDatensaetze $EINTRAEGE_SEITE);
  
$AktuelleSeite = isset($_GET["seite"]) ? $_GET["seite"] : 1;
  
$AktuelleSeite ctype_digit($AktuelleSeite) ? $AktuelleSeite 1;
  
$AktuelleSeite $AktuelleSeite || $AktuelleSeite $Seitenanzahl $AktuelleSeite;
  
$Versatz $AktuelleSeite $EINTRAEGE_SEITE $EINTRAEGE_SEITE;

 
// Gästebucheinträge auslesen
  
$select $db->query("SELECT `name`, `nachricht`, `homepage`, `bewertung`, `datum`
                                     FROM `" $TABLE_PREFIX "_gaestebuch`
                                     WHERE `anzeige` = '1'
                                     ORDER BY `datum` " . ($EINTRAEGE_IO == "Ende" "ASC" "DESC") . "
                                     LIMIT "  $Versatz ", " $EINTRAEGE_SEITE);
  if (
$datensaetze $select->fetchAll(PDO::FETCH_OBJ)) {

   
// Link-, und Formular-Navigation
   
print '<form action="gb.php" method="get" autocomplete="off">' $AnzahlDatensaetze . ($AnzahlDatensaetze ' Einträge' ' Eintrag') . ' - Seite: ' 
    ((
$AktuelleSeite 1) > '<a href="?seite=' . ($AktuelleSeite 1) . '" title="Zurück zu Seite ' . ($AktuelleSeite 1) . '">&#9668;</a>' '') .
    
' <input type="text" value="' $AktuelleSeite '" name="seite" size="3" maxlength="4" title="Seitenzahl eingeben und die Eingabetaste drücken." onClick="this.select()"> von ' $Seitenanzahl .
     ((
$AktuelleSeite 1) <= $Seitenanzahl ' <a href="?seite=' . ($AktuelleSeite 1) . '" title="Weiter zu Seite ' . ($AktuelleSeite 1) . '">&#9658;</a>' '') .
    
'</form>';

   
// Gästebucheinträge anzeigen
   
foreach($datensaetze as $datensatz) {
    
sscanf($datensatz->datum"%4s-%2s-%2s"$jahr$monat$tag);
    print 
'<dl class="eintrag"><dt class="name"><b>' $datensatz->name '</b>&nbsp;' .
     
bewertung($datensatz->bewertung$STERN_NUMMER$STERNE_ANZAHL) . '&nbsp;<small> ' . (kalender($tag$monat$jahr)) . '' .
    (
$datensatz->homepage != "" '' . (substr($datensatz->homepage04) == "http" ' - <a href="' $datensatz->homepage '" target="_blank" rel="noopener">' $datensatz->homepage '</a>' ' - ' $datensatz->homepage) . '' '') .
    
'</small></dt><dd class="text">' code($datensatz->nachricht) . '</dd></dl>';
   }

   
// Navigation Zurück /Weiter
   
if ($AnzahlDatensaetze $EINTRAEGE_SEITE) {
   print 
'<p>' . (($AktuelleSeite 1) > '<a href="?seite=' . ($AktuelleSeite 1) . '">&#9668; Zurück</a>&nbsp; ' '') . ' ' .
   ((
$AktuelleSeite 1)  <= $Seitenanzahl '<a href="?seite=' . ($AktuelleSeite 1) . '">Weiter &#9658;</a>' '') . '</p>';
   }
  }
 }
 else {
  print 
'<p>Noch keine Einträge vorhanden!</p>';
 }
}
else {

 
// In das Gästebuch eintragen
 
$name = isset($_POST["name"]) ? $_POST["name"] : "";
 
$nachricht = isset($_POST["nachricht"]) ? $_POST["nachricht"] : "";
 
$email = isset($_POST["email"]) ? $_POST["email"] : "";
 
$homepage = isset($_POST["homepage"]) ? $_POST["homepage"] : "";
 
$bewertung $_POST["bewertung"] ?? '';

 
// Benutzereingaben überprüfen
 
$Fehler = array("name"=>"","nachricht"=>"","sicherheit"=>"",);
 if (isset(
$_POST["submit"]) ||
     isset(
$_POST["vorschau"])) {
  
$Fehler["name"] = strlen($_POST["name"]) <= 'Bitte füllen Sie dieses Feld aus (min. 3 Zeichen)!<br>' '';
  
$Fehler["name"] = strip_tags($_POST["name"]) != $_POST["name"] ? 'HTML-Tags sind nicht erlaubt!<br>' $Fehler["name"];
  
$Fehler["nachricht"] = strlen($_POST["nachricht"]) < 25 'Bitte füllen Sie dieses Feld aus (min. 25 Zeichen)!<br>' '';
  
$Fehler["nachricht"] = strip_tags($_POST["nachricht"]) != $_POST["nachricht"] ? 'HTML-Tags sind nicht erlaubt!<br>' $Fehler["nachricht"];
  
$Fehler["sicherheit"] = (!isset($_POST["vorschau"]) && md5($_POST["zip"]) != $_POST["zip2"]) ? 'Die Sicherheitsabfrage ist leider falsch!<br>' '';
 }

 
// Bewertung
 
$array range($STERNE_ANZAHL1);
 
$bewertungRB "";
 foreach (
$array as $key => $value) {
  
$bewertungRB .= "<input type='radio' name='bewertung' value='" $value "' id='stern" $value "'";
  if (isset(
$_POST["bewertung"])) {
   if (isset(
$_POST["bewertung"]) && $_POST["bewertung"] == $value) {
    
$bewertungRB .= " checked='checked'";
   }
  }
  
$bewertungRB .= "> <label for='stern" $value "' title='" $value . ($value == ' Stern' ' Sterne') . "'>" $value . ($value == ' Stern' ' Sterne') . "</label>\n ";
 }
 
$bewertungRB .= " <span id='Bewertung' title='Keine Bewertung'>
   <label><input type='radio' name='bewertung' value='0'> Bewertung:</label>
  </span>";

 
// Sicherheitsabfrage - Zufallszahlen generieren
 
$Z0 = array(mt_rand(19), mt_rand(19));
 
$Z1 max($Z0); $Z2 min($Z0);
 
$Spam $Z1 " &#43; &#" . (48 $Z2) . ";";
 
$Schutz md5($Z1 $Z2);

 
// Formular erstellen
 
$Formular $javascript '
<p><a href="gb.php">Das Gästebuch anzeigen</a></p>

 <form name="Form" action="gb.php?eintragen" method="post" accept-charset="UTF-8">
 <p>
  <label>Ihr Name:
  <span class="fehler">&#10034; ' $Fehler["name"] . '</span>
  <input type="text" name="name" value="' $name '" size="30" maxlength="25" required="required" autocomplete="name" autofocus="autofocus" placeholder="Name min. 3 Zeichen">
  </label>
 </p>

 <p>
  <label for="message">Ihre Nachricht:</label>
  <span class="fehler">&#10034; ' $Fehler["nachricht"] . '</span> <br>
  <textarea name="nachricht" id="message" cols="40" rows="10" required="required" placeholder="Nachricht min. 25 Zeichen">' $nachricht '</textarea>
   ' . (smiley()) . '
 </p>
. (
$FORMFELD_EMAIL == "ja" ?
 
'<p>
  <label>Ihre E-Mail-Adresse: <input type="mail" name="email" value="' $email '" size="25" maxlength="45" autocomplete="email"> <small>(Optional, wird nicht angezeigt)</small></label>
</p>' :
 
''
) .
(
$FORMFELD_HOMEPAGE == "ja" ?
 
'<p>
  <label>Homepage oder Wohnort: <br><input type="text" name="homepage" value="' $homepage '" size="30" maxlength="100" autocomplete="url" placeholder="https://"> <small>(Optional)</small></label>
</p>' :
 
''
) . '
 <p class="sternebewertung"' . ($STERNEBEWERTUNG == "nein" ' style="display:none"' '') . '>
  ' $bewertungRB '
 </p>
<p class="clear"> <label> Sicherheitsabfrage: 
   <span class="fehler">&#10034; ' $Fehler["sicherheit"] . '</span>&nbsp; 
   <b>' $Spam ' =</b> 
   <input type="text" name="zip" size="4" autocomplete="off" required="required">
   <input type="hidden" name="zip2" value="' $Schutz '"><br>
  </p>
<p class="clear">
 <small>Bitte alle mit <span class="fehler">&#10034;</span> markierten Felder ausfüllen.<br>
 Beachten Sie, dass  Ihr Gästebucheintrag erst nach einer Prüfung frei geschaltet wird.</small><br><br>
 <input type="submit" name="submit" value="Eintragen">
 </p>
 </form>
 ';

 
// Formular abgesendet
 
if (isset($_POST["submit"])) {

  
// Sind keine Benutzer-Eingabefehler vorhanden ...
  
if (implode(""$Fehler) == "") {
   
$bewertung $_POST["bewertung"] ?? 0;
   
// ... in die Datenbank eintragen.
   
$insert $db->prepare("INSERT INTO `" $TABLE_PREFIX "_gaestebuch` (`anzeige`, `name`, `nachricht`, `email`, `homepage`, `bewertung`, `datum`) VALUES ( :anzeige, :name, :nachricht, :email, :homepage, :bewertung, '" date("Y-m-d H:i:s") . "')");
   if (
$insert->execute([':anzeige' => $ANZEIGESPERRE,
                                   
':name' => $_POST["name"],
                                   
':nachricht' => $_POST["nachricht"],
                                   
':email' => $email,
                                   
':homepage' => $homepage,
                                   
':bewertung' => $bewertung])) {

    
$id $db->lastInsertId();

    print 
'<p>Vielen Dank <i>' htmlspecialchars($_POST["name"], ENT_QUOTES ENT_HTML5'UTF-8') . 
     
'</i>,<br>Sie wurden in das Gästebuch eingetragen.</p>
      <p><a href="gb.php">Das Gästebuch anzeigen</a></p>';

    
// E-Mail an den Admin versenden
    
if ($GB_INFO == "ja") {
     
mb_internal_encoding("UTF-8");
     
$Betreff mb_encode_mimeheader("Neuer Gästebucheintrag""UTF-8""Q");

     
$Kopfzeile "MIME-Version: 1.0;\nFrom: " .
      
mb_encode_mimeheader($_POST["name"], "UTF-8""Q") .
      
"<" $EMAIL ">" "\nContent-Type: text/plain; Charset=UTF-8;\n";

     @
mail($EMAIL$Betreff,
                
"Datum: " date("d.m.Y H:i") .
                
" Uhr\nName: " strip_tags($_POST["name"]) .
                
"\nNachricht:\n" strip_tags($_POST["nachricht"]) .
                
"\n\nE-Mail:\n" strip_tags($email) .
                
"\nHomepage:\n" strip_tags($homepage) .
               
"\n\nBearbeiten: " $PFAD "/gb_admin.php?id=" $id$Kopfzeile);
    }
   }
  }
  else {
   
// Formular und Benutzer-Eingabefehler ausgeben
   
print $Formular;
  }
 }
 else {
  
// Formular ausgeben
  
print $Formular;
 }
}
?>

</body>
</html>
Adrian ✶✶✶✶✶ schrieb am Dienstag, den 14 Dezember 2021 #87
Besten Danke lieber Werner für deinen Vorschlag, werde es am Wochenende ausprobieren.

Grüss dich Adrian
Adrian ✶✶✶✶✶ schrieb am Montag, den 20 Dezember 2021 #88
Lieber Werner

Leider frage ich etwas viel. Habe das ganze Weekend probiert aber krieg es einfach nicht hin. Wie kann ich die Vorschau gleich über dem Absendenbutton plazieren, so dass beim Drücken der Vorschau /Seitereload gleich zu einem Anker zur Vorschau gesprungen wird über dem Absendebutton.

Hier auf dem Bild siehst du meine Idee von der Vorschau unten. Geht das auch mit Anker falls die Vorschau gedrückt wird?
Wenn das mit dem Anker nicht geht ist es nicht so schlimm, hauptsache die Vorschau ist unten. Die Sterne in der Vorschau werden nicht angezeigt.

bilderupload.org/bild/8d1d3[…]-12-20-213


Lieben Gruss

Adrian
Werner schrieb am Dienstag, den 21 Dezember 2021 #89
Hallo Adrian.
Warum die Vorschau nicht über den Eingabefeldern belassen? So kann der Benutzer nachfolgend seine Rechtschreibfehler korrigieren und dann das Formular versenden.

Zitat von Adrian:
Gibts ne Möglichkeit die Vorschau wegzulassen und direkt die Chapta und den Button senden aufzurufen.
Letzte Woche habe ich mir noch die Mühe gemacht und die Vorschau entfernt :(

Das mit dem Anker geht so:

<form name="Form" id="anker" action="gb.php?eintragen#anker" method="post" accept-charset="UTF-8">

id="anker" kannst du auch weiter unten im Formular einfügen.

Hier in dieser Kommentar-Funktion da funktioniert das genauso mit der Vorschau und die Sterne werden auch angezeigt.
Adrian schrieb am Dienstag, den 21 Dezember 2021 #90
Lieber Werner, danke für den Ankertipp. Ich wollte die Vorschau doch belassen, aber sie ist oben so weit weg vom Sendebuttom. Mein Formular habe ich anders gestylte und es ist jetzt etwas länger in der Höhe. So haben die Ausfüller wieder nach unten zu scrollen, nachdem sie die Vorschau gesehen haben.
Mit CSS habe ich es hingekriegt, aber wenn ich zu viel Text hineinschreibe überdekt die vorschau mir mein ganzes Formular. (meine CSS Variante ist so nicht braucbar)

Aber danke für den Anker, den versuche ich jetzt aus.

ich wünsche dir schöne Weihnachten!

Adrian