2011-05-01 122 views
5

我只是不能讓我的變量繼續下一頁。變量賦值在初始頁面(測試)上工作正常,但在進入下一頁時,該值爲空。 Plz幫助!PHP會話不工作

第1頁:

<?PHP session_start(); ?> 
<HTML> 
<HEAD> 
    <META NAME='robots' CONTENT='noindex,nofollow'> 
    <TITLE>Master Chief's Gamestore</TITLE> 
    <STYLE type="text/css"> 
     BODY { 
      color: #ffffff; 
      background: url('~/halo-reach.jpg'); 
      background-repeat: no-repeat; 
      background-position: top; 
      background-color: black; 
     } 
    </STYLE> 
</HEAD> 
<body vLink='#3366CC' link='#3366CC' alink='#3366CC'> 
<br/><br/><br/><br/><br/> 
<table width='100%' height='80%'> 
    <tr> 
     <td align='center' valign='middle'> 
      <table width="50%" cellspacing="0" cellpadding="25" border="0"> 
       <form method="post"> 
        <tr bgcolor="#666633"> 
         <th id="header" align="left" colspan="3"> 
          <DIV align="center"> 
           <font face="Verdana, Arial, Helvetica" color="white" size="3"> 
            &nbsp; Master Chief's Gamestore </font> 
          </DIV> 
         </th> 
        </tr> 
        <tr bgcolor="#A3A385"> 
         <td width="100%" valign="middle" colspan="2"> 
          <font face="Verdana, Arial, Helvetica" size="2"> 
           <div align="center"><br/><br/> 
            Username:&nbsp 
            <input type="text" name="username">&nbsp 
            Password:&nbsp 
            <input type="password" name="password"><br/> 
            <br/><input type="submit" name="act" value="Login"><br/> 
            <input type="submit" name="act" value="Register"><br/> 
            <input type="submit" name="act" value="Main"><br/> <br/><br/> 
           </div> 
          </font> 
         </td> 
        </tr> 
        <?PHP 
        if ($_POST['act'] == "Login") { 
         mysql_connect("~", "~", "~") or die("unable to connect to server"); 
         mysql_select_db("~") or die("unable to select database"); 
         $user = $_POST['username']; 
         $pass = $_POST['password']; 
         $query = "select * from users where user like '%" . $user . "%' and pass like '%" . $pass . "%';"; 
         $result = mysql_query($query); 
         $rows = mysql_numrows($result); 
         if ($rows == 0 || strlen($user) == 0) { 
          echo "<br />Login Failure"; 
         } else { 
          $_SESSION['user'] = mysql_result($result, 0, "user"); 
          $_SESSION['id'] = mysql_result($result, 0, "P_Id"); 
          header('Location: ~/success.php'); 
         } 
        } 
        if ($_POST['act'] == "Register") { 
         header('Location: ~/register.php'); 
        } 
        if ($_POST['act'] == "Main") { 
         header('Location: ~/index.php'); 
        } 
        ?> 
        <div align="center"> 
         <tr bgcolor="#666633"> 
          <td align="left"> 
           Logged in as: 
           <?PHP 
           $user = $_SESSION['user']; 
           if (!$user) { 
            $user = 'Guest'; 
           } 
           echo $user; 
           ?> 
          </td> 
          <td align="right"> 
           Password:&nbsp 
           <input type="password" name="srcpw"> 
           <input type="submit" name="dspphp" value="Display PHP"> 
          </td> 
         </tr> 
        </div> 
       </form> 
      </table> 
     </td> 
    </tr> 
</table> 
</body> 
</html> 

第2頁:

<?PHP session_start(); ?> 
<HTML> 
<HEAD> 
    <META NAME='robots' CONTENT='noindex,nofollow'> 
    <TITLE>Master Chief's Gamestore</TITLE> 
    <STYLE type="text/css"> 
     BODY { 
      color: #ffffff; 
      background: url('~/halo-reach.jpg'); 
      background-repeat: no-repeat; 
      background-position: top; 
      background-color: black; 
     } 
    </STYLE> 
</HEAD> 
<body vLink='#3366CC' link='#3366CC' alink='#3366CC'> 
<br/><br/><br/><br/><br/> 
<table width='100%' height='80%'> 
    <tr> 
     <td align='center' valign='middle'> 
      <table width="30%" cellspacing="0" cellpadding="25" border="0"> 
       <form method="post"> 
        <tr bgcolor="#666633"> 
         <th id="header" align="left" colspan="3"> 
          <DIV align="center"> 
           <font face="Verdana, Arial, Helvetica" color="white" size="3"> 
            &nbsp; Master Chief's Gamestore </font> 
          </DIV> 
         </th> 
        </tr> 
        <tr bgcolor="#A3A385"> 
         <td width="100%" valign="middle" colspan="2"> 
          <font face="Verdana, Arial, Helvetica" size="2"> 
           <div align="center"> 
            <br/><br/>Success<br/><br/> 
            <input type='submit' name='main' value='Main'> 
            <?PHP 
            if ($_POST['main'] == "Main") { 
             header('Location: http://~/index.php'); 
            } 
            if ($_POST['act'] == "Display Code") { 
             if ($_POST['pw'] == "pass") { 
              highlight_file("success.php"); 
             } 
            } 
            ?> 
           </div> 
          </font> 
         </td> 
        </tr> 
        <div align="center"> 
         <tr bgcolor="#666633"> 
          <td align="left"> 
           Logged in as: 
           <?PHP 
           $user = $_SESSION['user']; 
           if (!$user) 
            $user = 'Guest'; 
           echo $user; 
           ?> 
          </td> 
          <td align="right"> 
           Password:&nbsp 
           <input type="password" name="pw"> 
           <input type="submit" name="dspphp" value="Display PHP"> 
          </td> 
         </tr> 
        </div> 
       </form> 
      </table> 
     </td> 
    </tr> 
</table> 
</body> 
</html> 

編輯:我試過這個示例代碼和它不工作。

第1頁:

<?php 
session_start(); 
if (isset($_GET['link'])) { 
    $_session['myvariable'] = 'Hello World'; 
    header('Location: http://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['REQUEST_URI']) . '/page2.php'); 
    exit; 
} 
?> 
<a href="<?php print $_SERVER['REQUEST_URI'] . '?link=yes'; ?>">Click Here</a> 

第2頁:

<?php 
session_start(); 
print 'Here is page two, and my session variable: '; 
print $_session['myvariable']; 
exit; 
?> 

但正如我下面貼,我已經使用在其他網頁會話成功地在同一臺服務器上。太令人沮喪了......

感謝所有的帖子順便說一句!

+0

'HTTP://〜/ index.php'這不是AV alid URL,除非你在本地網絡上有一個名爲'〜'的網站。 – 2011-05-01 17:34:10

+0

我已將代碼更改爲不包含私人信息。 – Josh 2011-05-01 17:56:00

+0

如果你還沒有,請查看我編輯過的有關發送標題的答案。 – Thilo 2011-05-01 18:19:25

回答

8

確保啓用cookies以便第二個頁面實際上重新創建第一個頁面的會話,而不是創建一個新的空白頁面。詳情請查看http://www.php.net/manual/en/session.idpassing.php

編輯

另一個可能的原因是預期的,尤其是如果它只會影響某些網頁,是你有你的第一個「在session_start前意外空格或其他輸出不工作會議()錯誤

+0

我已經運行了示例代碼,但它不起作用,但我之前在同一臺服務器上使用了會話,這些服務器仍然託管並正常工作。 – Josh 2011-05-01 18:13:54

+0

我必須清除頁面cookie才能使其正常工作。非常感謝你指點我的餅乾路徑! – Josh 2011-05-01 18:24:22

2

看起來你只是將用戶重定向到第二頁而沒有發佈任何內容。你會想設置隱藏的變量,並實際提交你的表單到第二頁。重新指揮將失去所有的後期變量。

如果要使用重定向將變量發送到第二頁,則可以使用會話變量或通過URL傳遞到第二頁的GET變量。

+0

也許我的格式很混亂。我的任務包含在if($ _ POST ['act'] ==「Login」)中。你是這個意思嗎? – Josh 2011-05-01 17:17:28

+0

我看到您檢查變量,但由於第一頁上的重定向(標題/位置線),變量從未將其變爲第二頁。當你這樣重定向時,它不會將任何POST變量傳遞給下一頁。所以你要麼必須用GET或SESSION變量傳遞它到下一頁。或者,您可以使用Javascript將表單從第一頁提交到第二頁,但我建議使用會話變量以防人們未啓用Javascript。 – Mikecito 2011-05-01 17:34:57

+0

這就是他正在做的 - 就在重定向之前,他將值賦給$ _SESSION。問題是,$ _SESSION在隨後的頁面上是空的。 – Thilo 2011-05-01 17:44:59

1

嘗試使用

$_SESSION['myvariable'] = 'Hello World'; 

在大寫

+0

是的,相信某人elses測試代碼可能是一個錯誤。我將該文件發送到回收站!不過謝謝:) – Josh 2011-05-01 18:25:55