PHP-将MySQL中选定的项目保存在$_SESSION中


PHP - Save the selected item from the MySQL in $ _SESSION

有一个脚本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>';
}

在pageview.html上,我使用Ajax"调用"脚本2.php。

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

提前谢谢。

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

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 />";
}

如评论中所述:通过(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数组。

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