47130
1枚目のページinput.phpの次へボタンを押し、  
2枚目のページdogcat.phpの確認ボタンを押すと、  
3枚目のページconfirm2.phpがNot Found  
The requested URL /confirm2.php was not found on this server.  
になります。ドキュメントルートもファイル保存場所も1枚目と2枚目のページと同じ  
場所なのに何故confirm2.phpだけNot Foundになるのでしょうか。  
お手すきの際で結構ですので、ご確認頂けると幸いです。  
宜しくお願いします。

[![画像の説明をここに入力](https://i.stack.imgur.com/tiyOp.png)](https://i.stack.imgur.com/tiyOp.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/ej228.png)](https://i.stack.imgur.com/ej228.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/D7WW3.png)](https://i.stack.imgur.com/D7WW3.png)

input.php

```

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <title>入力ページ</title>
    <link href="../../css/style.css" rel="stylesheet">
    </head>
    <body>
    <div>
        アンケート(1/2) <br>
     <form method="POST" action="dogcat.php">
        <ul>
           <li><label>名前:
               <input type="text" name="name" placeholder="ニックネーム可" value="<?php echo es($name) ?>" ;>
           </label></li>
           <li><label>好きな言葉:
              <input type="text" name="kotoba" value="<?php echo es($kotoba) ?>" ;>
            </label></li>
            <li><input type="submit" value="次へ"></li>
        </ul>
     </form>
    </div>
    </body>
    </html>
    
```

dogcart.php

```

    <?php
    //セッションの開始
    session_start();
    require_once("util.php");
    
    //$_POST変数に値があればセッション変数に受け渡す
    if (isset($_POST[ 'name' ])) {
       $_SESSION[ 'name' ] = $_POST[ 'name' ];
     }
    if (isset($_POST[ 'kotoba' ])) { 
       $_SESSION[ 'kotoba' ] = $_POST[ 'kotoba' ];
     }
    //セッション変数に値があれば受け渡す
    if (empty($_SESSION[ 'dogcat' ])) {
        $dagcat = [];
     } else {
    $dogcat = $_SESSION[ 'dogcat' ];
    }
    ?>
    
    <?php
    //初期値でチェックするかどうか
     function checked($value, $question) {
        if (is_array($question)) {
            //配列の時、値が含まれていればtrue
        $isChecked = in_array($value, $question);
        } else {
            //配列ではない時、値が一致すればtrue
     $isChecked = ($value===$question);
     }
     if ($isChecked) {
        //チェックする
        echo "checked";
     } else {
        echo "";
      }
    }
    ?>
    
    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <title>犬好き猫好きページ</title>
    <link href="../../css/style.css" rel="stylesheet">
    </head>
    <body>
    <div>
     アンケート(2/2) <br>
     <form method="POST" action="confirm2.php">
        <ul>
            <li><span>犬が好きですか？猫が好きですか？</span><br>
            <label><input type="checkbox" name="dogcat[]" value="犬" <?php checked("犬", $dogcat); ?> >犬が好き</label><br>
            <label><input type="checkbox" name="dogcat[]" value="猫" <?php checked("猫", $dogcat); ?> >猫が好き</label>
    　　<li>
           <input type="button" value="戻る" onclick="location.href='input.php' ">
           <input type="submit" value="確認する" >
        </ul>
     </form>
    </div>
    </body>
    </html>
    
```

confirm2.php

```

    <?php
      //セッションの開始
    session_start();
    require_once("util.php");
    ?>
    
    <?php
      //文字エンコードの検証
    if (!cken($_POST)) {
     $encoding = mb_internal_encoding();
     $err = "Encoding Error! The expected encoding is " . $encoding;
     $isError = true;
      //エラーメッセージを出して、以下のコードを全てキャンセルする
      exit($err);
      }
    ?>
    
      <?php
       //入力データの取り出しとチェック
     $error = [];
      //セッション変数に値があれば受け渡す
      if (empty($_SESSION[ 'name' ])) {
         $error[] = "名前を入力して下さい。";
      } else {
        $name = $_SESSION[ 'name' ];
    }
    if (empty($_SESSION[ 'kotoba' ])) {
        $error[] = "好きな言葉を入力して下さい。";
    } else {
        $kotoba = $_SESSION[ 'kotoba' ];
    }
    
      //POSTされた値をセッション変数に受け渡す
      if (isset($_POST[ 'dogcat' ])) {
     $dogcat = $_POST[ 'dogcat' ];    
     $_SESSION[ 'dogcat' ] = $dagcat;
     //値のチェック
     $diffValue = array_diff($dogcat, ["犬","猫"]);
     //規定外の値が含まれていなければok
     if (count($diffValue)>0) {
           $error[] = "犬好き猫好きの回答にエラーがありました。";
    }
    $dogcatString = implode("好きで、", $dagcat) . "好きです。";
    } else {
    $dogcatString = "どちらも好きではありません。";
    $_SESSION[ 'dogcat' ] = [];
    }
    ?>
    
    <!DOCTYPE html>
    <html lang="ja">
    <head>
      <meta charset="utf-8">
      <title>確認ページ</title>
      <link href="../../css/style.css" rel="stylesheet">
    </head>
    <body>
    <div>
    <form>
    <?php if(count($error)>0 ) { ?>
    
     <span class="error"><?php echo implode('<br>', $error); ?></span><br>
    <span>
        <input type="button" value="戻る"  onclick="locaton.href='input.php' ">
    </span>
    <?php } else { ?>
    
    <span>
     名前:<?php echo es($name); ?><br>
     好きな言葉:<?php echo es($kotoba); ?><br>
     犬猫好き？:<?php echo es($dogcatString); ?><br>
    <input type="button" value="訂正する" onclick="location.href='input.php' ">
    <input type="button" value="送信する" onclick="location.href='thankyou2.php' ">
    </span>
    <?php } ?>
    </form>
    </div>
    </body>
    </html>
    
```

thankyou2.php

```

    <?php
    require_once("util.php");
      //セッションの開始
    session_start();
    //セッションのチェック
    $error = [];
    if (!empty($_SESSION[ 'name' ]) && !empty($_SESSION[ 'kotoba' ])) {
     //セッション変数から値を取り出す
    $name = $_SESSION[ 'name' ];
    $kotoba = $_SESSION[ 'kotoba' ];
    $dogcat = $_SESSION[ 'dogcat' ];
    $dogcatString = implode("好きで、", $dogcat) . "好きです。";
    } else {
        //セッション変数が空だった時
       $error[] = "セッションエラーです。";
    }
    //HTMLを表示する前にセッションを終了する
    killSession()
    ?>
    
    <?php
    //セッションを破棄する
    function killSession() {
    //セッション変数の値を空にする
    $_SESSION = [];
    //セッションクッキーを破棄する
    if (isset($_COOKIE[session_name()])) {
       $params = session_get_cookie_params();
       setcookie(session_name(), ' ', time()-36000, $params[ 'path' ]);
       }
      //セッションを破棄する
      session_destroy();
      }
    ?>
    
     <!DOCTYPE html>
    <html lang="ja">
    <head>
         <meta charset="utf-8">
         <title>完了ページ</title>
    <link href="../../css/style.css" rel="stylesheet">
    </head>
    <body>
    <div>
       <?php if (count($error)>0) { ?>
    
       <span class="error"><?php echo implode('<br>' , $error); ?></span><br> 
       <span>
         <input type="button" value="最初のページに戻る" onclick="location.href='input.php' ">
       </span>
       <?php } else { ?>
    
          次のように受付けました。ありがとうございました。
          <HR>
          <span>
          名前:<?php echo es($name); ?><br>
          好きな言葉:<?php echo es($kotoba); ?><br>
          犬猫好き？:<?php echo es($dogcatString); ?><br>
          <a href="input.php" >最初のページに戻る</a>
          </span>
            <?php } ?>
      </div>
      </body>
      </html>
    
```

エラーコード

```

    [31-Jul-2018 07:41:15 UTC] PHP Notice:  Undefined variable: dogcat in /Applications/MAMP/htdocs/dogcat.php on line 53
    [31-Jul-2018 07:41:15 UTC] PHP Notice:  Undefined variable: dogcat in /Applications/MAMP/htdocs/dogcat.php on line 54
    
    [31-Jul-2018 07:43:41 UTC] PHP Notice:  Undefined index: dogcat in /Applications/MAMP/htdocs/thankyou2.php on line 11
    [31-Jul-2018 07:43:41 UTC] PHP Warning:  implode(): Invalid arguments passed in /Applications/MAMP/htdocs/thankyou2.php on line 12
    
```
CC BY-SA 4.0
2018-07-31T08:01:03.030
47129
2018-07-31T08:42:17.273
2018-07-31T08:42:17.273
19110
29530
question
php
複数ページでセッション変数を利用する
FORMタグでACTIONの指定先を絶対パス、または相対パスで明示してみてください。

例： すべてのファイルが同じディレクトリに存在するなら`./`を追加 (相対パス)

```

    <form method="POST" action="./confirm2.php">
    
```

または絶対パスで指定

```

    <form method="POST" action="http://localhost/confirm2.php">
    
```
CC BY-SA 4.0
2018-07-31T08:30:16.383
47130
2018-07-31T08:35:58.973
2018-07-31T08:35:58.973
3060
3060
47129
answer