簡體   English   中英

從HTML表單向PHP發布項目列表

[英]Posting list of items from HTML form to PHP

我要達到的目的是要有一個不確定數量的輸入字段(用戶可以使用站點上的加號按鈕添加其他輸入字段)。 每個輸入字段的ID /名稱后面都會增加一個數字。 這已經可以正常工作了。

例:

<input type="text" name="field1" id="field1">
<input type="text" name="field2" id="field2">
<input type="text" name="field3" id="field3">
<button id="addanotherinputfield">+ Add new</button>

因此,從理論上講,可能有200多個輸入字段,最后一個是:

<input type="text" name="field200" id="field200">

我目前將其推為$ _POST(簡化的代碼):

<?php
    $db = new PDO("mysql:host=localhost;dbname=$dbname", $dbtable, $dbpass);
    $sdh = $db->prepare('INSERT INTO yeehaw (name,value) VALUES (:name,:value)');
    if($_POST['field1'] !='') {
        $name = 'field1';
        $value = $_POST['field1'];
        $sdh->bindParam(':name', $name);
        $sdh->bindParam(':value', $value);
        $sdh->execute();
    }
    if($_POST['field2'] !='') {
        $name = 'field2';
        $value = $_POST['field2'];
        $sdh->bindParam(':name', $name);
        $sdh->bindParam(':value', $value);
        $sdh->execute();
    }
    if($_POST['field3'] !='') {
        $name = 'field3';
        $value = $_POST['field3'];
        $sdh->bindParam(':name', $name);
        $sdh->bindParam(':value', $value);
        $sdh->execute();
    }
    $db = null;
?>

目前,它也正在工作。

但是出於明顯的原因,這不是一種好的方法,因為它不可擴展(我必須在代碼中添加每種情況,並且我希望清除不必要的代碼)。 我已經用谷歌搜索了一下,似乎無法找到兩個基本問題的答案(也許我正在尋找錯誤的術語/術語?):

  1. 我怎樣才能使我的PHP規模? 因此,是否有1個或1.000.000個輸入字段而不必在代碼中列出每種情況(例如循環/ foreach)並不重要?
  2. 每種情況下打開和關閉數據庫連接會更好還是像上面的示例一樣? 是否沒有辦法打開一個連接並立即推送所有添加的信息? 我將如何處理?

任何指針/幫手非常感謝。

HTML

將HTML輸入的name屬性設置為PHP的數組:

<input type="text" name="field[]" />

這樣,字段將以數組形式發布,您可以輕松地遍歷PHP中的每個字段。

的PHP

foreach($_POST['field'] as field){
    // handle input
}

為了使您的代碼更具可伸縮性,減少冗余或重復性,我建議使用PDO動態和自動數據綁定,例如Github上列出的綁定,它在綁定多個數據時很有用,我已經使用了幾次。 它為您完成了所有綁定,這是在GitHub上的鏈接https://github.com/JstMagic/dynamicPDO與Tiles結合使用答案

<input type="text" name="field[]" />

  foreach($_POST['field'] as field){ // handle input } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM