Checkbox (Mehrfachauswahl) und DB-Ausgabe

[Bildschirmfoto / Grafik]
 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

Daten auf mehreren Seiten aufteilen / Kombinierte Formular.- und Blätterfunktion
Damit nicht alle Daten einer DB-Tabelle auf einmal auf der Seite zu sehen sind, sondern übersichtlich auf mehreren Seiten verteilt stehen, benutzt man eine Seitennavigation zum blättern (Pagination).
Formulardaten über AJAX überprüfen und speichern
Ohne lästigen Seitenwechsel werden die eingegebenen Daten im Formular überprüft und gespeichert.
Spalten einer Tabelle dynamisch ändern
Manchmal möchte man die Spalten einer Tabelle dynamisch ändern so das diese individuell angezeigt werden können, wie das geht wird hier an einem Beispiel demonstriert.
Kontaktformular - E-Mail mit PHPMailer und SMTP versenden
Manchmal möchte man die E-Mail vom Kontaktformular über dem PHPMailer und SMTP versenden. Weil das aber nicht so einfach ist und bestimmte Einstellungen beachtet werden müssen, stelle ich hier beispielhaft ein PHP-Skript vor.

Abonniere meinen RSS-Feed um über aktuelle Seiten benachrichtigt zu werden.