You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP编写多条件搜索SQL查询?从vehicles表获取车辆年份

实现带数组存储表单值的车辆查询表单(含数据库年份数据获取)

我来帮你搞定这个表单需求!你想要的是带文本框、下拉列表,且所有表单值都存在数组里,同时从vehicles数据库表获取车辆年份数据,对吧?下面是完整的实现方案,分步骤给你讲清楚:

一、完整的HTML表单结构

首先,我们把你给出的代码补全,并且确保表单元素的name属性都以[]结尾,这样提交后的值会自动存储为数组:

<form name="frm_vehicles" action="processinput.php" method="post">
    <!-- 第一组车辆信息 -->
    <div class="form-row">
        <label for="year">车辆年份:</label>
        <!-- 这里先保留文本输入,后面会改成从数据库获取年份的下拉列表 -->
        <input type="text" name="year[]" placeholder="例如:2020">
        
        <label for="choice">车辆类型:</label>
        <select name="choice[]">
            <option value="cars" selected="selected">轿车</option>
            <option value="lorry">货车</option>
        </select>
        
        <label for="query">查询状态:</label>
        <select name="query[]">
            <option value="available" selected="selected">可售</option>
            <option value="sold">已售</option>
        </select>
    </div>

    <!-- 动态添加/删除表单行的按钮 -->
    <button type="button" onclick="addFormRow()">添加另一辆车</button>
    <input type="submit" value="提交查询">
</form>

二、从vehicles表获取年份数据并填充下拉列表

如果想让用户直接选择年份(比手动输入更准确),可以用PHP从数据库查询年份,然后动态生成下拉选项:

<?php
// 数据库连接参数,替换成你的实际信息
$servername = "localhost";
$db_username = "你的数据库用户名";
$db_password = "你的数据库密码";
$db_name = "你的数据库名";

// 创建数据库连接
$conn = new mysqli($servername, $db_username, $db_password, $db_name);

// 检查连接是否成功
if ($conn->connect_error) {
    die("数据库连接失败:" . $conn->connect_error);
}

// 查询vehicles表中的唯一年份(去重并按降序排列)
$sql = "SELECT DISTINCT year FROM vehicles ORDER BY year DESC";
$result = $conn->query($sql);
?>

<!-- 替换原来的文本输入为下拉列表 -->
<div class="form-row">
    <label for="year">选择车辆年份:</label>
    <select name="year[]" id="year">
        <option value="">-- 请选择年份 --</option>
        <?php
        // 遍历查询结果生成选项
        if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()) {
                echo "<option value='{$row['year']}'>{$row['year']}</option>";
            }
        } else {
            echo "<option value=''>暂无年份数据</option>";
        }
        // 关闭数据库连接
        $conn->close();
        ?>
    </select>
    
    <!-- 车辆类型和查询状态的下拉列表和之前一样 -->
    <label for="choice">车辆类型:</label>
    <select name="choice[]">
        <option value="cars" selected="selected">轿车</option>
        <option value="lorry">货车</option>
    </select>
    
    <label for="query">查询状态:</label>
    <select name="query[]">
        <option value="available" selected="selected">可售</option>
        <option value="sold">已售</option>
    </select>
</div>

三、后端处理提交的数组数据(processinput.php)

因为表单值都是数组,所以在后端需要遍历数组来处理每一组数据:

<?php
// 接收表单提交的数组,用??运算符避免未定义索引错误
$years = $_POST['year'] ?? [];
$vehicle_types = $_POST['choice'] ?? [];
$query_statuses = $_POST['query'] ?? [];

// 遍历每一组数据进行处理
foreach ($years as $index => $year) {
    $type = $vehicle_types[$index] ?? '';
    $status = $query_statuses[$index] ?? '';

    // 先做简单的数据验证
    if (!empty($year) && !empty($type)) {
        // 这里可以添加你的业务逻辑,比如存入数据库、查询数据等
        echo "车辆年份:{$year},类型:{$type},状态:{$status}<br>";
    } else {
        echo "第".($index+1)."组数据不完整,请检查!<br>";
    }
}
?>

四、可选:动态添加/删除表单行

如果需要用户输入多组车辆信息,可以添加JavaScript函数来实现动态增删表单行:

// 添加新的表单行
function addFormRow() {
    const form = document.querySelector('form[name="frm_vehicles"]');
    const newRow = document.createElement('div');
    newRow.className = 'form-row';
    // 这里的HTML结构和第一组保持一致
    newRow.innerHTML = `
        <br>
        <label for="year">车辆年份:</label>
        <input type="text" name="year[]" placeholder="例如:2020">
        
        <label for="choice">车辆类型:</label>
        <select name="choice[]">
            <option value="cars" selected="selected">轿车</option>
            <option value="lorry">货车</option>
        </select>
        
        <label for="query">查询状态:</label>
        <select name="query[]">
            <option value="available" selected="selected">可售</option>
            <option value="sold">已售</option>
        </select>
        
        <button type="button" onclick="removeRow(this)">删除</button>
    `;
    form.appendChild(newRow);
}

// 删除指定的表单行
function removeRow(button) {
    button.parentElement.remove();
}

内容的提问来源于stack exchange,提问作者kheel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:54:03