请我正在学习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" />';
?>
答案 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 []等超级全局。
我假设所有字段都是一次提交而不是单独提交?