1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
有很多方法可以解決這個(gè)問題,有些人認(rèn)為您可以/應(yīng)該輸入每個(gè)表單元素及其相應(yīng)的處理程序,因?yàn)槿绻胧褂梦谋究?、選擇列表、單選按鈕等,它會(huì)更容易維護(hù)。也就是說,您提到簡單地使用文本框,所以這里有一種使用單個(gè)數(shù)組來驅(qū)動(dòng)整個(gè)應(yīng)用程序的方法。
你沒有提到你是否打算使用 SQL 來驅(qū)動(dòng)你的搜索,所以我假設(shè)你會(huì)使用它。
您可以使用單個(gè)數(shù)組來驅(qū)動(dòng) 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 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)