繁体   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