我们如何在 php 中处理动态表单
How can we process a dynamic form in php
新手又来了一个问题。任何帮助将非常感激。 假设我们有一个表格,其中我们写下了一个用户的名字,前面有一个输入框,我们可以在其中为提到的用户分配一个等级。在这种情况下,一切都很清楚。我们有一个表单,其中包含用户名(值为 'id')和另一个变量,即成绩',它们发布到 php-action-page。因此,在 php-action-page 中,我通过 POST 获得了两个变量,一个是用户的 id,另一个是分配的等级。在这里,一切都很清楚,过程也很简单,因为我只有两个定义的变量。现在,假设 我们将 'Users' table 中的用户列表动态地插入到表单中。我们用例如从数据库中抓取的 10 个用户来填写我们的表格。在它们前面有输入框,用于插入 'grade'。到目前为止,一切都很好。不过,问题在于下一阶段。 问题是我不知道如何让php-action-page做插入,就是在特定用户的数据库中插入成绩,只要有是用户发布的变量。这里我有几十个用户和几十个动态变量。 并且如果问题有点模糊,请原谅;然而,尽你最大的努力让我摆脱这种困惑。非常感谢。
这里有一些代码可以使问题更清楚一些。
我从以下代码开始:
<?php
require_once ('../inc/takein.php');
$pd = new dbase();
$students = $pd->run_a_query('SELECT * from `checking`');
这里我包括了数据库和其他必要的文件。然后我 运行 查询从 table 中获取我的学生列表。到目前为止,一切都很好。下一行让我感到困惑的是下面的代码。
在查看代码之前,请先查看下图中的 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>
在这里,我将信息放在表单元素中的 table 中。正如你在上图中看到的,我从数据库中得到了四个学生。现在我想将这些学生连同他们新设置的成绩一起发送回数据库。我这里要贴的是学号和成绩。
然后,下面是代码的最后一部分,它是不完整的,因为我不知道该怎么做。
if (isset($_POST['dispatched'])) {
$id[] = $_POST['id'];
$grade[] = $_POST['grade'];
// what to do now???!!!
foreach(...HOW TO DO THE 'FOREACH') {
...
}
}
请你帮我插入我的学生成绩。非常感谢。
只需将您的变量命名为数组 - 如果您的表单如下所示
<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
是我原来的回答。
新手又来了一个问题。任何帮助将非常感激。 假设我们有一个表格,其中我们写下了一个用户的名字,前面有一个输入框,我们可以在其中为提到的用户分配一个等级。在这种情况下,一切都很清楚。我们有一个表单,其中包含用户名(值为 'id')和另一个变量,即成绩',它们发布到 php-action-page。因此,在 php-action-page 中,我通过 POST 获得了两个变量,一个是用户的 id,另一个是分配的等级。在这里,一切都很清楚,过程也很简单,因为我只有两个定义的变量。现在,假设 我们将 'Users' table 中的用户列表动态地插入到表单中。我们用例如从数据库中抓取的 10 个用户来填写我们的表格。在它们前面有输入框,用于插入 'grade'。到目前为止,一切都很好。不过,问题在于下一阶段。 问题是我不知道如何让php-action-page做插入,就是在特定用户的数据库中插入成绩,只要有是用户发布的变量。这里我有几十个用户和几十个动态变量。 并且如果问题有点模糊,请原谅;然而,尽你最大的努力让我摆脱这种困惑。非常感谢。
这里有一些代码可以使问题更清楚一些。 我从以下代码开始:
<?php
require_once ('../inc/takein.php');
$pd = new dbase();
$students = $pd->run_a_query('SELECT * from `checking`');
这里我包括了数据库和其他必要的文件。然后我 运行 查询从 table 中获取我的学生列表。到目前为止,一切都很好。下一行让我感到困惑的是下面的代码。
在查看代码之前,请先查看下图中的 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>
在这里,我将信息放在表单元素中的 table 中。正如你在上图中看到的,我从数据库中得到了四个学生。现在我想将这些学生连同他们新设置的成绩一起发送回数据库。我这里要贴的是学号和成绩。
然后,下面是代码的最后一部分,它是不完整的,因为我不知道该怎么做。
if (isset($_POST['dispatched'])) {
$id[] = $_POST['id'];
$grade[] = $_POST['grade'];
// what to do now???!!!
foreach(...HOW TO DO THE 'FOREACH') {
...
}
}
请你帮我插入我的学生成绩。非常感谢。
只需将您的变量命名为数组 - 如果您的表单如下所示
<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
是我原来的回答。