使用PHP / MySQL通过逐行从数据库中获取数据来生成QR代码

时间:2019-06-22 03:36:57

标签: php html mysql

在使用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>

1 个答案:

答案 0 :(得分:0)

您为每一行创建一个提交按钮,但是所有这些按钮都在同一表单内,因此它们的作用相同:提交整个表单及其所有输入。

您将每个学生的student_id存储在其自己的输入标签中,因此每个学生都有一个,但是所有输入都具有相同的名称:“ student_id”。

提交表单时(无论哪个特定的提交按钮导致它被提交)-发送所有输入的数据,但是由于它们都具有相同的名称-最后一个值将覆盖其余所有值。这就是为什么您总是只为最后一个学生获得结果的原因。

解决此问题的一种方法是为每个学生设置单独的表单,但这不适用于当前的表格结构。

另一种选择是给每个提交按钮一个唯一的名称,然后根据提交按钮的名称确定哪个学生在PHP端提交了。

另一种选择是,每个学生没有一个提交按钮,而是在表单底部只有一个提交按钮。然后,为每个学生添加一个具有唯一值(可能是student_id)的单选按钮。这样,提交表单会将选定学生的student_id发送到服务器。

解决此问题的“正确”方法可能是使用JavaScript。