

現在  
環境は、mampを使ってやっています。  
urlは、http://localhost:8888/input/contact/confirm.phpで間違えないと思うのですが。  
var_dumpで確認してもNULLになっていました。

目標  
header関数じゃなくても良いのでセッションを渡せる方法あれば、ご意見お願い致します。

form.php

[code]

    <?php 
    session_start();// SESSIONを使うときは最初にスタートさせる
    
    // 送信ボタンが押されたかどうか
    if (isset($_POST['submit'])) {
        // POSTされたデータをエスケープ処理して変数に格納
        $kinds = htmlspecialchars($_POST['kinds'],ENT_QUOTES | ENT_HTML5);
        $name = htmlspecialchars($_POST['name'],ENT_QUOTES | ENT_HTML5);
        $email = htmlspecialchars($_POST['email'],ENT_QUOTES | ENT_HTML5);
        $gender = htmlspecialchars($_POST['gender'],ENT_QUOTES | ENT_HTML5);
        $okama = htmlspecialchars($_POST['okama'],ENT_QUOTES | ENT_HTML5);
        $water = htmlspecialchars($_POST['water'],ENT_QUOTES | ENT_HTML5);
        $title = htmlspecialchars($_POST['title'],ENT_QUOTES | ENT_HTML5);
        $body = htmlspecialchars($_POST['body'],ENT_QUOTES | ENT_HTML5);
    
        //エスケープ処理
        $errors = [];//エラー格納用配列
        //trim(文字列)→文字列内の空白を除去 →値がなくなればエラーにする
        if (trim($name) === '' || trim($name) ==="") {
            $errors['name'] = "名前を入力してください。";
        }
        if (trim($title) === '' || trim($title) ==="") {
            $errors['title'] = "名前を入力してください。";
        }
        if (trim($body) === '' || trim($body) ==="") {
            $errors['body'] = "名前を入力してください。";
        }
        if (count($errors) === 0) {
            // echo "入力値に以上ありませんでした。";
            // URLは「http」or「https」に注意
            header('Location: http://localhost:8888/input/contact/confirm.php');
        } else {
            // エラー配列があればエラーを表示
            echo $errors['name'];
            echo $errors['title'];
            echo $errors['body'];
        }
    }
    
    // confirm.phpから戻ってきたときに値を保持
    if (isset($_GET) && isset($_GET['action']) && $_GET['action'] === 'edit') {
        $kinds = $_SESSION['kinds'];
        $name = $_SESSION['name'];
        $email = $_SESSION['email'];
        $gender = $_SESSION['gender'];
        $okama = $_SESSION['okama'];
        $water = $_SESSION['water'];
        $title = $_SESSION['title'];
        $body = $_SESSION['body'];
    }
    
    ?>
    !DOCTYPE html>
    <html lang="ja">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>入力フォーム</title>
    </head>
    
    <body>
        <form method="post" action="confirm.php">
            〜〜省略〜〜
            <p>件名</p>
            <input type="text" name="name" value="" placeholder="件名" require>
            <p>内容</p>
            <textarea type= "text" name="body" placeholder="お問い合わせ内容" rows="7" required><?php  if(isset($body)){echo $body;}?></textarea>
            <button type="submit" name="submit" value="確認">確認</button>
        </form>
    </body>
    
    </html>
    
[/code]

リダイレクト先  
confirm.php

[code]

    <?php
        session_start();
        if (isset($_SESSION['kinds'])) {
            $kinds = $_SESSION['kinds'];
            $name = $_SESSION['name'];
            $email = $_SESSION['email'];
            $gender = $_SESSION['gender'];
            $okama = $_SESSION['okama'];
            $water = $_SESSION['water'];
            $title = $_SESSION['title'];
            $body = $_SESSION['body'];
        }
        var_dump($kinds);
    ?>
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>確認画面</title>
    </head>
    <body>
        <div>
            <h2>お問い合わせ内容確認</h2>
            <table>
               〜〜省略〜〜
            </table>
            <!-- POSTの送信先はsend.phpであることに注意してください -->
            <form method="post" action="send.php">
                <input type="hidden" name="token" value="<?php echo $token ?>">
                <button type="submit" value="送信">送信</button>
                <a href="form.php?action=edit">戻る</a>
            </form>
        </div>
    </body>
    </html>
    
[/code]


CC BY-SA 4.0
2023-04-27T15:24:55.213
94666
2023-04-28T00:49:55.367
51050
question
php html
PHPでmampを使いheader関数を使ってセッションをリダイレクトしようとしていますが出来ません。


はじめまして。

form.phpからconfirm.phpへのデータを渡す件に関しましてですが、このコードからですと下記2点のどちらかでいいような気がします。  
・form.phpのform内にてinputタブ(hidden)でデータを持たせPOSTで送信→confirm.phpにてPOSTで受け取る  
・$_SESSIONに値を入れてあげる

いただいたコード内を見る限り、そもそも$_SESSIONにデータを格納していないように見受けられます。(いただいているコード以外の個所で格納していたらすみません)  
もし$_SESSIONに格納していないのあれば、form.phpの最初で$_POSTから受け取って変数に格納しているのでそのあたりで$_SESSIONに格納してもよいかと思います。

また、他に気になった個所ですと、confirm.phpにてvar_dump($kinds)をしていますが、直前のif文の外に記載されております。  
$kindsの中身を確認したいのであればif文の中に、$_SESSION['kinds']の中身を確認したいのであれば、var_dump($_SESSION['kinds']);のほうが良いかと。

他に細かいことですが、form.phpのHTML記載箇所について、「!DOCTYPE
html>」となっており「<」が抜けておりますので併せてご確認ください。


CC BY-SA 4.0
2023-04-28T00:49:55.367
94669
2023-04-28T00:49:55.367
58081
94666
answer