首页 > 解决方案 > 会话变量没有正确传递?

问题描述

所以,我试图设置一个 $_SESSION 变量并将其传递到另一个页面,但另一个页面上的变量与它必须的不同。

正在设置中petitionlist.php$_SESSION['petitionNameT'] = $petitionName1;根据您选择点击的页面不同,比赛$petitionName1会有所不同,并且会在 url id 中正确显示。


while($row = mysqli_fetch_array($sqldata, MYSQLI_ASSOC)){
    $petitionName1 = $row['petitionName'];
    $_SESSION['petitionNameT'] = $petitionName1;
    echo "<tr><td><a href='petition.php?id=$petitionName1'>";
    echo $row['petitionName'];
    echo "</a></td><td>";
    echo $row['petitionTheme'];
    echo "</td></tr>";
}

但是,当我们继续时petition.php,显示的结果与应有的结果大不相同,并且无论您单击哪个页面,每个页面都完全相同。


    <?php
    $petitionNameT = $_SESSION['petitionNameT'];
    ?>
    
    <div id="wrapper">
    
        <div id="contents">
    
            <h1 class="headers"><?php echo $petitionNameT?></h1>
            
            <p>
            
            </p>
    
        </div>
    
    </div>

举个例子:

在第一页点击它应该是petitionTest,但它是petitionNameTestpetitionNameTestpetitionNameTestpetitionNameTestpetitionNameTestpetiti

在第二页点击它应该是请愿测试2,但它是petitionNameTestpetitionNameTestpetitionNameTestpetitionNameTestpetitionNameTestpetiti

等等等等

PS petitionNameTestpetitionNameTestpetitionNameTestpetitionNameTestpetitionNameTestpetiti是可以点击的页面之一的名称。

PS(2) 我刚刚发现它采用了可以从数据库中单击的最后一页的名称。

标签: phpvariablessessionsuperglobals

解决方案


鉴于您的代码$_SESSION['petitionNameT']在循环的每次迭代中都会被覆盖,因此它将始终petitionName来自查询中的最后一行。

你可能不想要一个会话。只需使用id您在链接的查询字符串中包含的内容:

while($row = mysqli_fetch_array($sqldata, MYSQLI_ASSOC)){
    echo "<tr><td><a href='petition.php?id={$row['petitionName']}'>";
    echo $row['petitionName'];
    echo "</a></td><td>";
    echo $row['petitionTheme'];
    echo "</td></tr>";
}

然后在petition.php

$petitionNameT = $_GET['id'];

推荐阅读