Forum: NOF - Tutorials (185 anschauliche Tutorials zum Lesen und Nacharbeiten) > PHP und MySQL - Tutorials und Kurzanleitungen

PHP und MySQL -> Einbau einer Bewertungs- und Kommentarfunktion

(1/4) > >>

Hans K.:
Wie der Titel bereits beinhaltet, ist ein Paket mit PHP und einer MySQL Datenbank Voraussetzung für die Bewertungs- und Kommentarfunktion.

Als erstes wird der Speicherplatz für die Daten geschaffen. Dafür muss eine Tabelle in der MySQL Datenbank angelegt werden (Zugang ist der Anleitung des Providers zu entnehmen).

Die Tabelle bekommt die Bezeichnung: Kritiken

Benötigt werden 6 Felder:
ID - eine fortlaufende ID, welcher die Funktion auto_increment vergeben werden muss (automatischer Zähler)
Filmid - eine eindeutige Kennzeichnung, wenn mehrere Bewertungsfunktionen verwendet werden
User - der vom User hinterlassene Username
Wertung - die vom User hinterlassene Bewertung
Kritik - der vom User hinterlassene Kommentar
Datum - der Zeitstempel, wann der User seinen Kommentar hinterlassen hat

Die Felder müssen noch als Typ definiert werden:

Id              int(11)
Filmid         int(11)
User          varchar(30)
Wertung    int(11)
Kritik          text
Datum       date

int(11) ist ein reines Zahlenfeld, varchar(30) ist ein feld mit einer Zeichenfolge von maximal 30 Zeichen, text ist ein reines Textfeld ohne Einschränkung und date ist ein Datumsfeld.

Hans K.:
Als Erstes ist die Seite in NOF auf PHP umzustellen:
Umstellung der Seite auf PHP

Dann wird die Verbindung zu der MySQL Datenbank hergestellt.
Verbindung zur MySQL Datenbank herstellen

Hans K.:
Nun wird der zuerst eingegebene Code ergänzt.


--- Code: PHP ---<?phpinclude("./html/datenbank.php"); session_start(); if (empty($_POST['Wertung'])) {} else { $User = $_POST['User'];$Wertung = $_POST['Wertung'];$Kritik = $_POST['Kritik'];$Datum = date("y-m-d");$Filmid = $_POST['Filmid']; $Textauschluss = "http://";$pos = strpos($Bewertung, $Textauschluss); if ($pos === false) {mysql_query("INSERT INTO Kritiken (Filmid, User, Wertung, Kritik, Datum) VALUES ('$Filmid', '$User', '$Wertung', '$Kritik', '$Datum')");} else { } header("Location: seitenname.php"); }?>
Mit dem Teil werden die Daten aus dem Formular ausgelesen (das Formular kommt noch):
$User = $_POST['User'];
$Wertung = $_POST['Wertung'];
$Kritik = $_POST['Kritik'];
$Datum = date("y-m-d");
$Filmid = $_POST['Filmid'];

Hier wird geprüft, ob eine URL eingegeben wurde (falls ja, erfolgt kein Eintrag):
$Textauschluss = "http://";
$pos = strpos($Bewertung, $Textauschluss);

Damit werden die Daten des Users in die Datenbank geschrieben:
mysql_query("INSERT INTO Kritiken (Filmid, User, Wertung, Kritik, Datum) VALUES ('$Filmid', '$User', '$Wertung', '$Kritik', '$Datum')");

Und zuletzt wird nach erfolgtem Eintrag die Seite aktualisiert aufgerufen (dabei ist der Seitenname ohne Domäne z.B. impressum.php einzutragen):
header("Location: seitenname.php");

Hans K.:
Nun ist ein Textfeld zu erstellen und dort zu positionieren, wo nachher die Einträge der User zu sehen sein sollen. In den Texteigenschaften den Button HTML betätigen (das Textfeld aufziehen, an anderer Stelle ins Layout klicken und dann das Textfeld anklicken -> dann ist das Eigenschaftsfenster zu sehen).

Vor dem Tag ist der Code einzugeben:


--- Code: PHP ---<?php $sql2="SELECT User, Kritik, Wertung, DATE_FORMAT(Datum, '%d.%m.%Y') as Datum_formatiert FROM Kritiken WHERE Filmid = $film_id ORDER BY Datum ASC"; $result2 = mysql_query($sql2);$anzahl = mysql_num_rows ($result2); if ($anzahl == 0) {echo "<table border="0" cellspacing="0" cellpadding="0" width="560" style="height: 18">";echo "<tr style="height:18px"> <td width="560">". "Wertung: ". "Noch keine Userwertung vorhanden.". "</td> </tr>";echo "</table>";} else { while ($row2 = mysql_fetch_array($result2)) { echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"560\" style=\"height: 18\">"; echo "<tr style=\"height:18px\"> <td colspan=\"2\">". $row2["Kritik"]. "</td></tr>"; echo "<tr style=\"height:18px\"> <td width=\"290\">". "Wertung: ". $row2["Wertung"]. " Sterne". "</td>". "<td width=\"270\" align=\"right\">".  $row2["User"]. "&nbsp; &nbsp;". $row2["Datum_formatiert"]. "</td></tr>";echo "</table>";echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"560\" style=\"height: 18\">"; echo "<tr style=\"height:18px\"> <td width=\"560\">";$zaehler = 1;while ($zaehler <= $row2["Wertung"]) {echo "<img src=\"../Ordner/Stern1.png\" ALT=\"\">";$zaehler++;} while ($zaehler <= 10) {echo "<img src=\"../Ordner/Stern2.png\" ALT=\"\">";$zaehler++;} echo "<tr style=\"height:1px\">";echo "<td width=\"560\" style=\"vertical-align: left\">". "<hr noshade size=\"1\" width=\"95%\" align=\"left\"></td></tr>";  }echo "</table>";}?>
In diesem Code sind Tabellen zu besseren Positionierung der Kritiken/Kommentare definiert, bei Bedarf sind diese anzupassen.

Zu Beginn des Codes ist eine Variable definiert: ...WHERE Filmid = $film_id
Die $film_id ist sozusagen die Nummer für die Bewertungsfunktion. Werden auf verschiedene Seiten weitere Bewertungsfunktionen verbaut, bekommt jede Funktion eine eigene Nummer. Dadurch werden sämtliche Bewertungen/Kommentare alle in der gleichen Datenbank gespeichert und es müssen nicht weitere Tabellen in der MySQL Datenbank angelegt werden.

Hans K.:
Die $film_id ist auf jeder Seite, wo die Bewertungsfunktion eingesetzt wird, mit einer anderen Zahl zu versehen.  Das sollte dann so aussehen:

$film_id = '1';

oder

$film_id = '299';

Diese Definition der Variable ist noch in dem Code im Layout einzufügen. Zum Beispiel hier:


--- Code: PHP ---$conn=mysql_connect($db_server, $db_benutzer, $db_passwort);mysql_select_db($db_name); $film_id = '1'; session_start();
Nun kann man durchaus die Frage stellen, warum wird das mit einer Variablen gelöst und nicht direkt als feste Zahl?
Hintergrund:
Es kann durchaus hilfreich sein, wenn z.B. mehrere Seiten dynamisch erstellt sind. Dann kann die Variable ebenfalls dynamisch befüllt werden und auch die Bewertungsfunktion muss nur einmal erstellt werden.
(wenn ich mal mehr Zeit habe, erstelle ich ein Tut zur dynamischen Seitengestaltung)

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln