plus minus gleich

PHP und MySQL

In diesem Tutorial möchte ich auf erklären wie man mittels PHP, Daten in eine MySQL-Datenbank schreibt und sie wieder abfragt.

Inhalt

1. Verbindung zur Datenbank herstellen

2. Daten in eine Datenbank schreiben

3. Daten aus der Datenbank abfragen

4. Sicherheitshinweise

1. Verbindung zur Datenbank herstellen

Wir haben mehrere Möglichkeiten eine Verbindung zur Datenbak herzustellen. Zum einen kann man die Verbindung zur Datenbank in jeder PHP-Datei definieren und zum anderen eine zentrale Datei erstellen die man dann nur noch includiert. Da es üblich und auch übersichtlicher ist eine extra Datei zu erstellen möchte ich diese Variante hier auch vorstellen. In unserem Beispiel heist sie dbconfig.php.

Hier also ein Beispiel wie solch eine Datei aussehen könnte:

1
2
3
4
5
6
7
8
<?php
$dbname="testdb"; // Name der Datenbank
$dbhost="localhost"; // Datenbankhost
$dbuser="tester"; // Datenbankuser
$dbpass="geheim"; // Passwort
mysql_connect($dbhost,$dbuser,$dbpass); // Verbindungsaufbau
mysql_select_db($dbname); // Auswahl der Datenbank
?>

Mehr ist es garnicht! Mit mysql_conect stellen wir die Verbindung her und wählen anschließend unsere Datenbank mit mysql_select_db aus.

2. Daten in eine Datenbank schreiben

Nun wollen wir unsere Datenbank mal füllen. Dazu legen wir eine Datei namens register.php an.

Die einfachste Sache wäre folgendes Beispiel:

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
<?PHP
// Wird der Post-Button im Formular angeklickt dann schreibe in die Datenbank
if (isset($_POST['button'])) {
// Hier erfolgt der include der dbconfig.php
include("dbconfig.php");
 $sql = "SELECT
`benutzername`
FROM
`users`
WHERE
`benutzername` = '".trim($_POST['benutzername'])."'";
// dieses Kommando kann zu Testzwecken
// auskommentiert werden um zu sehen wie die Datenbankabfrage aussieht

#echo ($sql);
$ergebnis = mysql_query( $sql );
// Existiert der Benutzername nicht dann wird in die Datenbank geschrieben
if (mysql_num_rows($ergebnis) == 0){
$sql = "INSERT INTO
users (benutzername,email) VALUES('".trim($_POST['benutzername'])."','".$_POST['email']."')";
# echo ($sql);
// Ausführen der Abfrage.
// Sollte es einen Fehler mit der Datenbank geben wird er hiermit ausgegeben

mysql_query ($sql) or die(mysql_error());
// Schließen der Datenbankverbindung
mysql_close();
?>
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
<!-- Ausgabe wenn die Registrierung erfolgreich war -->                                   
<div align="center">

Deine Registrierung war erfolgreich. Du wirst in Kürze von einem Admin freigeschalten.</p>
<a href="index.html">Zur Startseite</a></p>
</div>
<!-- Sollte der Benutzername schon vergeben sein wird folgende Meldung ausgegeben -->
<?PHP
}
else
{
?>
<div align="center">
Leider ist dein Benutzername schon vergeben!
<br>
<br>
<a href="register.php">zur&uuml;ck</a>
</div>
<?
}
}
else
{
?>
<!-- Das Formular -->
<table border="0" align="center">
<tr align="center">
<form method="post" action="register.php">
  <td>Benutzername :</td><td><input type="text" name="benutzername" value="benutzername"></td>
</tr>
<tr align="left">
<td>E-Mailadresse :</td><td><input type="text" name="email" value="E-Mailadresse"></td>
</tr>
</table>
<br>
<div align="center">
<input type="submit" name="button" value=" registrieren* ">
</div>
</form>
<?PHP
}
?>

3. Daten aus der Datenbank abfragen

Wollen wir jetzt eine Übersicht haben welche User sich bereits registriert haben dann können wir dies mit folgender Abfrage tun. Dazu erstellen wir wieder eine neue Datei mit dem Namen userout.php.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php include ("dbconfig.php");           // Includieren der dbconfig.php
$sql = "SELECT * FROM `users`"; // Alles aus der Tabelle users abfragen
$result = mysql_query ($sql) or die(mysql_error());
while ($line = mysql_fetch_array($result)) { ?>
<!-- Ausgabe der Daten in einer Tabelle -->
<table border="1" class="tableschrift">
<tr align="center">
<td width="150" ><?php echo $line['benutzername'];?></td>
<td width="100" ><?php echo $line['email'];?></td>
</tr>
</table>
<?php
}
mysql_close(); // Datenbankverbindung schließen
?>

4. Sicherheitshinweise (SQL-Injection)

Dieser Teil stammt aus Wikipedia.

In PHP steht zu diesem Zweck für fast jede verwendete Datenbank eine Escape-Funktion bereit. Nur die Oracle-Anbindung besitzt keine solche Escape-Funktion, hingegen können dort Prepared Statements verwendet werden, was beispielsweise bei der beliebten MySQL-Datenbank erst mit den Funktionen von MySQLi[1] möglich geworden ist.

Ein Beispiel für MySQL: anstatt

1
2
3
4
$abfrage = "SELECT spalte1
FROM tabelle
WHERE spalte2 = '".$_POST['spalte2Wert']."'";
$query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

sollte Folgendes verwendet werden:

1
2
3
4
$abfrage = "SELECT spalte1
FROM tabelle
WHERE spalte2 = '".mysql_real_escape_string($_POST['spalte2Wert'])."'";
$query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

Eine weitere Möglichkeit ist die Typumwandlung von Übergabeparametern.

1
2
3
4
$abfrage = "SELECT spalte1
FROM tabelle
WHERE spalte2 = " . intval($_POST['spalte2Wert']);
$query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

Ab PHP 5.1 sollten PHP Data Objects für Datenbankabfragen verwendet werden.

1
2
$dbh->exec("INSERT INTO REGISTRY (name, value)
VALUES (".$dbh->quote($name,PDO::PARAM_STR).", ".$dbh->quote($value,PDO::PARAM_INT).")");

Oder als Prepared Statement:

1
2
3
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam('name', $name);
$stmt->bindParam('value', $value);

Häufig wird aus Bequemlichkeit einfach die Konfigurationsoption „magic_quotes_gpc“ auf „on“ gestellt, mit der von außen kommende Benutzereingaben automatisch maskiert werden. Doch dies ist nicht empfehlenswert. Denn manche nicht selber programmierte Skripte setzen eigenständig Funktionen wie etwa addslashes()[2] oder das bereits weiter oben genannte mysql_real_escape_string()[3] ein. Das heißt, dass bereits allen relevanten Zeichen in den Benutzereingaben durch so genannte Magic Quotes[4] ein Backslash vorangestellt wurde und nun durch die Escape-Funktion erneut ein Backslash vorangestellt wird. Somit werden die Benutzereingaben verfälscht und man erhält beispielsweise anstatt eines einfachen Anführungszeichens ein Anführungszeichen mit vorangestelltem Backslash (\"). Auch aus Gründen der Portabilität sollte bei der Entwicklung von Anwendungen auf diese Einstellung verzichtet und stattdessen alle Eingaben manuell validiert und maskiert werden, da nicht davon ausgegangen werden kann, dass auf allen Systemen dieselben Einstellungen vorherrschen oder möglich sind.

Ich hoffe dieses Tutorial hat euch weitergeholfen!

Kommentare (0)
Kommentar schreiben
Ihre Kontaktdetails:
Kommentare:
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch::(:shock::X:side:
:):P:unsure::woohoo::huh::whistle:;):s:!::?::idea::arrow:
Security
Bitte geben Sie den Anti-Spam-Code aus diesem Bild ein.
 

POS verfolgen

Atom
Atom 0.3
News
News | Fullposts

POS auf Facebook folgen.POS auf Twitter folgen.