如何用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
相关产品推荐
相关产品推荐

