繁体   English   中英

从数据库中获取数据值以保存到 session 存储?

[英]Getting Data values from database to save to session storage?

我想让我的网页从数据库中的表中获取值并以代码中显示的格式在屏幕上显示它们,但是我想获取 BikeID 和 ContactEmail 的值并将它们保存到 session单击更新按钮时您进入的更新确认页面上要使用的存储空间。 但是第一个问题是这些值不会保存到 session 存储中,第二个问题是即使他们这样做了,session 也会根据单击按钮时选择的 Table/BikeID 获得正确的值。 代码运行后的页面布局图如下。

如果有人有任何想法,我将不胜感激。

  <?php

        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

        $username="Username"; // change this to your database username
        $password="Password"; // change this to your database password
        $database="Database"; // change this to your database username

        $conn = new mysqli('localhost', $username, $password, $database);
        // Check connection
        if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
        }
        $sql = "SELECT * FROM tblBikeStolen, tblBike WHERE tblBike.BikeID=tblBikeStolen.BikeID";
            $result = $conn->query($sql);

            if ($result->num_rows > 0) {
            // output data of each row
                while($row = $result->fetch_assoc()) {
                echo "<div id='UpdateTable'><table><tr><td> User No: " . $row["User"] . "</td> 
 <td>Bike ID: " . $row["BikeID"]. "</td><td> Contact: " . $row["ContactEmail"] . "</td></tr><tr><td> 
 Reported Time: " . $row["ReportTime"] . "</td><td> Address: " . $row["Address"] . "</td><td> Bike 
 MPN: " . $row["BikeMPN"] . "</td></tr><tr><td> Bike Brand: " . $row["BikeBrand"] . "</td><td> Bike 
 Model: " . $row["BikeModel"] . "</td><td> Bike Type: " . $row["BikeType"] . "</td><tr><td> 
 Investigation Notes: " . $row["UpdateNotes"] . "</td></tr><tr><td> Status: " . $row["Status"] . " 
 </td></tr><tr><form><button class='btn btn-primary btnUpdateInvest' type='submit' 
 value='Update'formaction='ConfirmUpdate.php' onClick='UpdateFunctionDAO.php'>Update</button></form> 
 </tr></table></div>";
                $BikeID = $row['BikeID'];
                $_SESSION["BikeID"] = $BikeID;
                $ContactEmail = $row['ContactEmail'];
                $_SESSION["ContactEmail"] = $ContactEmail;
                }
                } else { echo "0 results"; }

                $conn->close();

    ?>

在此处输入图像描述

我建议从简单开始,然后扩展您的用例:

而不是使用formaction = 'ConfirmUpdate.php' ,尝试使用formaction = 'ConfirmUpdate.php?bikeid=<your-bike-id>&contactemail=<the-contact-email>'

在 ConfirmUpdate.php 中,检查$_GET['bikeid']$_GET['contactemail']是否已设置且有效。 如果您没有获得这些密钥中的任何一个或者它们无效,请在屏幕上写一条有意义的错误消息,指示用户下一步该做什么。

如果您收到了这两个密钥并且它们的值是合理的,则可以将它们存储在 session 中以供将来处理。 处理完成后,从 session 中清除该信息。

您的 PHP 代码将如下所示:

echo "...value='Update' formaction='ConfirmUpdate.php?bikeid=" . $row["BikeID"] . "&amp;contactemail=" . $row["ContactEmail"] . "' onClick='UpdateFunctionDAO.php'>...";

试试这个,看看它是如何工作的。 在此之后,您可能需要做更多的工作,以确保您在页面上发布的数据经过清理并且不易被注入。

例子

假设您的初始页面名为test.php ,它看起来像这样:

<?php

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    $username=""; // change this to your database username
    $password=""; // change this to your database password
    $database=""; // change this to your database username

    $conn = new mysqli('localhost', $username, $password, $database);

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "your sql query";
    $result = $conn->query($sql);
    if ($result->num_rows > 0)
    {
        while ($row = $result->fetch_assoc())
        {
            $displayText = sprintf('<div>Some other info. Bike ID is %s and contact is %s.</div>',
                $row['bikeid'],
                $row['contactemail']
            );

            $form = sprintf('
                <form method="post" action="ConfirmUpdate.php">
                    <input type="hidden" name="bikeid" value="%s">
                    <input type="hidden" name="contactemail" value="%s">
                    %s
                    <input type="submit" value="Submit">
                </form>',
                $row['bikeid'],
                $row['contactemail'],
                $displayText
            );

            echo $form;
        }
    }

    $conn->close();
?>

结果

在此处输入图像描述

您的ConfirmUpdate.php将如下所示:

<?php
    session_start();
    $_SESSION['bikeid'] = $_POST['bikeid'];
    $_SESSION['contactemail'] = $_POST['contactemail'];

    echo sprintf('Received bike id %s and contact email %s',
        $_SESSION['bikeid'],
        $_SESSION['contactemail']
    );
?>

当您单击第一个按钮时,您将进入 ConfirmUpdate 页面,如下所示:

Received bike id 1 and contact email test@gmail.com

单击第二个按钮时,您将看到:

Received bike id 2 and contact email test@yahoo.com

在您自己的系统上进行测试,您应该能够在您的项目中复制此代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM