我们如何在php中处理动态表单

Posted

技术标签:

【中文标题】我们如何在php中处理动态表单【英文标题】:How can we process a dynamic form in php 【发布时间】:2018-07-22 14:48:30 【问题描述】:

新手带着另一个问题回来了。任何帮助将非常感激。 假设我们有一个表格,我们在其中写下了一个用户的名字,在它前面有一个输入框,我们可以在其中为提到的用户分配一个等级。在这种情况下,一切都很清楚。我们有一个带有用户名的表单(它的值是'id')和另一个变量,即等级',它们被发布到 php-action-page。因此,在 php-action-page 中,我得到了两个变量,一个是用户的 id,另一个是通过 POST 分配的成绩。在这里,一切都很清楚,过程很简单,因为我只有两个定义的变量。现在,假设我们将“用户”表中的用户列表动态插入到表单中。例如,我们用从数据库中抓取的 10 个用户填写表单。在它们前面有用于插入“等级”的输入框。到目前为止,一切都很好。不过,问题在于下一阶段。 问题是我不知道怎么让php-action-page来做insert,就是给特定用户在数据库中插入成绩,只要有用户的posted变量。这里我有几十个用户和几十个动态变量。 并且如果问题有点模糊,请原谅;然而,尽你最大的努力让我摆脱这种困惑。非常感谢。

这里有一些代码可以使问题更加清晰。 我从以下代码开始:

<?php
require_once ('../inc/takein.php');
$pd = new dbase();
$students = $pd->run_a_query('SELECT * from `checking`');

这里我包括数据库和其他必要的文件。然后我运行一个查询从表中获取我的学生列表。到目前为止,一切都很好。让我感到困惑的下一个动作是以下代码。 在看代码之前,请先看看下图中的 html 设计: Final Design 我完全不知道它是错误的还是正确的。您也可以在这方面有所帮助。

    <form action="grades.php" method="post">
        <table class="table table-bordered font-label" id="item_table">
<?php
foreach ($students as $student) 
    echo '<tr>';
    echo '<td>'.$student['name'].'</td>';
    echo '<td><input type="text" name="grade[]" class="form-control omit-radius-input"></td>';
    echo '<input type="hidden" name="id[]" value="'.$student['id'].'">';
    echo '<tr>';

?>
        </table>
<input type="submit" name="dispatched" class="btn btn-green">
        </form>
在这里,我将信息放在表单元素内的表格中。如上图所示,我从数据库中获取了四个学生。现在我想将这些学生连同他们新设定的成绩一起送回数据库。我想在这里发布的是学生 ID 和他们的成绩。 然后,以下是代码的最后一部分,因为我不知道该怎么做,所以不完整。

if (isset($_POST['dispatched'])) 
    $id[] = $_POST['id'];
    $grade[] = $_POST['grade'];
    // what to do now???!!!
    foreach(...HOW TO DO THE 'FOREACH') 
    ...
    
请你帮我插入我的学生成绩。提前谢谢了。

【问题讨论】:

我不会错,说这个网站上的大多数人都希望看到一些代码。 亲爱的 Mikey,我不知道如何完成这项任务。这就是为什么我没有想出任何代码。无论如何,我认为 Ivo Gelov 和 Ivanivan 似乎更宽容。我希望他们俩都好。 【参考方案1】:

只需将变量命名为数组 - 如果您的表单如下所示

<form method="POST">
  <input type="text" name="grade[12]">
  <br>
  <input type="text" name="grade[15]">
  <br>
  <input type="text" name="grade[7]">
  <br>
  <input type="text" name="grade[21]">

  <!-- continue here -->
</form>

然后在您的 PHP 代码中,您将访问这样的成绩

if(is_array($_POST['grade'])) foreach($_POST['grade'] as $id => $value)

  // REPLACE INTO user_grades(user_id, grade) VALUES($id, $value)

更新

您还应该将学生的 ID 放在 INPUT 字段的名称中 - 否则您将不知道给定年级是哪个学生。

<?php
foreach ($students as $student) 
    echo '<tr>';
    echo '<td>'.$student['name'].'</td>';
    echo '<td><input type="text" name="grade['.$student['id'].']" class="form-control omit-radius-input" value="'.$student['current_grade'].'"></td>';
    echo '<tr>';

?>

foreach 显示在我原来的答案中。

【讨论】:

是的。使您的表单元素看起来是 $_POST 中的数组。但是...请注意,如果 HTML 表单中没有值,则不会发送该元素,因此如果输入了多个内容(当我在学期末评分时,我必须输入成绩和最后一天的学术在 D 或 F 的情况下工作)确保在输入之前验证您是否拥有所有必需的数据位,否则会报告错误并重新提示用户输入 数以百万计的感谢。你做的非常出色。佩妮现在掉了。你拯救了我的一天。祝你一切顺利,兄弟。 我想为 Ivo Gelov 和 Ivanivan 编织一张漂亮的毯子。我很感激。 如果这回答了您的问题 - 非常欢迎您将此答案标记为“已接受”。 它确实做到了亲爱的 IVO。我已经稍微编辑了这个问题以使其更清楚。愿你看看并帮助我解决这个问题。对于标记为“接受”,我很抱歉。 *** 不允许我这样做,因为我的声誉低于 15。:((

以上是关于我们如何在php中处理动态表单的主要内容,如果未能解决你的问题,请参考以下文章

如何创建“动态”表单 - 并在两个字段中存储数据和表单设计

动态添加/删除多个输入字段和输入行 PHP(动态表单中的动态表单)

如何使用 PHP 处理多个表单输入

如何在 MongoDb 中存储动态生成的表单的结果?

使用 PHP 从动态输入字段中捕获数组值并通过电子邮件发送它们

如何使用 Javascript 访问动态表单元素 id