在使用PHP和SQL生成QR代码时,我陷入了困境。基本上,我在从数据库中获取数据时使用学生的ID和其他信息为学生生成代码。但是问题是,当我单击“提交”按钮以便表格数据存储在QR Code中时,它仅生成最后一位学生的QR Code。
我在每一行上创建一个提交按钮,以便当我单击提交按钮时,然后将该特定行的数据提交到QR图像。但是问题是,当我单击任何行的提交按钮时,它会在表中生成最后一个学生的qr图像。例如,如果1个表中有10个学生,则它将生成ID为10且在表的最后一行的学生图像。
代码在这里可用:
<?php
include('qrlib.php');
function getUsernameFromEmail($student_id) {
$find = '@';
$pos = strpos($student_id, $find);
$username = substr($student_id, 0, $pos);
return $username;
}
if(isset($_POST['submit']) ) {
$tempDir = 'temp/';
$student_id = $_POST['student_id'];
$fname = $_POST['fname'];
$filename = getUsernameFromEmail($student_id);
$codeContents = 'mailto:'.$student_id.'?id='.urlencode($student_id).'&fname='.urlencode($fname);
QRcode::png($codeContents, $tempDir.''.$filename.'.png', QR_ECLEVEL_L, 5);
}
?>
表格:
<form id="demo-form2" method="post" data-parsley-validate class="form-horizontal form-label-left" >
<table id="datatable" class="table table-striped table-bordered">
<thead>
<tr>
<th>Student Id</th>
<th>First Name</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php
include("includes/connection2.php");
$sql = "SELECT * FROM student";
$result=mysql_query($sql); //rs.open sql,con
while ($row=mysql_fetch_array($result))
{ ?><!--open of while -->
<tr>
<td><input type="text" value="<?php echo $row['student_id']; ?>" name="student_id" ></td>
<td><input type="text" value="<?php echo $row['fname']; ?>" name="fname" ></td>
<td class="center">
<div class="form-group">
<input type="submit" name="submit" class="btn btn-primary submitBtn" style="width:20em; margin:0;" />
</div>
</td>
<td class="center">
</td>
</tr>
<?php
} //close of while
?>
</tbody>
<?php
if(!isset($filename)){
$filename = "author";
}
?>
<div class="qr-field">
<h3>QR Code Result: </h3>
<center>
<div class="qrframe" style="border:2px solid black; width:210px; height:210px;">
<?php echo '<img src="temp/'. @$filename.'.png" style="width:200px; height:200px;"><br>'; ?>
</div>
<a class="btn btn-primary submitBtn" style="width:50px; margin:1px 0;" href="download.php?file=<?php echo $filename; ?>.png ">Download QR Code</a>
</center>
</div>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
答案 0 :(得分:0)
您为每一行创建一个提交按钮,但是所有这些按钮都在同一表单内,因此它们的作用相同:提交整个表单及其所有输入。
您将每个学生的student_id存储在其自己的输入标签中,因此每个学生都有一个,但是所有输入都具有相同的名称:“ student_id”。
提交表单时(无论哪个特定的提交按钮导致它被提交)-发送所有输入的数据,但是由于它们都具有相同的名称-最后一个值将覆盖其余所有值。这就是为什么您总是只为最后一个学生获得结果的原因。
解决此问题的一种方法是为每个学生设置单独的表单,但这不适用于当前的表格结构。
另一种选择是给每个提交按钮一个唯一的名称,然后根据提交按钮的名称确定哪个学生在PHP端提交了。
另一种选择是,每个学生没有一个提交按钮,而是在表单底部只有一个提交按钮。然后,为每个学生添加一个具有唯一值(可能是student_id)的单选按钮。这样,提交表单会将选定学生的student_id发送到服务器。
解决此问题的“正确”方法可能是使用JavaScript。