1 回答

TA贡献1829条经验 获得超7个赞
有很多方法可以解决这个问题,有些人认为您可以/应该输入每个表单元素及其相应的处理程序,因为如果您想使用文本框、选择列表、单选按钮等,它会更容易维护。也就是说,您提到简单地使用文本框,所以这里有一种使用单个数组来驱动整个应用程序的方法。
你没有提到你是否打算使用 SQL 来驱动你的搜索,所以我假设你会使用它。
您可以使用单个数组来驱动 HTML 表单和将由传入值生成的查询。
<?php
// This array will drive your form and your query.
$columns = [
'firstname',
'lastname',
'email',
'address_1',
'address_2',
'city'
];
// The form was submitted.
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Match posted data to the `$columns` array and filter out any empty values.
$postedData = array_filter(array_intersect_key($_POST, array_flip($columns)));
// We have at least 1 search criteria to use.
if (!empty($postedData)) {
// Generate a list of columns for a WHERE clause. Ex. [`address_1 LIKE ?`, `name LIKE ?`]
$terms = array_map(function ($val) {
return "$val LIKE ? ";
}, array_keys($postedData));
// Generate a list of values wrapped in percent signs. Ex. [`123 King St.`, `%tony%`]
$values = array_map(function ($val) {
return "%$val%";
}, $postedData);
// Change this to `AND ` if needed.
$query = 'SELECT * FROM table WHERE ' . implode('OR ', $terms);
// Just showing you what the generated query and data looks like.
var_dump([
$query,
array_values($values)
]);
// Finally, use them to drive your query.
// $sql = $connection->prepare($query);
// $sql->execute(array_values($values));
}
}
?>
<form method="post">
<?php foreach ($columns as $column): ?>
<label>
<input type="text" name="<?php echo $column; ?>" placeholder="<?php echo $column; ?>">
</label>
<br>
<?php endforeach; ?>
<input type="submit" value="Search">
</form>
样本输出
array (size=2)
0 => string 'SELECT * FROM table WHERE firstname LIKE ? OR email LIKE ? ' (length=59)
1 =>
array (size=2)
0 => string '%Tony%' (length=6)
1 => string '%tony@email.com%' (length=16)
- 1 回答
- 0 关注
- 139 浏览
添加回答
举报