【问题标题】:How to post multiple entries from dynamically generated textboxes in while loop如何在while循环中从动态生成的文本框中发布多个条目
【发布时间】:2016-12-31 11:37:45
【问题描述】:

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

?>

【问题讨论】:

  • 我建议的第一件事是避免使用mysql_*。 :)
  • 创建唯一输入

标签: php mysql


【解决方案1】:

解决问题的方法是使用输入数组,只需将[] 添加到输入名称:

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'] 是数字。您可以找到很多关于如何实现这一目标的有用提示。

【讨论】:

  • 真的很有帮助。我使用 foreach 循环将所有数组值从 ca1 ca2 和 Exam 中获取到相应的学生列中
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    首先,我建议将连接更改为 mysqli,它遵循与 mysql 非常相似的语法,只是它没有被弃用。

    其次,表单看起来不错,除了文本框和提交按钮没有任何唯一标识符之外,您可以尝试为每个输入字段输入一个唯一的“id”。由于您的循环将所有输入字段组合成一种形式,因此这可能是罪魁祸首。此外,我没有看到表单的结束标签,即&lt;/form&gt;

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

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

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2023-03-27
      • 2014-10-16
      • 1970-01-01
      • 2013-10-18
      • 2013-03-10
      • 2019-11-20
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多