一点说明:当您第一次访问页面 (index.php) 时,数据被加载到组合框中。每个option 标记接收客户端编号作为值(C_no)和其他详细信息,作为文本。
另一方面,当您在组合框中选择一个值时,您需要从数据库中获取额外的客户端数据。为此,您需要 jquery 和 ajax。有了它,当组合框的值改变时,你必须向服务器发出一个ajax请求(getClient.php)。作为响应,它会向您发送数据库表中的相应数据。然后,您获取数据并将其放在您喜欢的任何位置 - 在本例中是输入。
一点建议:我建议您开始使用准备好的语句 - 以避免 sql 注入 - 并且不要将用于从 db 获取数据的 php 代码与 html 代码混合。把它们分开。首先,在页面顶部获取数据并将其保存到数组中。然后,在 html 代码中,只使用数组来遍历获取的数据。
index.php
<?php
require 'connection.php';
$sql = 'SELECT C_no, Cname, Caddress FROM Client_table ORDER BY Cname ASC';
// Prepare the statement.
$statement = mysqli_prepare($connection, $sql);
// Execute the statement.
mysqli_stmt_execute($statement);
// Get the result set from the prepared statement.
$result = mysqli_stmt_get_result($statement);
// Fetch the data and save it into an array for later use.
$clients = mysqli_fetch_all($result, MYSQLI_ASSOC);
// Free the memory associated with the result.
mysqli_free_result($result);
// Close the prepared statement. It also deallocates the statement handle.
mysqli_stmt_close($statement);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes" />
<meta charset="UTF-8" />
<!-- The above 3 meta tags must come first in the head -->
<title>Demo</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#name').change(function (event) {
var cNo = $(this).val();
if (cNo === 'Select') {
$('#address').val('');
$('#contact').val('');
} else {
$.ajax({
method: 'post',
dataType: 'json',
url: 'getClient.php',
data: {
'cNo': cNo
},
success: function (response, textStatus, jqXHR) {
if (!response) {
alert('No client data found.');
} else {
$('#address').val(response.address);
$('#contact').val(response.contact);
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert('An error occurred. Please try again.');
},
cmplete: function (jqXHR, textStatus) {
//...
}
});
}
});
});
</script>
<style type="text/css">
body {
padding: 30px;
}
input, select {
display: block;
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="container">
<select name="name" id="name" class="form-control">
<option value="Select">- Select -</option>
<?php
foreach ($clients as $client) {
?>
<option value="<?php echo $client['C_no']; ?>">
<?php echo $client['Cname'] . ' (' . $client['Caddress'] . ')'; ?>
</option>
<?php
}
?>
</select>
<label>Address</label>
<input type="text" id="address" name="address"/>
<label>Contact</label>
<input type="text" id="contact" name="contact"/>
</div>
</body>
</html>
getClient.php
<?php
require 'connection.php';
// Validate posted value.
if (!isset($_POST['cNo']) || empty($_POST['cNo'])) {
echo json_encode(FALSE);
exit();
}
$cNo = $_POST['cNo'];
$sql = 'SELECT
Caddress AS address,
Ccontact AS contact
FROM Client_table
WHERE C_no = ?
LIMIT 1';
// Prepare the statement.
$statement = mysqli_prepare($connection, $sql);
/*
* Bind variables for the parameter markers (?) in the
* SQL statement that was passed to prepare(). The first
* argument of bind_param() is a string that contains one
* or more characters which specify the types for the
* corresponding bind variables.
*
* @link http://php.net/manual/en/mysqli-stmt.bind-param.php
*/
mysqli_stmt_bind_param($statement, 'i', $cNo);
// Execute the statement.
mysqli_stmt_execute($statement);
// Get the result set from the prepared statement.
$result = mysqli_stmt_get_result($statement);
// Fetch the data and save it into an array for later use.
$clientDetails = mysqli_fetch_array($result, MYSQLI_ASSOC);
// Free the memory associated with the result.
mysqli_free_result($result);
// Close the prepared statement. It also deallocates the statement handle.
mysqli_stmt_close($statement);
if (!isset($clientDetails) || !$clientDetails) {
echo json_encode(FALSE);
} else {
echo json_encode($clientDetails);
}
exit();
connection.php
<?php
// Db configs.
define('HOST', 'localhost');
define('PORT', 3306);
define('DATABASE', 'your-db');
define('USERNAME', 'your-user');
define('PASSWORD', 'your-pass');
// Display eventual errors.
error_reporting(E_ALL);
ini_set('display_errors', 1); /* SET IT TO 0 ON A LIVE SERVER! */
// Enable internal report functions.
$mysqliDriver = new mysqli_driver();
$mysqliDriver->report_mode = (MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// Create db connection.
$connection = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE, PORT);
创建表语法
DROP TABLE IF EXISTS `Client_table`;
CREATE TABLE `Client_table` (
`C_no` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Cname` varchar(100) DEFAULT NULL,
`Caddress` varchar(100) DEFAULT NULL,
`Ccontact` varchar(100) DEFAULT NULL,
PRIMARY KEY (`C_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `Client_table` (`C_no`, `Cname`, `Caddress`, `Ccontact`)
VALUES
(1,'Mohit','xyz','0123645789'),
(2,'Ramesh','abc','7485962110'),
(5,'Tanja','def','1232347589'),
(6,'Paul','pqr','0797565454'),
(7,'Mohit','klm','0123645789');