在foreach循环中插入多个表单数据


insert multiple form data in foreach loop

我真的不确定为什么我不能根据foreach循环将数据插入到表中。发送数据的表单是用下面的代码创建的:

<?php
        $eventList = query("SELECT event FROM PrimaryEvents");
        foreach ($eventList as $row)
        {
        //build the form
                echo("<div class='form-group'>");
                        echo("<label for='{$row["event"]}' class='col-lg-2 control-label'>'{$row["event"]}'</label>");
                        echo("<div class='col-lg-10'>");
                        echo("<input type='number' class='form-control' id='{$row["event"]}' name='{$row["event"]}' placeholder='????'>");
                echo("</div>");
                        echo("</div>");
        }
?>

$eventList数组包含事件名称列表。

当涉及到更新数据库时,我已经尝试了这段不起作用的代码:

        $eventList = query("SELECT event FROM PrimaryEvents");
        logConsole(' eventlist is: ', $eventList, true);
        foreach ($eventList as $row)
        {
        query("INSERT INTO logbook ('{$row["event"]}') VALUES (?)", $_POST['{$row["event"]}']);
        }

我找了又找,但还没有找到解决办法。我已经尝试了$row["event], '$row["event"]等的一些变化,但已经尝试了这么多,现在我开始感到困惑。

我总是处理"意味着php将从"之间的文本,而不是变量值本身。

感谢您的帮助;

安迪

EDIT1:

代码从小说更新到下面的建议,但我仍然得到以下错误:

Notice: Undefined index: Test Event in /var/www/NST/public/input.php on line 53
Fatal error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Event) VALUES (?)' at line 1 in /var/www/NST/includes/functions.php on line 164

事件名称为"Test event"。如果我在一个名为"testevent"的事件上使用代码,那么它工作得很好。

基于虚构答案的代码如下:
        $eventList = query("SELECT event FROM PrimaryEvents");
        foreach ($eventList as $row)
        {    
        $event = trim($row['event']);
        $str = "INSERT INTO logbook (".$event.") VALUES (?)";
        query($str, $_POST[$event]);
        }

另外,我希望将所有事件数据添加到数据库的同一条目中(目前每次通过循环写入新行并增加主id)。

谢谢你的帮助!

EDIT2:根据虚构的建议,现在已经更新了表单。代码现在是:

<?php
        $eventList = query("SELECT event FROM PrimaryEvents");
        foreach ($eventList as $row)
        {
        //build the form
                echo("<div class='form-group'>");
                        echo("<label for='".$row["event"]."' class='col-lg-2 control-label'>'".$row["event"]."'</label>");
                        echo("<div class='col-lg-10'>");
                        echo("<input type='number' class='form-control' id='".$row["event"]."' name='".$row["event"]."' placeholder='????'>");
                    echo("</div>");
                echo("</div>");
        }
?>

Chrome inspect显示元素名称正确:

<input type="number" class="form-control" id="Test Event" name="Test Event" placeholder="????">

我仍然得到一个错误,当我试图写到表。print_r($_POST)显示INSERT INTO仍然试图写入TEST_EVENT.

您可以将此代码替换为foreach:

query("INSERT INTO logbook ('{$row["event"]}') VALUES (?)", $_POST['{$row["event"]}']);

的代码:

$event = trim($row['event']);
$str = "INSERT INTO logbook (".$event.") VALUES (?)";
query($str, $_POST[$event]);

这应该能解决你的问题

也修改你的窗体粘贴代码:

<?php
    $eventList = query("SELECT event FROM PrimaryEvents");
    foreach ($eventList as $row)
    {
    //build the form
            echo("<div class='form-group'>");
                    echo("<label for='".$row["event"]."' class='col-lg-2 control-label'>'".$row["event"]."'</label>");
                    echo("<div class='col-lg-10'>");
                    echo("<input type='number' class='form-control' id='".$row["event"]."' name='".$row["event"]."' placeholder='????'>");
            echo("</div>");
                    echo("</div>");
    }
?>