【问题标题】:How to store session variable in database如何将会话变量存储在数据库中
【发布时间】:2015-05-06 17:36:43
【问题描述】:

我实际上是 PHP 新手。我的问题是会话没有存储在我的数据库中。

这是我的 demo_session1.php

<?php
$Refno="";
// Start the session
session_start();

$_SESSION["$Refno"] = "HNo1";
echo "Ref no.:HNO1";

if(isset($_POST['submit']))
{
   $Refno  = $_POST['Refno'];

}
?>

<html>
<body>
<a href="demo_session2.php">Arrange to view property</a>

</body>
</html> 

这是我的 demo_session2.php:

<?php
$Refno = $message= ""; 
$messageErr = "";

session_start();
require "configdemo.php";
echo "Ref no.: " . $_SESSION["$Refno"] . ".<br>";

if(isset($_POST['submit']))
{
$Refno  = $_POST['Refno'];
$message = $_POST['message'];
}

 if (empty($_POST["message"])) 
{
     $messageErr = "Please leave a message for the agent.";
   }

else
{

 $sql = mysqli_query($con,"INSERT INTO demo (Refno, message) VALUES 

('$Refno' , '$message') ") or die("Can't Insert! ");
          header ("location: thanks.php"); 
         }

?>
<style>
.error {
color: #FF0000;
font-size:12px;
text-transform: lowercase;
}
</style>
<!DOCTYPE html>
<html>
<body>
<table width="100%" align="center" cellpadding="0" cellspacing="1" >
<form name="viewing_form" method="post" action="">
<tr>
<td>Message: <td><textarea name="message"rows="5" cols="25" value="<?php echo 

$message;?>"></textarea>
<td><span class="error"> <?php echo $messageErr;?></span></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Submit"></td>
<td><input type="submit" name="cancel" value="Cancel"></td>
</body>
</html> 

demo_session2.php 上显示“Refno”,但是当我按下提交按钮时,只有消息被插入到数据库中。我还想插入“Refno”。

【问题讨论】:

  • 应该:$_SESSION["$Refno"]_ 真的是 _$_SESSION["Refno"]?注意:当使用数组索引时,从 'Refno' 中删除 $。目前它使用 $Refno 的值作为索引。
  • 题外话:请注意您正在编写可注入 SQL 的代码。您无法控制 $message 的值,但您将其连接到一个 SQL 语句中,然后盲目执行。
  • 我删除了美元符号但无济于事。我希望将“Refno”插入数据库。 'Refno' 实际上是一个会话变量,它从 demo_session1.php 到 demo_session2.php 显示。对不起,如果我很痛苦,但我不理解背后的逻辑。
  • 在此之前:if(isset($_POST['submit'])) 请执行:var_dump($Refno, $_POST['Refno'] , $_SESSION["$Refno"]);.它应该为您提供一些关于正在发生的事情的线索。如果仍然不清楚,请用结果编辑您的答案。
  • 我收到以下通知: 注意:未定义索引:第 8 行 C:\xampp\htdocs\demo_session2.php 中的参考编号 参考编号:。注意:未定义索引:第 10 行 C:\xampp\htdocs\demo_session2.php 中的 Refno string(0) "" NULL string(4) "HN01"

标签: php database variables session


【解决方案1】:
  • 从 $_SESSION Refno 中删除 $ 符号(如文森特所述)
  • 如果我没看错,您的表单不包含名为“Refno”的字段。所以不会有 $_POST['Refno']。因此,要么添加这样的字段,要么在 QUERY 中使用 SESSION:

    $sql = mysqli_query($con,"INSERT INTO demo (Refno, message) VALUES ('$_SESSION[Refno]' , '$message') ") 或 die("无法插入!");

正如 Karel 所提到的,使用 mysqli_real_escape_string() 转义 $message 是合适的

【讨论】:

  • 你好马克 :) 好的,谢谢。它工作得很好。现在,我还有另一个问题。我希望也显示用户的名字和姓氏。我一直在添加这个 ('$_SESSION[fname]' 但它不起作用。我的意思是用户已经注册并且数据在数据库中。我该如何检索它们?
  • 你好@Marc,我从我的表新成员中检索数据仍然没有解决,它们显示清楚。但现在我想将它们输入到另一个表中。不幸的是,它无法插入。我知道我的做法不对,只是希望你能告诉我错误在哪里。谢谢:)
  • demo2.php session_start(); echo "Ref no.: " . $_SESSION["propertyno"] . ".&lt;br&gt;"; echo "Ref no.: " . $_SESSION["username"] . ".&lt;br&gt;"; $conn = new mysqli($host, $username, $password, $db); $sql = "SELECT First_Name, Last_Name, email FROM newmember WHERE username = '".$_SESSION['username']."' "; $result = $conn-&gt;query($sql); if ($result-&gt;num_rows&gt;0) { while($row = $result-&gt;fetch_assoc()) { echo "First Name: " . $row["First_Name"] . " &lt;br&gt;"; echo "Last Name: " . $row["Last_Name"] . "&lt;br&gt;"; echo "Email Address: " . $row["email"] . "&lt;br&gt;"; } }
  • 那么你想做的是将数据插入另一个数据库表吗?您可以使用 SQL 插入查询执行此操作: $conn->query("INSERT INTO mytable ('First_Name','Last_Name','email') VALUES ('John', 'Doe, 'fancy@example.com') ");
  • 嗨@Marc。它仍然无法正常工作。我不必手动输入记录,但在提交表单上,它们应该输入我的表格。我成功检索了数据,但我收到 Notice: Undefined index 的属性。
猜你喜欢
  • 2015-10-09
  • 2011-08-30
  • 2020-04-07
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多