Checkbox (Mehrfachauswahl) und DB-Ausgabe
![[Bildschirmfoto]
Checkbox (Mehrfachauswahl) und DB-Ausgabe [Bildschirmfoto]
Checkbox (Mehrfachauswahl) und DB-Ausgabe](img/checkbox_mehrfachauswahl_db-ausgabe.png)
Mit den Checkboxen lassen sich mehrere Einträge von der DB-Tabelle auswählen, auswerten und ausgeben.
Demo
Bei der PHP mysql()
-Funktion war es relativ leicht gesetzte Checkboxen (über $_POST
) in den SQL-String einzufügen:
1
2
3
4
5
6
7
8
9
10
11
<label> <input type="checkbox" name="id[]" value="1"> Apfel - 0,79 € </label>
<label> <input type="checkbox" name="id[]" value="2"> Birne - 1,22 € </label>
<label> <input type="checkbox" name="id[]" value="3"> Banane - 0,56 € </label>
</form>
<?php
/* Datensätze über Checkbox-Auswählen (mysql()) */
$sql = "SELECT id, fruit, price FROM fruits
WHERE id IN (" . implode(",", mysql_real_escape_string($_POST["id"])) . ")";
?>
Da jedoch seit PHP 7 die mysql()
-Funktionen nicht mehr vorhanden sind, musste eine neue (und sichere) Lösung her.
Wenn mit den PDO()
-Funktionen gearbeitet wird, bietet es sich an die gesetzten Checkboxen über den „Prepared Statements”
(zu deutsch: vorbereitete Anweisung) in den SQL-String einzufügen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<label> <input type="checkbox" name="id[]" value="1"> Apfel - 0,79 € </label>
<label> <input type="checkbox" name="id[]" value="2"> Birne - 1,22 € </label>
<label> <input type="checkbox" name="id[]" value="3"> Banane - 0,56 € </label>
</form>
<?php
/* Datensätze über Checkbox-Auswählen (PDO()) */
$params = $_POST["id"];
$placeholder = implode(',', array_fill(0, count($params), '?'));
$stmt = $db->prepare("SELECT id, fruit, price FROM fruits
WHERE id IN (" . $placeholder . ")");
$stmt->execute($params);
?>
Script: Unser Angebot
Hier das Script wie es im Anwendungsbeispiel funktioniert hat.
Quelltext: Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
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
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
69
70
71
72
73
74
75
76
77
78
79
80
81
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Checkbox (Mehrfachauswahl) und DB-Ausgabe</title>
<style>
body {
font-family: Verdana, Arial, Sans-Serif;
}
input[type=checkbox]:checked+label {
color: Royalblue;
}
p#summe {
border-top: Double Thick Black;
width: 150px;
}
input[type="checkbox"] {
accent-color: Royalblue;
}
</style>
</head>
<body>
<h1>Checkbox (Mehrfachauswahl) und DB-Ausgabe</h1>
<form method="post">
<h4>Unser Angebot:</h4>
<?php
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$stmt = $db->query("SELECT id, fruit, price FROM fruits");
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
foreach ($results as $z => $result) {
echo '<input type="checkbox" name="id[]" value="' . $result->id . '" id="u' . $z . '"> ' .
'<label for="u' . $z . '">' . $result->fruit . ' - ' . number_format($result->price, 2, ",", ".") .
' €</label><br>';
}
?>
<p>
<button type="submit">Absenden</button>
</p>
</form>
<?php
if (isset($_POST["id"])) {
$params = $_POST["id"];
$placeholder = implode(',', array_fill(0, count($params), '?'));
$stmt = $db->prepare("SELECT id, fruit, price FROM fruits WHERE id IN (" . $placeholder . ")");
$stmt->execute($params);
echo '<h4>Ihre Auswahl:</h4>';
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
$endprice = 0;
foreach ($results as $result) {
echo $result->fruit . ' - ' . number_format($result->price, 2, ",", ".") . ' €<br>';
$endprice += $result->price;
}
echo '<p id="summe">Summe: ' . number_format($endprice, 2, ",", ".") . ' €</p>';
}
?>
</body>
</html>
DB-Tabelle
Folgende DB-Tabelle wurde im Anwendungsbeispiel verwendet:
CREATE TABLE `fruits` ( `id` int(11) NOT NULL AUTO_INCREMENT, `fruit` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `price` float NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO `fruits` (`id`, `fruit`, `price`) VALUES (1, 'Apfel', 0.79), (2, 'Birne', 1.22), (3, 'Banane', 0.56), (4, 'Melone', 3.74), (5, 'Orange', 1.22), (6, 'Ananas', 2.54), (7, 'Kiwi', 0.45);
Siehe auch: Löschen von mehreren Einträgen aus einer DB-Tabelle
Tipps
- Responsives Design
- Ob ein großer Monitor, ein Tablet oder Smartphone verwendet wird, das Design der Seite sollte sich automatisch der Größe des Gerätes anpassen.
- SQLite-Datei mit PHP und PDO erstellen
- Der Vorteil von SQLite ist, das die Datenbank eine Text-Datei ist und keine Verbindung zu einem Datenbank-Server benötigt wird.
- 10 Regeln zu Dateinamen
- Die Entscheidung, wie Sie die Dateien und Verzeichnisse (Ordner) auf Ihrer Website benennen ist nicht ganz Ihnen überlassen. Es gibt einiges, worauf Sie bei dieser Wahl achten müssen.
- PHP mit Sicherheit
- Sicheres Programmieren – Traue niemals den Eingaben des Benutzers! Speichern Sie fremde Benutzereingaben nie ohne eine Überprüfung in einer Datenbank oder in einer Datei ab.
Abonniere meinen RSS-Feed
um über aktuelle Seiten benachrichtigt zu werden.
AJAX Textgestaltung Zoom-Funktion Quelltext Mausrad Animierte Sternebewertung Counter Arithmetische Operatoren Dynamische Seiten localStorage Chatroom Authentifizierung Bausteine EVA-Prinzip Affenformular Event-Kalender JSON Zeichnen Animation PHPMailer Floodsperre MySQL Tooltip Mehrfachauswahl Kommentar-Box