【问题标题】:PHP - Save the selected item from the MySQL in $ _SESSIONPHP - 将 MySQL 中的选定项目保存在 $_SESSION 中
【发布时间】:2015-04-08 22:18:19
【问题描述】:

有一个脚本1.php

session_start();
$sql_1 = "SELECT ID,text,dt FROM Notes WHERE username='test' ORDER BY ID DESC ";
$result_1 = $conn->query($sql_1);
while($fetch = mysqli_fetch_array($result_1)){
... + A link on the view.html
$_SESSION["ID"] = $fetch['ID'];
...

还有脚本2.php

session_start();
$ID = ($_SESSION["ID"]);
$sql_1 = "SELECT text FROM Notes WHERE username='test' AND ID = '$ID'";
$result_1 = $conn->query($sql_1);
while($fetch = mysqli_fetch_array($result_1)){
echo  '<p>'.$fetch['text'].'</p>';
}

在 view.html 页面上,我使用 Ajax “调用”脚本 2.php。

问题在于,实际上只存储了第一个会话 ID。 例如,如果查询获取 ID 列表,则 SESSION 将仅存储 编号为“1”的 ID,但不是 2 等。 如何获得第二个或第三个(即用户从具有所需 ID 的链接列表中选择)。例如,有一个具有不同 ID 的链接列表。用户想要打开第二个链接。 SESSION 需要“记住”这个 ID,并且在 view.html 上会显示第二个链接的文本。

提前致谢。

【问题讨论】:

  • 再次更新答案,最后一个例子。

标签: php mysql ajax session


【解决方案1】:

您需要将会话变量设为数组,然后将行附加到每个数组片段

session_start();
$ID = ($_SESSION["ID"]);
$sql_1 = "SELECT text FROM Notes WHERE username='test' AND ID = '$ID'";
$result_1 = $conn->query($sql_1);
$_SESSION['data'] = array();
$iCount = 0;
while($fetch = mysqli_fetch_array($result_1)){
    echo  '<p>'.$fetch['text'].'</p>';
    $_SESSION['data'][$iCount] = $fetch['text'];
    $iCount++;
}

你可以这样做......

session_start();
$ID = ($_SESSION["ID"]);
$sql_1 = "SELECT text FROM Notes WHERE username='test' AND ID = '$ID'";
$result_1 = $conn->query($sql_1);
$_SESSION['data'] = array();
$iCount = 0;
while($fetch = mysqli_fetch_array($result_1)){
    echo  '<p>'.$fetch['text'].'</p>';
    $_SESSION['data'][$iCount] = $fetch;
    $iCount++;
}
foreach ($_SESSION['data'] as $oSessData) {
    echo "Text: ", $oSessData['text'], "<br />";
}

在评论中提到:by (user3036342)

// CALL THIS ONLY ONCE, SAY WHEN THE USER LOGS ON... Calling it twice will clear it.
$_SESSION['data'] = array();


session_start();
$ID = ($_SESSION["ID"]);
$sql_1 = "SELECT text FROM Notes WHERE username='test' AND ID = '$ID'";
$result_1 = $conn->query($sql_1);
while($fetch = mysqli_fetch_array($result_1)){
    echo  '<p>'.$fetch['text'].'</p>';
    $_SESSION['data'][] = $fetch['text']; // this will append to the array
}
foreach ($_SESSION['data'] as $oSessData) {
    echo "Text: ", $oSessData, "<br />";
}

编辑

最后一个示例将为会话创建一次数组(注意只调用该部分一次),然后 while 循环将在找到单行或多行时附加到该数组。

// CALL THIS ONLY ONCE, SAY WHEN THE USER LOGS ON... Calling it twice will clear it.
session_start();
$_SESSION['data'] = array();

确保上面的代码已经在不同的时间运行过,每次运行这段代码时,它会将数据变量设置为一个空数组。所以当你第一次登录或访问页面时运行它。

下面的代码可以随心所欲地运行,每次它都会将值附加到它上面。

// Store them by id
session_start();
$ID = ($_SESSION["ID"]);
$sql_1 = "SELECT text FROM Notes WHERE username='test' AND ID = '$ID'";
$result_1 = $conn->query($sql_1);
while($fetch = mysqli_fetch_array($result_1)){
    echo  '<p>'.$fetch['text'].'</p>';
    $_SESSION['data'][$ID] = $fetch['text']; // this will assign a by a index/key
}
foreach ($_SESSION['data'] as $oSessData) {
    echo "Text: ", $oSessData, "<br />";
}
// or access them directly if they are known...
echo "Text: ", $oSessData[77], "<br />"; // if user 77 is in the array

另一个想法

通过会话变量的外观,您正在将一个帐户打开到会话中.. 获取文本值...如果您随后进入另一个会话或用户会话,您需要将会话数组传输到 php重新生成新会话时的数组。

否则,每次您终止会话时,您都会丢失其中的所有数据。我感觉问题是在您粘贴的代码之前一两步。您是否登录到某些会话的多个会话形式?

【讨论】:

  • 我不认为这是问题所在。这里的问题是第二段代码是通过客户端脚本 (AJAX) 调用的,并且他没有将会话中的内容从第一次调用传回以附加第二次调用。似乎人们越来越不理解客户端脚本无法与服务器端脚本进行交互,而无需一些步法
  • 是的,但是用当前的例子很难说。我猜看查询它应该每次只返回一个。
  • 认为我现在已经介绍过了?
  • 对不起各位,但没有一种方法行不通。它再次返回给我来自 MySQL 的第一个 ID。也许可以在 1.php 的 SESSION 中存储一个数组?然后在 2.php 上获得“正确”的 ID?
  • 这是使用数组进行 php 会话,你使用 session_start();之前 $_SESSION['data'] = array();确保该部分位于脚本中的单独部分/过程中。如果您复制并粘贴它,它将不起作用。
猜你喜欢
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 2013-04-22
  • 1970-01-01
相关资源
最近更新 更多