首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 獲取表單同名多個 Input 值:數組語法、前端配合與安全處理

     編輯:PHP 綜合知識

核心原理

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 接收處理

<?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>";
}

前端動態增減(jQuery 示例)

<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],
        ];
    }
}

API 端 JSON 格式對應

若前端發送 JSON,對應結構:

// JSON Body
{
    "books": ["三體", "紅樓夢", "活著"]
}
// PHP 接收
$input = json_decode(file_get_contents('php://input'), true);
$books = $input['books'] ?? []; // 直接是數組,無需 [] 後綴

總結

**`name="field[]"` 是 PHP 表單處理的約定俗成**。配合前端動態增減、後端過濾驗證、安全限制,可構建靈活的列表輸入界面。API 開發時統一使用 JSON 格式,避免雙重解析邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved