【问题标题】:session is not saved for some variables某些变量的会话未保存
【发布时间】:2014-10-11 20:11:52
【问题描述】:

我的网站有 2 个页面;从 URL 中获取 username,将其放入 $_SESSION 并显示该用户所属组的列表。

当用户选择一个组时,站点会转到下一页(group.php 页面)并在其 URL 中提供组名称,以便在组页面中使用。

在群组页面中有一个发送消息的表单,这些消息将显示在群组页面中(我猜有点像 Facebook 墙)。

问题来了:
在群组列表页面username被发送到会话中; 在群组页面获取群组名称后,我也将其发送到会话中, 但由于某种原因,当页面到达if(isset($_POST['texts'])) 部分时,它会记住用户名而不是组名。

知道这是为什么吗?

以下是群组页面的代码。

   <?php
    session_start();
    include_once("../connect.php");
    $username = $_SESSION['username'];

    $result = mysqli_query($conn, "SELECT id FROM users WHERE username='$username'");
        while($row = mysqli_fetch_array($result)) { 
            $uid = $row['id'];
        }

    if(isset($_GET['groupname'])) {
        $groupname = $_GET['groupname'];    
    }

$result = mysqli_query($conn, "SELECT id FROM groups WHERE groupname='$groupname'");
        while($row = mysqli_fetch_array($result)) { 
            $gid = $row['id'];
        }

    $_SESSION['groupname'] = $groupname;
    ?>
    <!doctype html>
    <html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
    <form action=
    <?php
    echo "'group.php?id=" . $gid . "'";
    ?> method="post" name="newtext">
        <textarea name="texts" rows="4" cols="30"></textarea>
        <input type="submit" id="subtext" name="submit" value="Submit" />
    </form>

    <?php
    //add text message
    if(isset($_POST['texts'])){
        $texts = $_POST['texts'];

        if($texts == "") {
            echo "<script>alert('no message writen')</script>"; 
        }else{
            mysqli_query($conn, "INSERT INTO texts (`sender`, `sent`, `group`, `text`)
                        VALUES ('$uid', now(), '$gid', '$texts');");
            echo "<script>alert('message recieved!')</script>";
        }
    }
    ?>
    </div>
    </body>
    </html>

【问题讨论】:

  • 你在做group.php?id不应该是group.php?groupname吗?
  • 这也应该用引号引起来action="&lt;?php echo "'group.php?id=" . $gid . "'"; ?&gt;"
  • 您在会话或 url 中使用保存组名?

标签: php mysql session mysqli


【解决方案1】:

这是因为在这种情况下 $_GET['groupname'] 不再存在。

echo "'group.php?id=" . $gid . "'";

我没有看到你在任何地方使用 $_GET['id'],所以操作应该是

group.php?groupname=GROUPNAME_HERE 而不是 group.php?id=1

这应该可行:

<form action="group.php?groupname=<?php echo $groupname; ?>" method="post" name="newtext">

我还要在这里添加一个 else 语句来决定如果变量不存在该怎么办。

if(isset($_GET['groupname'])) {
    $groupname = $_GET['groupname'];    
}

【讨论】:

  • 最终告诉页面检查两个选项
猜你喜欢
  • 2014-05-17
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 2021-10-16
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多