2013-04-17 133 views
0

我在學校項目中遇到問題。我已經問了我的老師和同學,但他們都不知道該怎麼做。無法從SESSION獲得變量

我製作了基於瀏覽器的遊戲,顯然它需要有用戶。這就是問題所在。

當我登錄並進入驗證頁面時,它從POST中提取信息就好了,但是當我在驗證中將信息插入SESSION中,然後轉到主頁索引時,它拒絕獲取SESSION信息,而我只是得到一個錯誤。

注意,design2.php與登錄過程沒有任何關係。

下面的代碼:

的login.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> 

Authenticate.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); 

?> 

請幫忙,ir最終需要在其到期前完成。

+0

做'在session_start添加session_start();。因此''__ESSION ['player'] = $ player;' – Havelock

回答

0

session_start()必須是之前的任何輸出

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

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

...或輸入就是這個問題的'session_start()'。 – Havelock

+1

Genereal規則是,將你的session_start作爲 之後的第一行(當然是在<?php session_start();?>) – Sahil

+0

之前嘗試將session_start()放在第一位,但是不起作用。我仍然遇到和以前一樣的問題。 –

1

您需要創建或你寫進去之前恢復會話。所以在你的Authenticate.php你在哪裏做$_SESSION['player'] = $player;,首先創建一個會話,就像你在其他文件中一樣。類似的東西

Authenticate.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

+1

認真,非常感謝您的幫助<3愛你@havelock快速準確的答案! –

+0

沒問題,但很有趣,你的老師沒有發現它。那麼,取決於他/她在教什麼課題;-) – Havelock

0
<?php 
session_start(); 
include_once 'connect.php'; 
?> 
<div id="center"> 
<?php 
if (isset($_POST['submit'])) 
... 
... 
... 

記:在你Authenticate.php頁面()`您在會議之前寫的,以及頂部