将项目列表从HTML表单发布到PHP

时间:2016-02-25 01:32:29

标签: php html

我想要实现的是拥有一个未定义数量的输入字段(用户可以在网站上添加带加号按钮的其他输入字段)。每个输入字段的id / name都附加一个递增的数字。 这已经很好了。

示例:

<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. 为每个案例打开和关闭数据库连接会更好吗,还是像上面的例子一样?是不是有办法打开一个连接并立即推送所有添加的信息?我该怎么做呢?
  3. 任何指针/助手都非常感激。

2 个答案:

答案 0 :(得分:3)

HTML

将HTML输入的name属性设置为PHP的数组:

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

这样,字段将作为数组发布,您可以轻松地在PHP中的每个字段上循环。

PHP

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

答案 1 :(得分:0)

为了使您的代码更具可扩展性,更少冗余或可重复,我建议使用PDO动态和自动数据绑定,例如Github上列出的数据绑定,它在绑定多次使用数据时很有用。它为您完成所有绑定,这里是GitHub上的链接https://github.com/JstMagic/dynamicPDO将它与Tiles Answer结合使用

  

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

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