PHP Formular mit Datenbankfunktion

vzm800

Grünschnabel
Hallo an alle,

ich benötige ein Formular, welches auf einer HP Unterseite (nur Admin Zugang) ausgefüllt wird und dann auf der Website mit bestimmten werten sofort ausgegeben werden soll.
Zum besseren Verständnis.
Der Admin gibt im Formular auf der Unterseite Name, Cocktailname, Datum, Uhrzeit und Zusammenstellung ein.
Auf Website sollen nun nur Name, Cocktailname, Datum angezeigt werden. Gleichzeitig sollen aber alle Werte in einer Datenbank gespeichert werden.
Da ich mich mit PHP Programmierung nicht so auskenne dachte ich es gibt PHP Vorlagen, die man entsprechend bearbeiten könnte.

Ich wäre sehr dankbar für Hinweise.
 
Grüße,

ich muss gleich zu Beginn mal fragen, wie weit die eigentliche HP schon fortgeschritten ist? Muss der Admin-Zugang noch implementiert werden oder besteht der schon. Wenn es sich nur um das Einschreiben von Formulardaten in eine Datenbank mit anschließender Ausgabe auf der HP (auch für normale Nutzer oder auch nur für den Admin?) handelt, dann können wir das auch hier schnell basteln ;).
 
Hallo,

also die HP ist fast fertig und liegt auf einem Testserver. Den Admin Zugang habe ich noch nicht eingerichtet.
Normalerweise ist das vieleicht auch nicht Notwendig, da ich die Seite in der die Daten eingetragen werden nicht in die Navigation mit einbeziehen möchte. Die ausgegebenen Daten auf der HP sollen nur Sichtbar sein. Also keine Bearbeitung möglich. Für den Admin sollen die Daten zur Verfügung stehen.

Ich schick mal die Adresse mit. Unter Cocktailtraum sollen wie gesagt die Daten wie Name, Uhrzeit und der Name des Cocktails aufgelistet werden.

http://jamboree-deutschland.co.de

vielen Dank schon mal.
 
Najut, da bastle ich mal eben was - muss nur noch fragen, ob es denn auch schon ne Datenbank gibt, oder ob die noch angelegt werden muss?
 
Naja,
ich sag mal so, wenn du schon wüsstest, wie du die Datenbank strukturieren möchtest (soll heißen: Spaltennamen, Feldtypen), dann würde sich das Ganze schon mal etwas einfacher gestalten. Ich kann dir natürlich auch einen Blanko-Code posten, in dem du dann nur noch die Spaltennamen austauschen müsstest...
 
Mahlzeit,

muss mich erstmal für die Verzögerung entschuldigen - ich musste noch was für die Uni machen :D.
Aber jetzt hab ich mal den Code mitgebracht:

Als erstes das Formular, welches du unangetastet lassen kannst (Design ist natürlich nicht das gelbe vom Ei - das kannst du gerne noch ändern ;)). Den Formularcode einfach an der gewünschten Stelle im Code einpflegen:

Code:
<form method='POST' action='<?php $_SERVER['PHP_SELF']?>'>
<table border='0' cellspacing='0' cellpadding='0' align='' width='300'>
<tr>
	<td>
	<font>Name:</font><input type='text' name='Name' size='40'>
    </td>
</tr>
<tr>
	<td>
	<font>Cocktail-Name:</font><input type='text' name='Cocktailname' size='40'><br><br>
	</td>
</tr>
</table><br>

<table border='0' cellspacing='0' cellpadding='0' align='' width='300'>
<tr>
	<td>
    <font>Zusammensetzung:</font>
    </td>
</tr>
<tr>
	<td>
    <textarea name='Zusammensetzung' value='' cols='40' rows='20'></textarea>
    </td>
</tr>
</table><br>

<input type='submit' name='Bestätigen' value='Bestätigen'>
</form>

Als nächstes kommt der Code, der die Formulareingaben verarbeitet und Sie in die Datenbank einträgt (am besten gleich nach dem Formularcode einfügen, damit die Ausgaben auch in diesem Bereich erscheinen):

PHP:
<?php
if(isset($_POST['Bestätigen'])) {
	
	function StrSafe ($inhalt) {
			if (!empty($inhalt)) {
			//Umlaute und Sonderzeichen in HTML-Schreibweise umwandeln
			$inhalt = htmlentities($inhalt);
			//Entfernt Überflüssige Zeichen am Anfang und Ende der Zeichenkette
			$inhalt = trim($inhalt);
			//Backslashes entfernen
			$inhalt = stripslashes($inhalt);
	}
	return $inhalt;
	}
	
foreach ($_POST as $key=>$element) {
	//Dynamische Variablen erzeugen und Eingaben filtern
	${"g_".$key} = StrSafe($element);
}

//Auf Eingabe prüfen
if(!strlen($g_Name)) {
	$error_msg.= "Sie müssen einen Namen angeben!";
}

if(!strlen($g_Cocktailname)) {
	$error_msg.= "Sie müssen einen Cocktail-Namen angeben!";
}

if(!strlen($g_Zusammensetzung)) {
	$error_msg.= "Sie müssen die Zusammensetzung angeben!";
}


//Ausgabe der Fehlermeldung, falls vorhanden
if($error_msg) {
	echo"$error_msg<br>";
} else {

//Datum der Einschreibung
$Datum = date("d-m-Y");
//Uhrzeit der Einschreibung
$Zeit = date("H:i");

$Hostname = "";
$Benutzername = "";
$Passwort = "";
$Datenbank = "db729687-cocktails";
$Datenbanktabelle = "";

$db = new mysqli($Hostname, $Benutzername, $Passwort, $Datenbank);
if(mysqli_connect_errno()) {
	printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
	exit();
}

$Einschreiben = mysqli_query($db, "INSERT INTO $Datenbanktabelle
							 (id, Name, Cocktailname, Datum, Zeit, Zusammensetzung)
							 VALUES
							 ('', '$g_Name', '$g_Cocktailname', '$Datum', '$Zeit', '$g_Zusammensetzung')");

if($Einschreiben) {
	echo"Daten erfolgreich in die Datenbank eingetragen.";
	mysqli_close($db);
} else {
	echo"Daten konnten nicht in die Datenbank geschrieben werden.";
}


	

}

}
?>

Als letzter Codeabschnitt - der Code, der in die Seite eingefügt werden soll, die die Ausgabe der Daten vornimmt und dem Benutzer präsentiert:

PHP:
<?php
$Hostname = "";
$Benutzername = "";
$Passwort = "";
$Datenbank = "db729687-cocktails";
$Datenbanktabelle = "";
$Einträge_anzeigen = "10";

$db = new mysqli($Hostname, $Benutzername, $Passwort, $Datenbank);
if(mysqli_connect_errno()) {
	printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
	exit();
}

$Abfrage = mysqli_query($db, "SELECT * FROM $Datenbanktabelle ORDER BY id DESC LIMIT $Einträge_anzeigen");
$Anzahl = mysqli_num_rows($Abfrage);

//Einträge vorhanden?
//wenn nein, dann...
if($Anzahl == "0") {
	echo"
	<table border='0' cellspacing='0' cellpadding='0' align='center' width='500'>
	<tr>
		<td>
			<font><center>Keine Einträge vorhanden!</center></font>
		</td>
	</tr>
	</table>
	";
//ansonsten...
} else {
	
while($datensatz = mysqli_fetch_array($Abfrage)) {
	extract($datensatz);
	
$Zusammensetzung = nl2br($Zusammensetzung);
	
echo"
<table Cellspacing='0' cellpadding='0' align='center' width='500' style='border:1px dotted #a0a0a0;'>
<tr>
	<td width='350' style='padding-right:5px; padding-left:5px;'>
		<font>$Cocktailname</font><br>
		<font style='font-size:12px;'>by $Name</font>
	</td>
	<td width='150' valign='bottom' align='right' style='padding-right:5px; padding-left:5px;'>
		<font style='font-size:12px;'>$Datum, $Zeit</font>
	</td>
</tr>

<tr>
	<td colspan='2'>
		<hr width='98%' size='1'>
	</td>
</tr>

<tr>
	<td colspan='2' style='padding-right:5px; padding-left:5px;'>
		<font>$Zusammensetzung</font>
	</td>
</tr>
</table><br>
";


}
}
mysqli_close($db);
?>

natürlich ist auch hier das Design veränderbar. Dabei ist zu beachten, dass der Code, der innerhalb des ersten echo"";-Befehls steht, dann angezeigt wird, wenn keine Einträge vorhanden sind. (Ist im Prinzip nichts anderes als HTML-Code kann also auch so geschrieben werden mit dem Unterschied das man " durch ' ersetzen sollte -> wenn nicht dann ein \ zuvor schreiben, damit die " escaped werden)

Innerhalb des zweiten echo"";-Befehls steht ebenfalls wieder prinzipieller HTML-Code der so behandelt werden sollte wie oben gerade beschrieben. Dieser wird gezeigt wenn Einträge vorhanden sind (natürlich auch anpassbar).

So abschließend noch ein paar worte zu meiner Tabellenstruktur:
Meine Tabelle heißt übrigens Cocktail (Tabelle nicht mit Datenbank verwechseln!!).

id INT(11) NOT NULL AUTO_INCREMENT,
Name VARCHAR(60) NOT NULL,
Cocktailname VARCHAR(60) NOT NULL,
Datum VARCHAR(10),
Zeit VARCHAR(5),
Zusammensetzung LONGBLOB,
PRIMARY KEY(id)

...fasst vergessen:
du findest im 2. und 3. Codeausschnitt ein paar Zeilen wie $Hostname und $Passwort -> trage dort bitte die entsprechenden Daten für die Datenbank ein (müsstest du vom Provider bekommen haben).

So, lange Rede kurzer Sinn:
Code könnte man auch noch zusammenkürzen - leider keine Zeit ;-).
Viel Spaß damit und falls es Probleme mit dem Code gibt, einfach nochmal melden.
 
Zurück