循环表单输入的更好方法是什么?

时间:2015-01-20 21:47:52

标签: php html

我有一个带有输入的表单,可以通过单击按钮动态添加。设置这些输入的名称/ id以利用PHP中的数组(阅读此技巧),但我不喜欢这种方法,因为它感觉不对,因为我想这样做我最初的想法,但在我尝试时遇到了问题。我可以使用一些指导,因为我过度思考了这一点。这就是我现在所拥有的......

HTML

<input name="specs[1][number]" id="specs[1][number]" type="text" placeholder="Specs..." />

PHP

$specCounter = count($_POST[specs]);

for ($i = 1; $i <= $specCounter; $i++) {

    echo '<li>' . $_POST[specs][$i][number] . '</li>';

};

正如你所看到的,它很直接;我有一个名为specs的数组,输入的值最终将被放入数字槽。

但我最初想要的是这样的:

HTML

<input name="specs1" id="specs1" type="text" placeholder="Specs..." />
<input name="specs2" id="specs2" type="text" placeholder="Specs..." />

我遇到的问题是在PHP中循环使用这些问题,因为我不知道如何计算这些输入...

PHP

var myTotal = 'total inputs that have specs in the name/id';

for (var i = 1; i < myTotal; i++) {
    echo $_POST['specs' . i];
};

在撰写本文时,我突然意识到我可能应该探索正则表达式,但也许不是吗?任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:2)

$i = 1;
while(isset($_POST['specs'.$i]))
{
    echo $_POST['specs'.$i];
    $i++;
}

另外一种说法:

for($i=1; isset($_POST['specs'.$i]); $i++) 
{
    echo $_POST['specs'.$i];
}

无论您喜欢哪种

或者如果您的号码不连续:

foreach($_POST as $key => $value) {
    if(substr($key) === 'specs') {
        echo $value;
    }
}

答案 1 :(得分:1)

可以这样做:

foreach($_POST as $key => $value) {
    if(substr($key) === 'specs') {
        echo $value;
    }
}

答案 2 :(得分:0)

也许您想使用foreach代替for

foreach($_POST[specs] as $spec) {
    echo '<li>' . $spec['number'] . '</li>';
}

答案 3 :(得分:0)

通常首选使用数组的第一种方法。我会简化它:

<强> HTML

<input name="specs[1]" type="text"..." />
<input name="specs[2]" type="text"..." />

<强> PHP

foreach($_POST['specs'] as $key => $val) {
    echo "specs $key is $val";
}

除非您需要它们,否则您甚至不必指定索引,它们将自动创建:

<input name="specs[]" type="text"..." />
<input name="specs[]" type="text"..." />