2014-03-30 69 views
0

我正在为我的计算课做一个游戏。用户在播放之前必须更改其机器人的设置。大多数使用的是Visual Basic或Game Maker,但我对使用基于Web的语言感觉更加舒适。

我刚刚遇到的问题是当我检查是否设置$ _SESSION变量。这是我的脚本的截图:

http://i60.tinypic.com/2ia4hnr.jpg

正如你可以看到左边的是一个名为“播放”按钮。在用户自定义页面中,用户填写所有设置,并将它们存储为$ _SESSION变量,但是当我在所有其他页面上使用If语句时,它始终将它们视为未设置,因此它不允许它们播放。

这是customise.php页面代码(抱歉发布的所有代码,但我觉得这是需要我更好地解释我的问题):

<?php $layout_context = "public"; ?> 
<?php include("header.php"); ?> 

<div id="main"> 
    <div id="navigation"> 
    <h2><i><u>Navigation</u></i></h2> 
<br /> 
<u><a href="index.php">Welcome</a><br /><br /> 
<u><a href="instructions.php">How to Play?</a></u><br /><br /> 
<u><a href="customise.php"><font color="orange">Customisation</font></a></u><br /><br /> 
<?php if (isset($_SESSION['RobotName'], $_SESSION['traction'], $_SESSION['passenger'])) { 
?> 
<u><a href="game.php">Play</a></u> 
<?php 
    } else { 
    ?> 
    <u><a href="#" onclick="alert('You must customise your robot first before playing!');">Play</a></u> 
    <?php 
} 
?> 
    </div> 
<div id="page"> 
     <h1>Robot Customisation</h1> 
     <br /> 
     <p><h3>Welcome to the BotMod Robot Customisation!</h3><br /> 
      Below you will have three options that enable you to play BotMod. Those are: Your Robot name, Traction Type and Passenger Size.<br /> See the bottom of this page for further guidance.<br /><br /> 
<br /> 
<form id="settings" name="settings" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <h4>Robot Name:</h4> <input type="text" name="RobotName"><br /> 
    <h4>Traction Type:</h4> 
    <select name="traction"> 
     <option value="">Please Select Your Traction Type...</option> 
    <option value="Wheels">Wheels</option> 
    <option value="Tracks">Tracks</option> 
    <option value="Skis">Skis</option> 
</select> 
<br /> 
<h4>Passenger Size:</h4> 
    <select name="passenger"> 
     <option value="">Please Select Your Passenger Size...</option> 
    <option value="Large">Large</option> 
    <option value="Medium">Medium</option> 
    <option value="Small">Small</option> 
</select> 
<br /> 
<input type="submit" name="Submit" value="Save Settings" /> 
</form> 
<?php 
require_once("session_start.php"); 
// Store all submitted $_POST fields to their own $_SESSION ID to be called 
// later. Must use session_start(); 
if (isset($_POST['Submit']) && $_POST['RobotName'] != '' && $_POST['traction'] != '' && $_POST['passenger'] != '') { 
    $_SESSION['RobotName'] = $_POST['RobotName']; 
    $_SESSION['traction'] = $_POST['traction']; 
    $_SESSION['passenger'] = $_POST['passenger']; 
} elseif (isset($_POST['Submit'])) { 
    echo "<br />"; 
    echo "<br />"; 
    echo "<strong>Error: You must complete all fields on this page!</strong><br />"; 
} 

?> 
<br /> 
<style> 
div.container 
{ 
width:30em; 
border:1em solid; 
} 
div.box 
{ 
box-sizing:border-box; 
-moz-box-sizing:border-box; /* Firefox */ 
width: 50%; 
border: 1em solid red; 
float: left; 
} 
</style> 
<?php if (isset($_POST['Submit']) && $_POST['RobotName'] != '' && $_POST['traction'] != '' && $_POST['passenger'] != '') { 
echo "<h4>Your Settings (Click Play BotMod) to begin.</h4>"; 
?> 
<div class="container"> 
<div class="box"><strong><i>Robot Name:</i></strong> <?php echo $_SESSION['RobotName']; ?><br /></div> 
<div class="box"><strong><i>Traction:</i></strong> <?php echo $_SESSION['traction']; ?><br /></div> 
<div class="box"><strong><i>Passenger:</i></strong> <?php echo $_SESSION['passenger']; ?><br /></div> 
<div class="box"><strong><a href="game.php">Play BotMod</a></strong><br /></div> 
<div style="clear: both;"></div> 
</div> 
<?php 
} 
?> 
    </div> 
</div> 

<?php include("footer.php"); ?> 

正如你可以看到我已经创建了一个If声明播放导航。

<?php if (isset($_SESSION['RobotName'], $_SESSION['traction'], $_SESSION['passenger'])) { 
?> 
<u><a href="game.php">Play</a></u> 
<?php 
    } else { 
    ?> 
    <u><a href="#" onclick="alert('You must customise your robot first before playing!');">Play</a></u> 
    <?php 
} 
?> 

这不会在任一页面的工作:customise.phpindex.phpinstructions.php。 我创建了customise.php页面上的变量,此代码:

If (isset($_POST['Submit']) && $_POST['RobotName'] != '' && $_POST['traction'] != '' && $_POST['passenger'] != '') { 
    $_SESSION['RobotName'] = $_POST['RobotName']; 
    $_SESSION['traction'] = $_POST['traction']; 
    $_SESSION['passenger'] = $_POST['passenger']; 
} elseif (isset($_POST['Submit'])) { 
    echo "<br />"; 
    echo "<br />"; 
    echo "<strong>Error: You must complete all fields on this page!</strong><br />"; 
} 

?> 

我的index.php导航代码:

<u><a href="index.php"><font color="orange">Welcome</font></a><br /><br /> 
    <u><a href="instructions.php">How to Play?</a></u><br /><br /> 
    <u><a href="customise.php">Customisation</a></u><br /><br /> 
    <?php require_once("session_start.php"); ?> 
    <?php if (isset($_SESSION['RobotName'], $_SESSION['traction'], $_SESSION['passenger'])) { 
    ?> 
    <u><a href="game.php">Play</a></u> 
    <?php 
     } else { 
     ?> 
<u><a href="#" onclick="alert('You must customise your robot first before playing!');">Play</a></u> 
    <?php 
} 
?> 

因此,没有人知道为什么$_SESSION变量似乎并没有工作?目前我正在使用MAMP,以防与此有关。

+0

你使用'在session_start()'每一页 –

+0

是的,我需要的文件上'session_start.php'在所有包含此代码的文件中:'<?php session_start(); ?>'。 –

+0

@MattKent它不能是'session start.php'它可以是'session-start.php'或'session_start.php';)试着在第一行放上'<?php session_start()?>'你的文档使用会话变量 – mdesdev

回答

2

session_start();必须在每一个地方,你使用$_SESSION变量页面的顶部被调用之前,调用session_start()。

文档:http://php.net/function.session-start

+0

这是我的问题。我没有在页面的顶部定义它。 :) –

1

您需要访问任何会话变量

2

使用会话启动方法

例如:

session_start();