跟踪动态生成的表单元素并将其作为POST变量传递

时间:2011-07-04 17:42:41

标签: php mysql

我有一个页面,当满足某个条件时,它会从数据库中的1个表中检索记录。

我想要达到的目的是让用户有机会更新使用文本框显示的每条记录。

在用户点击“提交”后,我无法解释要继续处理的逻辑。按钮。

通常情况下,如果我更新一条记录(或静态记录数),我将使用适当数量的SQL语句。

由于记录的数量是动态生成的,一次更新所有内容的最佳方法是什么?我怎么知道首先要检索哪些记录要更新?

例如:

好的,我们有一张表,上面有学生ID(ID),姓名(SNAME),科目(SUBJ),每个科目的成绩(GRADE)和一般评论(评论)。

我希望检索所有获得A'并为每位学生写的UNIQUE祝贺词的学生的信息(例如,“好工作”,或者“祝贺'祝贺'祝贺& #39;,或者等等。)

我检索记录并将它们放在页面上,每个学生记录旁边都有一个文本框,用于输入评论。因为我不知道要制作多少文本框,所以我使用学生ID为文本框动态生成名称。用户现在为每个学生输入唯一的评论,然后点击提交。

现在,我应该如何使用每个文本框中输入的值更新这些记录?

我不知道哪些学生首先被检索 - 我怎么知道使用什么名字?我试图避免在提交后再次执行查询 - 但还有其他方法吗?

希望这个问题不会太混乱。

感谢

3 个答案:

答案 0 :(得分:2)

进一步扩展早期答案: 你需要一个循环(例如foreach)来显示和保存textareas。如果textareas的名称包含学生ID,则无需知道名称,因为文本是通过主键(学生ID)插入数据库的。您可以将表单元素命名为数组,例如迭代它们(其中数字是ID):

<textarea name="comment[2345234]"></textarea>
<textarea name="comment[8957485]"></textarea>

按照@evan所述的方式阅读:

foreach((array)$_POST['comment'] as $studentId => $studentComment)
{
    var_dump($studentId, $studentComment);
}

如果您将整个事情实现为自我请求表单(德语为Affenformular),您也可以只使用一个循环来保存和输出textareas。

“我不认为你理解我想要问的是什么。”也许你不明白答案,即使你说过。您不需要学生姓名来保存数据库记录。但如果你真的想提交它,你也可以使用隐藏的输入。

答案 1 :(得分:1)

使用foreach()查找您关心的值,将它们放入数组中,然后处理数组。

答案 2 :(得分:1)

扩展@ Ignacio的答案,使其更容易理解:

foreach($_POST as $name_of_input => $value_of_input)
{
    // do stuff - here is something so you can see the results after the submit
    echo "$name_of_input :: $value_of_input <br>";
}