MySQL

From Medien Wiki

Einleitung

MySQL ist ein Datenbank Server, der gut mit PHP zu benutzen ist. Wer XAMP nutzt, kann die MySQL Datenbanken mit PHPMyAdmin inspizieren.

Für das folgende schnelle Praxis-Beispiel brauchen wir lediglich entsprechende Rechte, um eine neue Datenbank anlegen zu können und Zugriff auf den SQL-Server sowie einen Benutzernamen und Passwort (bei XAMP ist das Standardmäßig "localhost" sowie "root/root".

Ein schnelles Beispiel aus der Praxis, wie SQL mit PHP zu benutzen ist.

Database Connection

Jedes mal wenn auf die Datenbank zugegriffen werden soll, muss eine Verbindung aufgebaut werden, für die wir die Verbindungsdaten benötigen. Deshalb wird hier eine kurze PHP-Datei angelegt, die wir in alle weiteren PHP-Skripte einfach inkludieren können. Es ist hier besonders darauf zu achten, dass diese Datei niemals mit einer anderen Endung als .php oder .php5 am Server liegen sollte, damit diese Daten von niemandem ausgelesen werden können. Eine weitere übliche Vorgehensweise ist, diese Datei außerhalb des Webserver-Wurzelverzeichnisses abzulegen (auf das kein normaler Websurfer Zugriff haben sollte)

Datei config_db.php:

<?PHP
// db configuration
$db_name = "myproductdb";
$db_host = "localhost";
$db_user = "root";
$db_pass = "root";
// link to db
$link = mysql_connect($db_host, $db_user, $db_pass);
if(!$link ) { 
	echo("<p class=\"error\">Fehler: Verbindung zu Datenbank nicht m&ouml;glich!</p>");
	return;
}
?>

Das Backend

In diesem Beispiel gehen wir von einer einfachen Datenbankstruktur aus. Wir haben Produkte, und diese Produkte haben alle einen Titel und einen Preis.

Es gibt nun zwei PHP-Skripte. Das eine ist das "Frontend", hier wird die Datenbank ausgelesen und alle vorhandenen Produkte in einer Tabelle angezeigt (siehe unten). Das zweite Script ist das Backend, in dem wir die einzelnen Einträge bearbeiten können - außerdem wird hier die Tabelle und die Datenbank angelegt, wenn sie nicht schon vorhanden ist.

Somit sind die Aufgaben des Backends:

  • Database Server Connect (siehe oben)
  • Create Database if not exist
  • Create Tables in Database if not exist
  • Add some values
  • Show Table Contents in From
  • Update Values in Database


Datei backend.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>MySQL Example</title>
</head>
<body>
<?PHP
// connect to db
include("config_db.php");

// ********** create db ********** 
// create database (if not already existing)
$sql = "CREATE DATABASE IF NOT EXISTS $db_name";
if(! mysql_query($sql, $link)) {
	echo("<p class=\"error\">Fehler: Datenbank kann nicht angelegt werden!</p>");
	return;
}
// select db
mysql_select_db($db_name, $link);

// ********** create tables ********** 
// create products (if not already existing)
$sql = "CREATE TABLE IF NOT EXISTS products (
	prodName CHAR(255) DEFAULT 'unnamed' NOT NULL,
	prodPrice FLOAT UNSIGNED DEFAULT '0.00',
	PRIMARY KEY(prodName) )";
if(! mysql_query($sql, $link)) {
	echo("<p class=\"error\">Fehler: Table \"products\" kann nicht angelegt werden!</p>");
	echo("<p class=\"error\">". mysql_error($link) ."</p>");
	return;
}

// ********** default values ********** 
// fill products with some default values (products)
// note that this is a very simplified example, 
// therefore we're using a hard-coded products array here to easily update the form-values
// in a "real life" example, we'd catch the products from the database
$products = array('Shampoo', 'Soap');
$sql = "INSERT INTO products 
		(prodName, prodPrice) 
	VALUES ('Shampoo','4.95')";
if(! mysql_query($sql, $link)) { }

$sql = "INSERT INTO products
		(prodName, prodPrice) 
	VALUES ('Soap','1.99')";
if(! mysql_query($sql, $link)) { }

// ********** update values **********
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	// update prices
	$i = 0;
	foreach($products as $prodName) {
		// replace float "," with "." $_POST['prodPrice'] is from the posted form
		// to prevent wrong values due to german floating point separator "," (comma) instead of the english "." (dot)
		$prodPrice = str_replace(",",".",$_POST['prodPrice_'.$i]);
		// update db
		$sql = "
			UPDATE products
			SET prodPrice = '$prodPrice'
			WHERE prodName = '$prodName'
		";
		if(! mysql_query($sql, $link)) {
			echo("<p class=\"error\">Fehler: Konnte Wert nicht aktualisieren!</p>");
			echo("<p class=\"error\">". mysql_error($link) ."</p>");
		}
		$i++;
	}
}
echo "<p>Die Preise wurden aktualisiert!</p>";

// ********** PHP Form ********** ?>
<form method='post' action='<?php echo $PHP_SELF; ?>' enctype='multipart/form-data'>
<table width="90%" align="center" valign="top">
<?php
$result = mysql_query("SELECT * FROM products");
$i = 0;
while($entry = mysql_fetch_array($result, MYSQL_BOTH)) {
	printf("<tr>
	 	  <td>%s</td>
	 	  <td><input type='text' name='prodPrice_$i' value='%01.2f' size='8'></input></td>
	 	</tr>", 
	 		$entry[prodName], 
	 		$entry[prodPrice] );
  	$i++;
}
?>
</table>
<p><input type="submit" value="aktualisieren..." /></p>
</form>

</body>
</HTML>

Das Frontend

...ist im Prinzip das Gleiche wie das Backend, nur sehr viel einfacher, da wir uns nicht darum kümmern müssen, die Werte zu aktualisieren. Außerdem kann man davon ausgehen, dass alle Tabellen und die Datenbank bereits exisitieren.

Somit sind die Aufgaben des Frontends:

  • Database Server Connect (siehe oben)
  • Show Table Contents (siehe oben)

Datei frontend.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>MySQL Example</title>
</head>
<body>
<?PHP
// connect to db
include("config_db.php");
// select db
mysql_select_db($db_name, $link);
?>

<table width="90%" align="center" valign="top">
<?php
$result = mysql_query("SELECT * FROM products");
$i = 0;
while($entry = mysql_fetch_array($result, MYSQL_BOTH)) {
	printf("<tr>
	 	  <td>%s</td>
	 	  <td>%01.2f €</td>
	 	</tr>", 
	 		$entry[prodName], 
	 		$entry[prodPrice] );
  	$i++;
}
?>
</table>

</body>
</HTML>

Ressourcen



Diese Seite ist Teil der Werkmodule Grundlagen der Webprogrammierung und WebApps - Grundlagen Webprogrammierung von Michael Markert für Interface Design / Fakultät Medien an der Bauhaus-Universität Weimar.