Checkbox (Mehrfachauswahl) und DB-Ausgabe

[Bildschirmfoto]
 Checkbox (Mehrfachauswahl) und DB-Ausgabe

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(0count($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:  AusblendenKopierenLinkZeilen

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->price2","".") .
        
&euro;</label><br>';
    }
    
?>

    <p>
      <button type="submit">Absenden</button>
    </p>

  </form>

  <?php
  
if (isset($_POST["id"])) {

    
$params $_POST["id"];
    
$placeholder implode(','array_fill(0count($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->price2","".") . &euro;<br>';
      
$endprice += $result->price;
    }

    echo 
'<p id="summe">Summe: ' number_format($endprice2","".") . &euro;</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.