PDO Datenbank Verbindung herstellen & Verwendung von Prepared Statements mit HTML Website Code?
Hallo liebe Community!
Ich versuche mir seit einigen Wochen die Programmiersprache PHP anzueignen. Aktuell versuche ich Daten aus einem Formular von einer einfachen HTML Seite an meine Datenbank zu senden. Dafür möchte ich gerne PDO verwenden da sich damit Daten sicherer speichern lassen sollen.
Mit der Offiziellen Dokumentation komme ich leider nicht so gut zurecht, daher wären meine Fragen an euch:
- Wie würde eine solche Verbindung zu meiner Datenbank mit PDO prinzipiell aussehen?
- Wie baue ich diese SQL Statements richtig ein, wenn ich Daten von HTML Elementen speichern - laden, sowie eventuell später suchen möchte?
Ich bin für jeweilige Antworten sehr dankbar, gerne auch mit Bildern, Links oder direkten Codebeispielen!
1 Antwort
Ich habe mir damals während meiner Schul & Studienzeit zu diesem Thema eine hilfreiche Sammlung von Codebeispielen angelegt.
Bei den verschiedenen Beispielen ist die Verbindung zu einer Datenbank mit PDO, sowie diverse SQL Abfragen in Verbindung mit HTML zum manipulieren von Daten enthalten.
An einigen Stellen sind auch erklärende Kommentare (englisch & deutsch).
Wenn du dir ansehen möchtest wie man diese Snippets z.B. in Projekten verwendet, findest über diesen Link einige Übungen welche all diese Operationen beinhalten -> vergiss nicht eine entsprechende DB dazu anzulegen!
Wünsche dir frohes Schaffen und viel Erfolg beim erlernen von PHP!
Gruß,
Alex
Usefull PHP CRUD snippets
// connect to DB with PDO
<?php
$host = "localhost";
$dbname = "mydb";
$username = "root";
$password = "";
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
?>
// send data from html inputfield into db
<?php
if (isset($_POST['buttonName'])) {
$DataForDB = htmlspecialchars($_POST['inputfieldName']);
$statement = $pdo->prepare("INSERT INTO table (columns) VALUES (?, ?)");
$statement->execute([$DataForDB]);
}
?>
// load data from db into select
<?php
$sql = "SELECT column(id), column1, column2 FROM table";
$result = $pdo->query($sql);
?>
<select class="form-select form-select-lg" name="" id="">
<option selected="true" value="" data-hidden="true">Klasse auswählen</option>
<?php
// load data from db into Selectfield options
if ($result->rowCount() > 0) {
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo "<option value='" . $row['id'] . "'>" . $row['column1'] . " " . $row['column2'] . "</option>";
}
} else {
echo "<option>No classes found</option>";
}
?>
</select>
// load Data from DB into InputField (current type is readonly)
<?php
$sql = "SELECT column1, column2 FROM Table";
$result = $pdo->query($sql);
?>
<div class="container center-mid">
<div class="row justify-content-center align-items-center text-align-center g-2">
<h1>Überschrift</h1>
<?php
// load data from db into Selectfield options
if ($result->rowCount() > 0) {
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo '<input value="' . $row['column1'] . ' ' . $row['column2'] . '" readonly>';
}
} else {
echo "<option>No items found</option>";
}
?>
</div>
</div>
// TABLE DATA MANIPULATION
// setup php db connection
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// get data From Db into table
$sql = "SELECT column1, column2, column3, column4, column5 FROM TABLE ORDER BY column1(id) ASC";
$resultFromTable = $pdo->query($sql);
// delete Data from db
if (isset($_POST['buttonName'])) {
$deleteId = htmlspecialchars($_POST['hiddenId']);
$deleteSql = 'DELETE FROM TABLE WHERE column1(id) = :column1(id)';
$stmt = $pdo->prepare($deleteSql);
$stmt->execute(['column1(id)' => $deleteId]);
}
?>
<div class="container center-mid">
<div class="row justify-content-center align-items-center g-2">
<h1>Kunden Übersicht</h1>
<table class="table table-striped">
<thead>
<tr>
<th scope="col">column1</th>
<th scope="col">column2</th>
<th scope="col">column3</th>
<th scope="col">column4</th>
<th scope="col">column5</th>
<th scope="col">löschen</th>
</tr>
</thead>
<tbody>
<tr>
<?php
// LOOP TILL END OF DATA
while ($row = $resultFromTable->fetch(PDO::FETCH_ASSOC)) {
?>
<tr>
<form method="post" action="">
<!-- FETCHING DATA FROM EACH ROW OF EVERY COLUMN -->
<td><?php echo $row['column1(id)']; ?></td>
<td><?php echo $row['column2']; ?></td>
<td><?php echo $row['column3']; ?></td>
<td><?php echo $row['column4']; ?></td>
<td><?php echo $row['column5']; ?></td>
<td>
<input type="hidden" name="hiddenId" value="<?php echo $row['column1(id)']; ?>" />
<button class="btn btn-danger" name="buttonName" type="submit">löschen</button>
</td>
</form>
</tr>
<?php
}
?>
</tr>
</tbody>
</table>
</div>
</div>
// Update Data in db
// Update Data in db
<?php
if (isset($_POST['updateButtonName'])) {
// Annahme: Die Werte für die einzelnen Spalten werden über ein Formular übergeben
$valueColumn1 = htmlspecialchars($_POST['inputColumn1']);
$valueColumn2 = htmlspecialchars($_POST['inputColumn2']);
$valueColumn3 = htmlspecialchars($_POST['inputColumn3']);
$valueColumn4 = htmlspecialchars($_POST['inputColumn4']);
$valueColumn5 = htmlspecialchars($_POST['inputColumn5']);
$updateId = htmlspecialchars($_POST['hiddenId']); // Die ID zum Aktualisieren wird vom Formular übermittelt
$sql = 'UPDATE TABLE SET column1 = :column1, column2 = :column2, column3 = :column3, column4 = :column4, column5 = :column5 WHERE column1(id) = :updateId';
$stmt = $pdo->prepare($sql);
// Werte binden und SQL ausführen
$stmt->execute([
':column1' => $valueColumn1,
':column2' => $valueColumn2,
':column3' => $valueColumn3,
':column4' => $valueColumn4,
':column5' => $valueColumn5,
':updateId' => $updateId
]);
}
?>
-----------------------------------------------------------------
Hier noch eine kleine Strukturhilfe und nützliche Plugins falls du mit VS-Code arbeitest!! Ansonsten empfehle ich dir PHP-Storm!
-------------------------------Plugins VS-CODE-------------------
Bootstrap5 Quicksnippets
Bootstrap IntelliSense
PHP IntelliSenes
PHP Intelphense
PHP Expansion Pack
HTML Format
------------------------------------Folder-Struktur--------------
Struktur:
htdocs/
│
├── classes/
│ ├── anotherSite.php
│ ├── mainSite.php
│ ├── connect.php
Styles/
├── styles.css
├── header.php
├── footer.php
├── index.php
--------------------------------- index.php ---------------------
<?php
include 'header.php'; // Header direkt einbinden
require_once './classes/connect.php'; // Connect.php in /classes
?>
<header>
<!-- place navbar here -->
</header>
<main>
<?php include './classes/mainSite.php'; ?>
</main>
<footer>
<!-- place footer here -->
</footer>
<?php
include 'footer.php'; // Footer auch direkt einbinden
?>
--------------------------------- header.php --------------------
<!doctype html>
<html lang="en">
<head>
<title>Title</title>
<!-- Required meta tags -->
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Bootstrap CSS v5.2.1 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous" />
<link rel="stylesheet" href="../styles/styles.css">
</head>
<body>
--------------------------------- footer.php --------------------
<!-- Bootstrap JavaScript Libraries -->
<script
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
crossorigin="anonymous"></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.min.js"
integrity="sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+"
crossorigin="anonymous"></script>
</body>
</html>
--------------------------------- connect.php -------------------
<?php
$host = "localhost";
$dbname = "mydb";
$username = "root";
$password = "";
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
?>
--------------------------------- mainSite.php ------------------
<?php
include __DIR__ . '/../header.php'; // Absoluter Pfad zu header.php
require_once __DIR__ . '/connect.php'; // Absoluter Pfad zu connect.php
session_start();
include __DIR__ . '/../footer.php';
?>
--------------------------------secondSite.php-------------------
<?php
include 'connect.php';
include __DIR__ . '/../header.php';
?>
<?php
include __DIR__ . '/../footer.php';
?>
Da ist ja wirklich einiges für mich dabei, ich denke dass mir diese Codeschnipsel in der nächsten Zeit noch sehr nützlich sein werden!
vielen Dank und Liebe Grüße!