从动态php表单循环表单值

时间:2015-04-05 14:05:06

标签: php html forms foreach

我在现有的基于PHP的应用程序之上构建,以更新菜单项名称和价格。

我已经生成了一个动态表单,其中填充了数据库中的结果。这个想法是用户可以更新项目名称或价格以更新数据库中的信息。

表单工作正常,但我无法从表单中获取信息。每个Item都有一个单独的ID,因此我需要在表单中进行foreach,并且每次都使用相应的item id调用update函数。

我可以很好地处理数据库方面,但我正在构建的应用程序有一个' getInput'用于检查输入的函数以及从表单中获取输入,我想使用它。

这是getInput函数:

public static function exists($type = 'post') {
        switch($type) {
            case 'post':
                return (!empty($_POST)) ? true : false;
            break;
            case 'get';
                return (!empty($_GET)) ? true : false;
            break;
            default:
                return false;
            break;
        }
    }

    public static function get($item) {
        if(isset($_POST[$item])) {
            return $_POST[$item];
        } else if(isset($_GET[$item])) {
            return $_GET[$item];
        }
        return '';
    }

}

我遇到的问题是在调用此函数时它只返回表单中的最后一项。有没有办法可以迭代表格并获得每个项目?

到目前为止,这是动态表单和getInput代码:

$menuItems = DB::getInstance()->get('menu_items', array('cat_id', '=', $cat_id ));

                    if($menuItems->count()) {

                        echo '<form class="updateMenu" action="" method="post">';
                        echo '<table  class="gridtable gridtableMenu">';
                        echo '<tr><th>Item Name</th><th>Item Price</th></tr>';

                            foreach($menuItems->results() as $item) {

                                echo '<tr>';
                                echo '<td class="menu-name"><input type="text" name="itemName" value="' . $item->item_name . '" required></td>';
                                echo '<td class="menu-price"><input type="number" step="any" name="itemPrice" value="' . $item->item_price . '" required></td>';
                                echo '<input type="hidden" name="id" value="' . $item->id . '">';
                                echo '</tr>';

                            }

                        echo '</table>';
                        echo '<input type="submit" name="updateMneu" value="Update Menu">';
                        echo '</form>';

                    } else {
                        echo '<div class="error">No items have been added to this menu</div>';
                    }

            } // close categories foreach

        } // close if category set


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

            echo Input::get('id'), '</br>';
            echo Input::get('itemName'), '</br>';
            echo Input::get('itemPrice'), '</br>';

        } //close if isset updateMenu If

所以我想在本节中考虑一个foreach:

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

        echo Input::get('id'), '</br>';
        echo Input::get('itemName'), '</br>';
        echo Input::get('itemPrice'), '</br>';

        //update ite in the database, and move to gthe next item.

    } //close if isset updateMenu If

我将处理数据验证以及之后的事情。

1 个答案:

答案 0 :(得分:0)

由noobHere&#39;发布答案是将输入类型名称设置为数组。例如name="itemName[]"代替name="itemName"