如何使用PHP和jQueryAjax从数据库中获取数据并将其分配给输入值

如何使用PHP和jQueryAjax从数据库中获取数据并将其分配给输入值,php,jquery,ajax,html,forms,Php,Jquery,Ajax,Html,Forms,在我的小应用程序中,我的数据库中有owner表。每个所有者都有自己的ID、姓名、地址和描述(这些是本表的列) 在我的网站上,我有select元素,您可以在其中选择所有者 在此选择下,我有3个输入(一个用于名称,一个用于地址,一个用于说明) 当我更改select元素中的选项时,我希望使用AJAX将数据库中的数据填充到所有输入中 我的PHP: <?php $sql_select=$mysqli->prepare("SELECT id, name FROM owner ORDER BY

在我的小应用程序中,我的数据库中有
owner
表。每个
所有者
都有自己的ID、姓名、地址和描述(这些是本表的列)

在我的网站上,我有
select
元素,您可以在其中选择所有者

在此选择下,我有3个输入(一个用于名称,一个用于地址,一个用于说明)

当我更改select元素中的选项时,我希望使用AJAX将数据库中的数据填充到所有输入中

我的PHP:

<?php
  $sql_select=$mysqli->prepare("SELECT id, name FROM owner ORDER BY id DESC");
  $sql_select->execute();
  $sql_select->store_result();
  $sql_select->bind_result($id_owner, $name_owner);
  $select = $_POST['owner'];
  echo "<option value=0 ".selected.">Select...</option>";
  while($sql_select->fetch()) {
    if($select == $id_owner){
      $selected="selected";
    }
    else {
      $selected="";
    }
    echo "<option value=".$id_owner." ".$selected." data-id=".$id_owner.">".$id_owner." ".$name_owner."</option>";
  }
?>
<label for="owner_name">Owner name</label>
<input id="owner_name" name="owner_name" type="text">
<label for="owner_address">Owner address</label>
<input id="owner_address" name="owner_address" type="text">
<label for="owner_description">Owner description</label>
<input id="owner_description" name="owner_description" type="text">
JS:

但有一个问题,假设我有1000个所有者,并且思考有多少数据需要分配到HTML中。为了避免使用HTML数据属性,我希望使用AJAX从数据库中读取我选择的每个更改的数据

举个小例子,看看我到底是什么意思。
有人能给我一个从哪里开始的线索吗?

首先,创建一个包含用户列表的选择字段,以便显示他们的姓名,并使用userId作为值

创建一个PHP文件,该文件可以接收用户id($\u POST['user\u id']),从数据库中获取用户,将用户所需的详细信息放入数组中。然后将数组转换为JSON并回显。echo json_encode($userArray)

在HTML中,使用jQuery/Ajax将select字段的值发布到PHP页面。它将使用一些包含用户详细信息的JSON进行响应,然后您可以将这些值放入相关字段中


请参阅jquery ajax文档,例如,您希望向url发出请求,并获得包含所需数据(id、名称等)的
JSON
响应,如下所示:

{
    "ID":"1",
    "name":"Bobby Longsocks",
    "address":"some place",
    "description":"A description here"
}
$('body').on('change', '#owner', function () {
    var changedOption = $(this).find('option:selected').val();
    var data = {
        "user_id" : changedOption
    };
    $.get('ajax.php', data, function (response) {
        $('#owner_name').empty().html(response.name);
        $('#owner_addr').empty().html(response.address);
        $('#owner_desc').empty().html(response.description);
    }, 'json')
});
使用jQuery可以做您需要做的事情,现在您已经有了这种格式的数据,一种方法是使用——这对于本例来说是合适的,因为这是下面的PHP将要寻找的

你可以这样做:

{
    "ID":"1",
    "name":"Bobby Longsocks",
    "address":"some place",
    "description":"A description here"
}
$('body').on('change', '#owner', function () {
    var changedOption = $(this).find('option:selected').val();
    var data = {
        "user_id" : changedOption
    };
    $.get('ajax.php', data, function (response) {
        $('#owner_name').empty().html(response.name);
        $('#owner_addr').empty().html(response.address);
        $('#owner_desc').empty().html(response.description);
    }, 'json')
});
如果用户选择是这样的:

<option value="1" data-id="1">1 ABC</option>

这将返回我们开始时的响应。

感谢您的回答,我将在几个小时内尝试实现这一点。我让你知道:)第一件事已经做了(选择字段,字段的名称和用户名作为你可以看到的值)。谢谢你的回答,我没有使用@SheppardDigital提供的提示就实现了我的目标,但这个答案很详细,它回答了我的问题。你说的“别忘了清理”是什么意思?我可以用POST代替GET吗?我不是PHP方面的专家。你可以使用post是的,那也行。通过清理输入,我的意思是避免不必要的用户输入,例如任意代码。你也可以看看这个。
<option value="1" data-id="1">1 ABC</option>
<?php
try {
    // Set up the response
    $response = array();
    // DB details
    $db = new PDO(your_db_details);
    // Read 
    if ( $_SERVER['REQUEST_METHOD'] == "GET" ) {
        // Dont forget to sanitize!
        $user_id = $_GET['user_id'];
        // Build the query
        $stmt = $db->query("SELECT `ID`, `name`, `address`, `description` FROM `your_table` WHERE `id` = '$user_id'");
        if ($user_id) {
            // If the ID is set, fetch the record
            $response = $stmt->fetch(PDO::FETCH_ASSOC);
        }
        else {
            // Do something if no id was set
        }
        // Encode it as JSON and ship it back
        echo json_encode($response);
    }

} catch(Exception $e) {
    // Do some error handling
}
?>