HTML 表單中多個同名 ``,名稱以 `[]` 結尾,PHP 自動解析為數組:
<form action="process.php" method="post">
<input type="text" name="books[]" placeholder="書名 1">
<input type="text" name="books[]" placeholder="書名 2">
<input type="text" name="books[]" placeholder="書名 3">
<button type="submit">提交</button>
</form>
<?php
// process.php
$books = $_POST['books'] ?? []; // 自動獲得數組
// 過濾空值、去除首尾空格、防 XSS
$books = array_map('trim', $books);
$books = array_filter($books, fn($v) => $v !== '');
$books = array_map('htmlspecialchars', $books);
if (empty($books)) {
exit('請至少填寫一本書');
}
// 業務邏輯:批量插入、驗證重複等
foreach ($books as $book) {
// $db->insert('books', ['title' => $book, 'user_id' => $uid]);
echo "保存: " . htmlspecialchars($book) . "<br>";
}
<div id="bookList">
<input type="text" name="books[]" class="book-input" placeholder="書名">
</div>
<button type="button" id="addBook">+ 添加書名</button>
<script>
$('#addBook').click(function() {
$('#bookList').append('<div><input type="text" name="books[]" class="book-input" placeholder="書名"> <button type="button" class="removeBook">刪除</button></div>');
});
$('#bookList').on('click', '.removeBook', function() {
$(this).parent().remove();
});
</script>
<!-- 書名 + 作者 成組 -->
<input type="text" name="books[0][title]">
<input type="text" name="books[0][author]">
<input type="text" name="books[1][title]">
<input type="text" name="books[1][author]">
<!-- PHP 接收:$_POST['books'] = [ ['title'=>'', 'author'=>''], ... ] -->
| 風險 | 防護 |
|---|---|
| 超大數組導致內存耗盡 | max_input_vars = 1000 (php.ini) 限制輸入變量數量 |
| 空值/垃圾數據 | `array_filter` + `array_map('trim')` + 長度校驗 |
| XSS 注入 | 入庫前 `htmlspecialchars`,輸出時上下文編碼 |
| SQL 注入 | PDO Prepared Statements,禁止拼接 |
| 重複提交 | 前端提交後禁用按鈕,後端冪等 Key(如用戶+時間戳)去重 |
<input type="file" name="photos[]" multiple>
// $_FILES['photos'] 結構:
/*
[
'name' => ['a.jpg', 'b.png'],
'type' => ['image/jpeg', 'image/png'],
'tmp_name' => ['/tmp/phpX1', '/tmp/phpX2'],
'error' => [0, 0],
'size' => [12345, 67890]
]
*/
// 重組為易用格式
$files = [];
foreach ($_FILES['photos']['name'] as $i => $name) {
if ($_FILES['photos']['error'][$i] === UPLOAD_ERR_OK) {
$files[] = [
'name' => $name,
'type' => $_FILES['photos']['type'][$i],
'tmp_name' => $_FILES['photos']['tmp_name'][$i],
'size' => $_FILES['photos']['size'][$i],
];
}
}
若前端發送 JSON,對應結構:
// JSON Body
{
"books": ["三體", "紅樓夢", "活著"]
}
// PHP 接收
$input = json_decode(file_get_contents('php://input'), true);
$books = $input['books'] ?? []; // 直接是數組,無需 [] 後綴
**`name="field[]"` 是 PHP 表單處理的約定俗成**。配合前端動態增減、後端過濾驗證、安全限制,可構建靈活的列表輸入界面。API 開發時統一使用 JSON 格式,避免雙重解析邏輯。