2013-03-31 36 views
-1

似乎無法找到問題的答案。我已經將$ user聲明爲全局變量,然後通過cookie(如果存在)或通過表單設置它,然後我稱之爲啓動函數。 在開始函數中我回顯了它的一部分,但我得到了未定義變量:即使我已經定義了它。未定義的變量:用戶

<?php 
    global $user; 
    function ConsoleLog($message) 
    { 
     echo '<script>console.log("' . $message. '")</script>'; 
    } 
    if (isset($_COOKIE["user"])){ 
     $user = unserialize($_COOKIE["user"]); 
     start(); 
     } 
    else{ 
      if (isset($_POST['submit'])) 
    { 
     $user = array(
     "name" => $_POST['name'], 
     "class" => $_POST['class'], 
     "school" => $_POST['school'], 
     ); 
     $expire=time()+60*60*24*365; 
     setcookie("user",serialize($user), $expire); 
     start(); 
    } 
    else 
    { 
      echo "Welcome new user!\n<br/>"; 
      echo '<form method="post"> 
    Name: <input type="text" name="name"> 
    Class:<select name="class"> 
     <option value="9">9</option> 
    </select> 
    School: <input type="text" name="school"> 
    <input type="submit" name="submit"> 
    </form>'; 
    } 
    } 
    function start(){ 
     echo "Your name: " . $user['name'] . "!\n<br/>"; 
     echo "Your class: " . $user['class'] . "\n<br/>"; 
     echo "Your school: " . $user['school'] . "\n<br/>"; 
     ?> 
     <hr/> 
     <h2>HomePage</h2> 
     <?php 
    } 
    ?> 

Screenshot

+3

將$ user聲明爲主代碼中的普通變量;在你想訪問它的函數中使用'global' ....但是最好作爲函數參數傳遞 –

+0

只是一個註釋:'submit'對於一個元素來說是'name'的一個糟糕的選擇。如果你將來使用這些庫,它會導致像jquery這樣的圖書館出現很多問題。 –

+1

@MarkBaker應作爲回答發佈而不是評論。 –

回答

2

用法 -

$user = 'something'; 

function someFunction(){ 
    global $user;  // here global will make $user var accessible inside function. 
    echo $user; 
} 

如果你只是想使變量全球,外界把它定義 -

define("USER","SOMETHING"); 

這將僅僅通過訪問 -

echo USER; 
0

當你調用函數的start()也傳遞參數:

if (isset($_COOKIE["user"])){ 
    $user = unserialize($_COOKIE["user"]); 
    start($user); 
    } 

或任何要調用該函數使用:start($user);

而變化接受參數的函數:

function start($array){ 
     echo "Your name: " . $array['name'] . "!\n<br/>"; 
     echo "Your class: " . $array['class'] . "\n<br/>"; 
     echo "Your school: " . $array['school'] . "\n<br/>"; 
     ?> 
     <hr/> 
     <h2>HomePage</h2> 
     <?php 
    } 
0

您不能將變量聲明爲全局變量,它不會以這種方式工作。

相反,您需要將global $user作爲參數或將其作爲參數傳遞給每個函數,或者將其存儲在超全局像$_SESSION中。作爲最後的手段,您可以使用$GLOBALS['user'],但這很貴。

0

if !isset($_COOKIE["user"]) and !isset($_POST['submit']) then $user will undefined。因此,在start()時,您指的是未定義的$user陣列中的按鍵。

另外,在全局空間中調用global $user沒有意義,應該將其移入使用該變量的每個函數,例如,

function start() { 
    global $user; 
    // ... 
} 
0

要做到這一點,你想在每個你想使用全局變量的函數中聲明它在函數的開頭。全球

function start(){ 
    global $user; 
    ... 
} 
0

這是您的代碼

<?php 
    global $user; 
    function ConsoleLog($message) 
    { 
     echo '<script>console.log("' . $message. '")</script>'; 
    } 
    if (isset($_COOKIE["user"])){ 
     $user = unserialize($_COOKIE["user"]); 
     echo "Your name: " . $user['name'] . "!\n<br/>"; 
     echo "Your class: " . $user['class'] . "\n<br/>"; 
     echo "Your school: " . $user['school'] . "\n<br/>"; 
      } 
    else{ 
      if (isset($_POST['submit'])) 
    { 
     $user = array(
     "name" => $_POST['name'], 
     "class" => $_POST['class'], 
     "school" => $_POST['school'], 
     ); 
     $expire=time()+60*60*24*365; 
     setcookie("user",serialize($user), $expire); 
     echo "Your name: " . $user['name'] . "!\n<br/>"; 
     echo "Your class: " . $user['class'] . "\n<br/>"; 
     echo "Your school: " . $user['school'] . "\n<br/>"; 
     } 
    else 
    { 
      echo "Welcome new user!\n<br/>"; 
      echo '<form method="post"> 
    Name: <input type="text" name="name"> 
    Class:<select name="class"> 
     <option value="9">9</option> 
    </select> 
    School: <input type="text" name="school"> 
    <input type="submit" name="submit"> 
    </form>'; 
    } 
    } 

     ?> 
     <hr/> 
     <h2>HomePage</h2> 
+0

你只是沒有正確地通過該功能 –

0

我想你在這個不同的答案困惑,最簡單的答案是如下:

<form method="" enctype="multipart/form-data"> 

form標籤。

+2

這應該作爲評論發佈,而不是作爲答案。 – JoelC