-1

似乎找不到问题的答案。我已将 $user 声明为全局变量,然后通过 cookie(如果存在)或表单设置它,然后我调用 start 函数。在 start 函数中,我回显了它的一部分,但我得到了 Undefined variable: 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
    }
    ?>

截屏

4

7 回答 7

2

使用全局 -

$user = 'something';

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

如果您只想使变量成为全局变量,请在外部定义它 -

define("USER","SOMETHING");

只需通过以下方式访问 -

echo USER;
于 2013-03-31T11:54:41.390 回答
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
    }
于 2013-03-31T11:51:28.687 回答
0

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

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

于 2013-03-31T11:51:38.147 回答
0

if!isset($_COOKIE["user"])!isset($_POST['submit'])then$user将是未定义的。因此,当时start()您指的是未定义$user数组中的键。

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

function start() {
   global $user;
   // ...
}
于 2013-03-31T11:52:41.403 回答
0

要按照您想要的方式执行此操作,请在要使用全局变量的每个函数中,在函数的开头声明它。

function start(){
    global $user;
    ...
}
于 2013-03-31T11:54:38.143 回答
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>
于 2013-03-31T11:55:37.347 回答
0

我认为您对各种答案感到困惑,最简单的答案如下:

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

写在form标签里。

于 2015-04-22T17:46:45.170 回答