【问题标题】:insert multiple form data in foreach loop在 foreach 循环中插入多个表单数据
【发布时间】:2014-07-28 08:58:50
【问题描述】:

我真的不确定为什么我无法基于 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 会从 '' 之间获取文本,而不是变量值本身。

感谢您的帮助;

安迪

编辑1:

代码已从小说更新为以下建议,但我仍然收到以下错误:

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

事件名称是“测试事件”。如果我在名为“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 检查显示元素名称正确:

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

当我尝试写入表时,我仍然收到错误消息。 print_r($_POST) 表明 INSERT INTO 仍在尝试写入 TEST_EVENT。

【问题讨论】:

  • 你的query()函数是做什么的......
  • 您如何发布数据以保存它?是在表单提交上吗?
  • 尝试转储数据(如果存在或不存在)。

标签: php mysql


【解决方案1】:

您可以在 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>");

    }

?>

【讨论】:

  • 如果事件名称中有空格,我会收到未定义的索引错误。我该如何处理?另外,我将如何修改它以便将其插入到 $_SESSION["id"] 的日志中?我尝试修改如下: $str = "INSERT INTO logbook (id, ".$event.") VALUES (?,?)", $_SESSION["id"], $_POST[$event];但它不起作用。
  • 如果它有空间,您可以使用函数 trim 过滤它 - php.net/manual/ru/function.trim.php 在我的示例中,您需要更改此字符串: $event = $row['event'];到 $event = trim($row['event']);我编辑我的答案
  • 您的数据库日志中有测试事件列吗?你的 $_POST 中有一个关键的测试事件吗?在 foreach 之前调用 print_r($_POST)
  • 编辑我的问题。即使使用更新的表单,SPACE 处理仍然存在类似错误。
猜你喜欢
  • 2017-02-16
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
相关资源
最近更新 更多