请我目前正在用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" />';

?>

最佳答案

解决此问题的方法是通过在输入名称中添加[]来使用输入数组:

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'],但是如果在您的情况下更有意义,您也可以使用$subj['name']作为索引):

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>';
}


这样,您可以在发布后轻松地从结果数组中识别值。

PS:确保在不验证或清除用户输入的情况下永远不要信任用户输入-确保$_POST['subject']是数字。您可以找到有关如何实现此目标的大量有用提示。

10-06 00:52