如何在while循环中从动态生成的文本框中发布多个条目

时间:2016-12-31 11:37:46

标签: php mysql

请我正在学习php中的学校成绩计算项目。我有一个页面,可以让所有注册了特定科目的学生参加。 while循环为每个学生的姓名(CA1,CA2和考试)生成三个文本框。请有人帮我解决问题吗?提交表单时,只有最后一个条目进入数据库。以下是我的代码。

<?php
session_start();
include 'header_staff.php';

$subject=$_POST['subject'];
$user_id=$_SESSION['user_id'];
$get=mysql_query("SELECT * FROM staffrecord WHERE user_id='$user_id'",$conn);
$go=mysql_fetch_array($get);
$class=$go['class_id'];
$sql=mysql_query("SELECT * FROM student_enrollment WHERE class_id='$class' AND subject_id='$subject'",$conn);
echo '<form action="submitrslt.php" method="post">';
while($subj=mysql_fetch_array($sql)){
echo $subj['name'];
echo '<input type="text" name="ca1" />';
echo '<input type="text" name="ca2" />';
echo '<input type="text" name="exam" /><br><br>';
}
echo '<input type="submit" value="submit" />';

?>

3 个答案:

答案 0 :(得分:0)

问题的解决方案是通过简单地将[]添加到输入名称来使用输入数组:

while($subj=mysql_fetch_array($sql)){
  echo $subj['name'];
  echo '<input type="text" name="ca1[]" />';
  echo '<input type="text" name="ca2[]" />';
  echo '<input type="text" name="exam[]" /><br><br>';
}

此外,您可以使用表的主键作为每次迭代的索引(假设这将是$subj['id'],但如果它在您的情况下更有意义,您也可以使用{{1}作为索引):

$subj['name']

这样,您可以在帖子后轻松识别结果数组中的值。

PS:确保在不验证或清理用户输入的情况下永远不信任用户输入 - 确保while($subj=mysql_fetch_array($sql)){ echo $subj['name']; echo '<input type="text" name="ca1[<?php echo $subj['id'] ?>]" />'; echo '<input type="text" name="ca2[<?php echo $subj['id'] ?>]" />'; echo '<input type="text" name="exam[<?php echo $subj['id'] ?>]" /><br><br>'; } 为数字。你可以找到很多有关如何实现这一目标的有用提示。

答案 1 :(得分:0)

我添加了评论,这将解决您的问题我假设您的主题数据对于循环是唯一的。我已经使用主题名称定义了输入,使其独一无二。举个例子,您可以尝试自己的方法。这将输出您的操作(表单发布)屏幕上的所有发布变量。

<?php

while($subj=mysql_fetch_array($sql)){
$subname = str_replace(' ','', $subj['name']); //just to replace the space
echo $subj['name'];
echo '<input type="text" name="'.$subname.'_ca1" />'; //to make the field unique for the input entries
echo '<input type="text" name="'.$subname.'_ca2" />';
echo '<input type="text" name="'.$subname.'_exam" /><br><br>';
}
echo '<input type="submit" value="submit" />';
echo '</form>';
?>

答案 2 :(得分:0)

首先,我建议改变与mysqli的连接,它遵循与mysql非常相似的语法,除了它不被弃用。

其次,表单看起来很好,除了文本框和提交按钮没有任何唯一标识符,您可以尝试添加一个唯一的ID&#39;对于每个输入字段。由于你的循环是以一种形式组合所有输入字段,这可能是罪魁祸首。此外,我没有看到表单的结束标记,即</form>

最后,您应该查找filter_input以处理$ _POST []等超级全局。

我假设所有字段都是一次提交而不是单独提交?