我正在制作一个动态的PHP表单,它与mySQL数据库交互,用于输入不同作业的学生分数。到目前为止,我已成功连接到数据库并访问了必要的数据。首先为每个学生显示以下代码,他们的名字,然后是一个空文本输入框,用户输入该分数表示学生在作业中获得的分数。
<?php if(isset($_POST["beginScoring"]) || isset($_POST['submitScores'])){
$result = $connection->query("SELECT id, firstname, lastname FROM student ORDER BY lastname");
if(!$result)
{
echo "Query Failure";
}
else
{
$foo = array();
$c = 0;
echo "<tr><td>Last Name</td><td>First Name</td><td>Points Earned</td></tr>";
while ($row = $result->fetch_assoc())
{
echo "<tr><td>$row[lastname]</td><td>$row[firstname]</td>";
?>
<td><input type="text" size=8 name="" id="" value=""/></td></tr> <!-- I can maybe use an array to store scores . . . -->
<?php
}
}
?>
我遇到的问题是如何命名文本输入。由于文本框的数量不确定,我不能为输入项使用单个静态名称,对吧?命名文本框以便我可以使用POST数组轻松访问它们的好方法是什么?
答案 0 :(得分:2)
评论的人回答了基本问题。使用&#34; varname []&#34;将为您提供您想要的解决方案。但我认为这个问题还有更多。
在某种程度上,您需要知道哪个分数与哪个学生相对应。如果您只是使用name =&#34;得分[]&#34;,那么访问后端的$ _POST [&#39;得分&#39;]变量将无法告诉您哪个学生得分属于。你需要一种方法来了解它。
所以有两种方法可以达到这个目的。
方法1是使用隐藏变量
<input type="hidden" name="student[]" value="<?php echo $row['id']?>" />
<td><input type="text" size=8 name="score[]" id="<?php echo $row['id']?>" value=""/>
然后在后端你会做类似的事情:
foreach ($_POST['student'] AS $key => $id)
{
$score = $_POST['score'][$key];
// $sql = "INSERT INTO scores (`student`,`score`) VALUES ('$id','$score')";
}
但我个人会在不使用隐藏的情况下处理它。相反,我会用我的HTML做这样的事情:
<td><input type="text" size=8 name="score[<?php echo $row['id']?>]" id="<?php echo $row['id']?>" value=""/>
请注意,我将学生ID回显到score [] HTML变量名称中。然后在后端我可以这样做:
foreach ($_POST['score'] AS $id => $score)
{
// $sql = "INSERT INTO scores (`student`,`score`) VALUES ('$id','$score')";
}
祝你好运!