PHP $_SESSION 正在工作,但无法让 $_GET 工作

标签 php session

我在网站上使用 $_GET 时遇到了困难。我已经设置了一个登录页面,登录后用户将被重定向到他/她的个人资料。我想创建一个动态 url 变量。我在登录页面上设置了一个 session ,并在重定向到配置文件“echo $_SESSION['username']”后正确回显。但是,当尝试对 $_GET 执行相同操作时,不会显示任何内容。我已经检查了很多教程,即使我完全按照所示操作,我也永远无法使其工作。这是我的代码:

登录.php

 <?php 
 include ("./Various/header.php");
 require './Various/connections.php';

 if(isset($_POST['login'])) {
      session_start();

 //Set Variables
 $loginusername = $_POST['userlogin'];
 $loginpassword = $_POST['passwordlogin'];

 if(!empty($loginusername)&& !empty($loginpassword)){
     $sql = mysql_query("SELECT * FROM users WHERE username='$loginusername'");
     $checkuser=mysql_num_rows($sql);

     if($checkuser == 1) {

         $passrow = mysql_fetch_assoc($sql);
         $checkpass = $passrow['password'];

         $userdb = $passrow['username'];
         $iddb = $passrow['id'];

    if ($checkpass == $loginpassword)
    {
        $_SESSION['username'] = $loginusername;
        $_SESSION['id'] = $iddb;
        header("Location: testprofile.php?username = $loginusername");
        exit();

    }
    else {
        echo "Password is incorrect";
    }

     }
     else {
         echo "$loginusername doesn't exist";
     }
 }
 else {
     echo "Please fill out the fields";
 }

 }

?>


<div style=" width: 400px; margin: 0px auto 0px auto" class="LoginForm">
        <table class= "logintable">
             <tr><td width="60%" valign="top">
                  <h3>MySite</h3>
            <h2>Login</h2>
                 <form action="login.php" method="post">
                     <input type="text" name="userlogin" size="12" placeholder="Username"/><br/> <br/>
                <input type="password" name="passwordlogin" size="12" placeholder="Password"/><br/> <br/>
                     <input type="submit" name="login" value="Login!"/>
                     </form>
                 <div id="forgotpassword">
    <a href="#">I forgot my password</a>
    </div>   
            </td>
            </tr>
        </table>

            </div>

为了简单起见,我创建了一个几乎空白的个人资料页面,名为 testprofile.php

测试配置文件.php

<?php
session_start();
echo $_GET['username']; 
echo $_GET['id'];

?>

这给了我什么。但是,如果您这样做:

<?php
session_start();
echo $_SESSION['username']; 
echo $_SESSION['id'];

?>

您可以看到登录用户的用户名和 ID。我尝试将 login.php 中的 session_start() 移动到最顶部(这就是一开始的样子),但它根本没有帮助。 我能够设置整个用户个人资料页面,但用户无法查看其他用户的个人资料。这就是为什么我现在正在为此苦苦挣扎。 我希望任何人都可以告诉我,这是一个非常微不足道的错误,我无缘无故地拔了我的头发。

最诚挚的问候

大卫


好吧,我要粘贴我的代码,因为这变得很荒谬。我没有得到这个 $_GET 函数,它似乎在除了这个个人资料页面之外的其他地方都可以工作。

登录.php

     <?php 
 include ("./Various/header.php");
 require './Various/connections.php';

 if(isset($_POST['login'])) {
      session_start();

 //Set Variables
 $loginusername = $_POST['userlogin'];
 $loginpassword = $_POST['passwordlogin'];

 if(!empty($loginusername)&& !empty($loginpassword)){
     $sql = mysql_query("SELECT * FROM users WHERE username='$loginusername'");
     $checkuser=mysql_num_rows($sql);

     if($checkuser == 1) {

         $passrow = mysql_fetch_assoc($sql);
         $checkpass = $passrow['password'];

         $userdb = $passrow['username'];
         $iddb = $passrow['id'];

    if ($checkpass == $loginpassword)
    {
        $_SESSION['username'] = $loginusername;
        $_SESSION['id'] = $iddb;
        header("Location: profile.php");
        exit();

    }
    else {
        echo "Password is incorrect";
    }

     }
     else {
         echo "$loginusername doesn't exist";
     }
 }
 else {
     echo "Please fill out the fields";
 }

 }

?>


<div style=" width: 400px; margin: 0px auto 0px auto" class="LoginForm">
        <table class= "logintable">
             <tr><td width="60%" valign="top">
                  <h3>MySite</h3>
            <h2>Login</h2>
                 <form action="login.php" method="post">
                     <input type="text" name="userlogin" size="12" placeholder="Username"/><br/> <br/>
                <input type="password" name="passwordlogin" size="12" placeholder="Password"/><br/> <br/>
                     <input type="submit" name="login" value="Login!"/>
                     </form>
                 <div id="forgotpassword">
    <a href="#">I forgot my password</a>
    </div>   
            </td>
            </tr>
        </table>

            </div>

登录与之前相同(减去 ?user= 部分)。从这里我被重定向到个人资料页面。

配置文件.php

    <?php
session_start();

include './Various/header.php';
require './Various/connections.php';

  $username = $_SESSION['username'];
  $sql = mysql_query("SELECT * FROM users WHERE username='$username'");
  $getdata = mysql_fetch_array($sql);
  $firstname = $getdata['firstname'];
  $lastname = $getdata['lastname'];
  $blogname = $getdata['blogname'];
  $shoutout = $getdata['aboutuser'];
  $country = $getdata['country'];
  $profilepic = $getdata['profilephoto'];
  $year = $getdata['yearofbirth'];
  $current = date('Y');
  $age = $current - $year;

?>

<div class="profilepage">
<div class="userdetails">
<table>
<tr>
<td>
<img src="<?php echo $profilepic  ?>"/>
</td>

<td>
    <div id="userinfo">
    <h3><?php echo $username?>'s Blog!</h3>
    </div>
<a>Name: <?php echo $firstname?> <?php echo $lastname?>  </a>
<a>Age: <?php  echo $age ?> </a>
<a>Country: <?php echo $country ?> </a>
<a id="shoutout"><?php echo $shoutout ?></a>

</td>

</tr>

</table>
<div id="blogname">
<a><?php echo $blogname ?></a>
</div>
</div>

    <div class="userposts">
    <?php 
  //Displaying user's posts
 //connect to DB
$sql = "SELECT postid, postedby, title, category, LEFT(content, 100) AS content FROM posts WHERE postedby = '$username'
 ORDER BY postid DESC";
$result = mysql_query($sql);

while($row = mysql_fetch_array($result)) {
    $postid = $row['postid'];
    $postedby = $row['postedby'];
    $title = $row['title'];
    $content = $row['content'];
    $category = $row['category'];
  ?>
    <div id="posts">
     <a><?php echo $postedby?></a> 
    <h2><?php echo $title?></h2>
        <a><?php echo $category?></a><br>
        <a><?php echo $content . "<a href='post.php?id=$postid'>Read more...</a>"?></a>
        <br>
        <hr />
        <br>

        <?php 
}
?>
</div>
</div>
</div>

在这里我得到了我想要的所有数据,并且显示得很好。我似乎无法做的是允许其他用户查看该用户的个人资料。我知道我需要创建一个动态 url 变量。我遵循的教程之一指示我执行以下操作:

    if(!isset($_GET['id'])) {
    header("Location: ?user=".getID($_SESSION['id']));
}

getID 函数如下所示:

    function getID($id) {
  $dataquery = mysql_query("SELECT id FROM users WHERE id='$id'");  
  while ($row=mysql_fetch_assoc($dataquery)){
      return $row['id'];
  }
}

当我执行 if 语句时

if(!isset($_GET['id']))

我在 Firefox 中得到的只是一个错误:

The page isn't redirecting properly Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

Chrome 中的这个:

This webpage has a redirect loop

自周二以来,我束手无策,一直在寻找解决方案。我无法像这样继续我的项目。 我真诚地请求你的帮助。我知道这可能有很多问题(相当大的代码块,呃),但我真的不知道该怎么办。

正如我之前提到的,我希望允许用户查看其他用户的个人资料。 我从来没有让 $_GET 正常工作,所以我认为这就是原因。现在我只是不知道。

很抱歉这篇文章很长,希望有人能帮助我。我非常感谢您的帮助。

问候

大卫

最佳答案

问题在于网址中的空格。

URL testprofile.php?username = $loginusername$_GET 数组是:

array('username ' => ' $loginusername')

因此, key 将为'username',而不是'username'。要修复此问题,请确保 url 参数名称和值中没有不必要的空格。另请注意,$_GET['id'] 为空,因为 url 中没有传递此类参数。

关于PHP $_SESSION 正在工作,但无法让 $_GET 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892496/

相关文章:

php - MySQL JOIN 按 ID 评级到按 ID 详细信息

php - 无法在 Laravel 中的模型 View 中显示数据

java - 如何从 webapps java 获取 Windows session 登录?

hibernate - 如何在 hibernate 状态下检查 session 是否已经打开事务?

javascript - 如何使用 Ajax 显示 WordPress 查询

php - Laravel 4 - 无法添加到消息包?

php - 如何创建尽可能短的 URL-able unique id?

java - 与多个处理程序的 jetty session

java - 黑客可以修改 session 变量吗?

php - 通过传递每个链接的 session ID,将动态生成的链接链接到 php