-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

希望どおりに行うには、グローバル変数を使用する各関数で、関数の先頭で宣言します。

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

関数 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

このさまざまな回答で混乱していると思いますが、最も簡単な回答は次のとおりです。

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

formタグに書き込みます。

于 2015-04-22T17:46:45.170 に答える