PDO Datenbank Verbindung herstellen & Verwendung von Prepared Statements mit HTML Website Code?

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';
?>

BigGunki 
Beitragsersteller
 07.11.2024, 13:16

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!