Database
Create a new database named database2. In this database, create new table named
product as below:
--
-- Table structure for table `product`
--
CREATE TABLE `product` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` varchar(250) NOT NULL,
`price` double NOT NULL,
`status` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `product`
--
INSERT INTO `product` (`name`, `price`, `status`) VALUES
('Tivi 1', 4.5, 1),
('Tivi 2', 7.8, 0),
('Laptop 1', 11, 0),
('Laptop 2', 22, 1),
('Computer 1', 6.7, 1),
('Computer 2', 66, 1);
Database Connection
Connect to database2 database with default account:
Username: root
Password:
<?php
$conn = new PDO("mysql:host=localhost;dbname=database2", 'root', '');
?>
Index Page
Create new php file named index.php as below:
<?php require_once 'connect.php'; ?>
<html>
<head>
<title>AutoComplete with Multiple Selection Using Select2 in PHP-MySQL</title>
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<style type="text/css">
#autoCompleteSelect2 {
width: 600px;
}
</style>
<script>
$(document).ready(function() {
$('#autoCompleteSelect2').select2({
placeholder: 'Keyword...',
multiple: true,
ajax: {
type: 'GET',
url: 'search.php',
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id
}
})
};
}
}
});
});
</script>
</head>
<body>
<form method="post" action="result.php">
<select type="text" id="autoCompleteSelect2" name="ids[]"></select>
<br>
<input type="submit" value="Search">
</form>
</body>
</html>
Search Page
Create new php file named search.php as below:
<?php
require_once 'connect.php';
header('Content-Type: application/json; charset=utf-8');
if (isset($_GET['term'])) {
$stmt = $conn->prepare('select * from product where name like :keyword');
$stmt->bindValue('keyword', '%' . $_GET['term'] . '%');
$stmt->execute();
echo json_encode($stmt->fetchAll(PDO::FETCH_CLASS));
} else {
$stmt = $conn->prepare('select * from product');
$stmt->execute();
echo json_encode($stmt->fetchAll(PDO::FETCH_CLASS));
}
?>
Result Page
Create new php file named result.php as below:
<?php
require_once 'connect.php';
$ids = $_POST['ids'];
$qids = str_repeat('?,', count($ids) - 1) . '?';
$stmt = $conn->prepare('select * from product where id in (' . $qids . ')');
$stmt->execute($ids);
?>
<html>
<head>
<title>AutoComplete with Multiple Selection Using Select2 in PHP-MySQL</title>
</head>
<body>
<table border="1">
<tr>
<th>Id</th>
<th>Name</th>
<th>Price</th>
<th>Status</th>
</tr>
<?php while ($product = $stmt->fetch(PDO::FETCH_OBJ)) { ?>
<tr>
<td><?= $product->id ?></td>
<td><?= $product->name ?></td>
<td><?= $product->price ?></td>
<td><?= $product->status ?></td>
</tr>
<?php } ?>
</table>
<a href="index.php">Back</a>
</body>
</html>
Demo
Index Page
Result Page