0

我的学校项目有问题。我已经向老师和同学寻求帮助,但没有一个人不知道该怎么做。

我制作了一个基于浏览器的游戏,显然它需要有用户。这就是问题所在。

当我登录并进入身份验证页面时,它从 POST 中提取信息就好了,但是当我在身份验证中将信息插入 SESSION 然后转到主页索引时,它拒绝获取 SESSION 信息,我只是得到一个错误.

注意,design2.php 与登录过程没有任何关系。

这是代码:

登录.php

<?php
include_once'design2.php';
?>

<div id="center">

<form method="POST" action="authenticate.php">
User Name <input id="input" type="text" name="player" size="21">
Password <input id="input" type="password" name="password" size="21">
<br>
<input type="submit" value="Login" name="submit">

<br><br>Not Registered? <a id='underlinelink' href='register.php'>Register</a>

验证.php

<?php
include_once 'connect.php';
?>
<div id="center">
<?php
if (isset($_POST['submit']))
{
  $player=$_POST['player'];
  $password=$_POST['password'];
  $player=strip_tags($player);
  $password=strip_tags($password);
  $password=md5($password);

  $query = "select name, password from players where name='$player' and password='$password'";
  $result = mysql_query($query) or die("Could not query players");
  $result2 = mysql_fetch_array($result);
  if ($result2)
  { 
    $_SESSION['player'] = $player;

    echo "<big>Logged in successfully<br>";
    echo "<A id='underlinelink' href='index.php'>Continue</a></big>";
  }
  else
  {
   echo "<big>Wrong username or password.<A id='underlinelink' href='login.php'>Try Again</a></big>";
  }
}
?>
</div>

Design.php(这是在我网站上的每个网页上)

<?php
include_once 'connect.php';
?>

<link href="stilark.css" rel="stylesheet" type="css" />

<?php
session_start();  

if(isset($_SESSION['player']))
    $player = $_SESSION['player'];
else
    echo "could not logg in, <a href='login.php'>Go back</a>"; 
    exit;

$playerinfo="SELECT * from players where name='$player'";
$playerinfo2=mysql_query($playerinfo) or die("could not get player stats!");
$playerinfo3=mysql_fetch_array($playerinfo2);

?>

请帮忙,我真的需要在到期之前完成这项工作。

4

3 回答 3

1

您需要在写入之前创建或恢复会话。因此,在您执行操作的Authenticate.php$_SESSION['player'] = $player;中,首先创建一个会话,就像您在其他文件中所做的那样。类似的东西

验证.php

<?php
session_start();
include_once 'connect.php';
?>
<div id="center">
<?php

// Rest of your code
// ...

if ($result2)
{ 
    $_SESSION['player'] = $player;

// and so on...

此外,正如@DamienLegros 在他的回答中指出的那样,您应该始终session_start()在代码中尽早包含该语句,即作为第一个语句之一,因此您确保在它开始之前没有输出。否则,您将开始收到说明headers has already been sent.

于 2013-04-17T08:16:59.030 回答
0

session_start()必须在任何输出之前

<?php
session_start(); 
include_once 'connect.php';
?>

<link href="stilark.css" rel="stylesheet" type="css" />
于 2013-04-17T08:05:44.063 回答
0
<?php
session_start();
include_once 'connect.php';
?>
<div id="center">
<?php
if (isset($_POST['submit']))
...
...
...

注意:在页面session_start();顶部添加Authenticate.php

于 2013-04-17T08:21:21.047 回答