未定义的变量:user

时间:2013-03-31 11:47:15

标签: php

似乎无法找到问题的答案。我已经将$ user声明为全局变量,然后通过cookie(如果存在)或表单设置它然后我调用start函数。 在启动函数中,我回显了它的一部分,但是我得到了未定义的变量:user,即使我定义了它。

 <?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

7 个答案:

答案 0 :(得分:2)

全球使用 -

$user = 'something';

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

如果您只想将变量设为全局变量,请在外部定义 -

define("USER","SOMETHING");

只需通过 -

即可访问
echo USER;

答案 1 :(得分: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
    }

答案 2 :(得分:0)

你不能将变量声明为全局变量,它不会那样工作。

相反,您需要将变量“导入”到每个函数中,方法是将global $user放在那里,或者将其作为参数传递,或者将其存储在像$_SESSION这样的超全局中。作为最后的手段,您可以使用$GLOBALS['user'],但这很昂贵。

答案 3 :(得分:0)

如果!isset($_COOKIE["user"])!isset($_POST['submit']),则$user将被取消定义。因此,在start()时,您指的是未定义的$user数组中的键。

此外,在全局空间中调用global $user没有意义,应将其移入使用该变量的每个函数,例如

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

答案 4 :(得分:0)

按照你想要的方式,在你想要使用全局变量的每个函数中,在函数的开头声明它。

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

答案 5 :(得分: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>

答案 6 :(得分:0)

我觉得你对这个答案感到困惑,最简单的答案如下:

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

写入form代码。