表单中提交按钮的动态数量


Dynamic amount of submit buttons in a form

我有一个包含多个子按钮的表单。我通过给它们不同的名称来捕捉被点击的按钮,并在处理表单的php代码中检查按钮名称。现在我想让这些按钮成为动态的,并正在寻找如何处理这一问题的解决方案。

假设我有一个像这样的数组。

Array
(
    [0] => Array
        (
            [ID] => 1
            [Name] => Button 1
        )
    [1] => Array
        (
            [ID] => 2
            [Name] => Button 2
        )
)

现在,我自然地用这样的东西循环这个数组:

foreach($buttons as $button) 
    echo "<input type='submit' name='".$button['ID']."' value='".$button['Name']."'>";

在页面顶部,我"捕捉"的点击

if(isset($_POST['nameofthebutton'])) {

这就是我的问题所在。如果我想使用动态数量的按钮。我如何在这里捕捉它们?除了一个值不同之外,它们都会做同样的事情,假设按下按钮的按钮ID。我该如何捕捉?我以前不知道需要多少个按钮,所以我不能为每个按钮写if语句。有人知道吗?

您可以对用于打印此表单的同一数组进行迭代,检查单击了哪个数组:

foreach($buttons as $button){
    if(isset($_POST[$button['ID']])){
        //action here...
    }
}
echo '<input type="button" name="btn['.$button['ID'].']" value="'.$button['Name'].'" />';

然后获取您的价值

$buttons = $_POST['btn'];
foreach ($buttons as $id => $button) {
//
}

正如您已经在做的那样,有一个包含按钮名称的数组:

$buttons = [['ID' => 1, 'Name' => 'some_name'], ...];
foreach($buttons as $button) {
    echo '<input type="submit" name="'.$button['Name'].'" value="'.$button['ID'].'" />';
}

然后,当您收到POST请求时,迭代按钮名称,并检查它们是否在$_POST:中定义

foreach ($buttons as $button) {
    if (isset($_POST[ $button['Name'] ])) {
         // This submit button is in $_POST
    }
}

创建一个隐藏的输入元素,比如id='btnInfo'。现在将其添加到您的按钮元素:onClick="getBtnInfo(".$btn['ID'].")"。创建如下所示的javascript函数:

function getBtnInfo(var i) { var btn=Document.getElementById('btnInfo'); btn.value=i; }

在php脚本中,使用$_POST['btnInfo']获取按下按钮的id。