php—从数据库获取数据值以保存到会话存储?

lymnna71  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(536)

我想这样做,我的网页从一个数据库中的表值,并显示在屏幕上的格式,如下所示的代码,但我想采取的bikeid和contactemail的值,并将它们保存到会话存储上使用的更新确认页时,你采取了更新按钮被点击。但是,第一个问题是,这些值不会保存到会话存储中,第二个问题是,即使它们保存了,会话是否会根据单击按钮时选择的表/bikeid获得正确的值。下面是代码运行后页面布局的图像。
如果有人有什么想法,我将不胜感激。

  1. <?php
  2. mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  3. $username="Username"; // change this to your database username
  4. $password="Password"; // change this to your database password
  5. $database="Database"; // change this to your database username
  6. $conn = new mysqli('localhost', $username, $password, $database);
  7. // Check connection
  8. if ($conn->connect_error) {
  9. die("Connection failed: " . $conn->connect_error);
  10. }
  11. $sql = "SELECT * FROM tblBikeStolen, tblBike WHERE tblBike.BikeID=tblBikeStolen.BikeID";
  12. $result = $conn->query($sql);
  13. if ($result->num_rows > 0) {
  14. // output data of each row
  15. while($row = $result->fetch_assoc()) {
  16. echo "<div id='UpdateTable'><table><tr><td> User No: " . $row["User"] . "</td>
  17. <td>Bike ID: " . $row["BikeID"]. "</td><td> Contact: " . $row["ContactEmail"] . "</td></tr><tr><td>
  18. Reported Time: " . $row["ReportTime"] . "</td><td> Address: " . $row["Address"] . "</td><td> Bike
  19. MPN: " . $row["BikeMPN"] . "</td></tr><tr><td> Bike Brand: " . $row["BikeBrand"] . "</td><td> Bike
  20. Model: " . $row["BikeModel"] . "</td><td> Bike Type: " . $row["BikeType"] . "</td><tr><td>
  21. Investigation Notes: " . $row["UpdateNotes"] . "</td></tr><tr><td> Status: " . $row["Status"] . "
  22. </td></tr><tr><form><button class='btn btn-primary btnUpdateInvest' type='submit'
  23. value='Update'formaction='ConfirmUpdate.php' onClick='UpdateFunctionDAO.php'>Update</button></form>
  24. </tr></table></div>";
  25. $BikeID = $row['BikeID'];
  26. $_SESSION["BikeID"] = $BikeID;
  27. $ContactEmail = $row['ContactEmail'];
  28. $_SESSION["ContactEmail"] = $ContactEmail;
  29. }
  30. } else { echo "0 results"; }
  31. $conn->close();
  32. ?>

7tofc5zh

7tofc5zh1#

我建议从简单开始,然后扩展您的用例:
而不是使用 formaction = 'ConfirmUpdate.php' ,尝试使用 formaction = 'ConfirmUpdate.php?bikeid=<your-bike-id>&contactemail=<the-contact-email>' 在confirmupdate.php中,检查 $_GET['bikeid'] 以及 $_GET['contactemail'] 已设置且有效。如果您没有得到这些密钥中的任何一个,或者它们无效,请在屏幕上写一条有意义的错误消息,指示用户下一步要做什么。
如果您收到了这两个键,并且它们的值是合理的,那么您可以将它们存储在会话中以供将来处理。完成处理后,从会话中清除这些信息。
您的php代码如下所示:

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

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

示例

假设您的初始页面被调用 test.php 看起来是这样的:

  1. <?php
  2. mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  3. $username=""; // change this to your database username
  4. $password=""; // change this to your database password
  5. $database=""; // change this to your database username
  6. $conn = new mysqli('localhost', $username, $password, $database);
  7. if ($conn->connect_error) {
  8. die("Connection failed: " . $conn->connect_error);
  9. }
  10. $sql = "your sql query";
  11. $result = $conn->query($sql);
  12. if ($result->num_rows > 0)
  13. {
  14. while ($row = $result->fetch_assoc())
  15. {
  16. $displayText = sprintf('<div>Some other info. Bike ID is %s and contact is %s.</div>',
  17. $row['bikeid'],
  18. $row['contactemail']
  19. );
  20. $form = sprintf('
  21. <form method="post" action="ConfirmUpdate.php">
  22. <input type="hidden" name="bikeid" value="%s">
  23. <input type="hidden" name="contactemail" value="%s">
  24. %s
  25. <input type="submit" value="Submit">
  26. </form>',
  27. $row['bikeid'],
  28. $row['contactemail'],
  29. $displayText
  30. );
  31. echo $form;
  32. }
  33. }
  34. $conn->close();
  35. ?>

结果

你的 ConfirmUpdate.php 将如下所示:

  1. <?php
  2. session_start();
  3. $_SESSION['bikeid'] = $_POST['bikeid'];
  4. $_SESSION['contactemail'] = $_POST['contactemail'];
  5. echo sprintf('Received bike id %s and contact email %s',
  6. $_SESSION['bikeid'],
  7. $_SESSION['contactemail']
  8. );
  9. ?>

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

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

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

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

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

展开查看全部

相关问题