2

私は自分自身にphpを教えるために迷路ジェネレータを書き続けています...

セッションと、名前と迷路のサイズ(5〜20)を収集するためのフォームを設定しました。

正常に動作する最初の実行で、迷路が生成されます。

今後のセッションでは、名前は記憶されていますが、サイズは再入力されます。

セッションが新しくない場合は別の(別の)フォームを使用しようとしましたが、セッションが認識/実行されておらず、エラーが発生し、$mazesizeが認識されないインデックスであることがわかりました。

コード:

<?php
session_start();
error_reporting(-1);
?>
<html>
<head>
</head>
<body>
<?php

include 'ClassFunc1.php';

//program functionality
if (!isset($_SESSION['name']) && !isset($_POST['name'])){
    //if no data, print form
        ?><table><tr>
        <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
        <td>Name: </td><td><input type="text" name="name"></td></tr>
        <tr><td>Maze size (min 5 max 20): </td><td><input type="text" name="mazesize"></td></tr>
        <tr><td colspan="2" align="center"><input type="submit" name="submit" value="Submit"></td></tr>
        </form></table>
        <?php
}else if (!isset($_SESSION['name']) && isset($_POST['name']) && isset($_POST['mazesize'])){
        //if a session doesn't exist but the form has been submitted
        //check to see if the form has all required values
        //create a new session
        if(!empty($_POST['name'])){
        $_SESSION['name']=$_POST['name'];
        $_SESSION['start']=time();
        echo "Welcome, ".$_POST['name'].". A new session has been activated for you. Click <a href=".$_SERVER['PHP_SELF'].">here</a> to refresh the page.";
        if($_POST['mazesize']>20){
            $m_size=20;
        }elseif($_POST['mazesize']<5){
            $m_size=5;
        }else{
            $m_size=$_POST['mazesize'];
        }
        define("COL_MAX",$m_size);
        define("ROW_MAX",$m_size);
        run_maze($_POST['name']);
        close_down();
        }else{
            echo "ERROR. Please enter your name and a maze size";
        }
}else if (isset($_SESSION['name'])) {
        //if a previous session exists
        //calculate elapsed time since session start and now
        echo "Welcome back, ".$_SESSION['name'].". This session was activated ".round((time()-$_SESSION['start'])/60)." minute(s) ago. Click <a href=".$_SERVER['PHP_SELF'].">here</a> to refresh the page.<br />";
        echo "Current session ID: ".session_id();
    //Ask for a new maze size
        ?><table><tr>
        <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
        <td>Maze size (min 5 max 20): </td><td><input type="text" name="mazesize"></td></tr>
        <tr><td colspan="2" align="center"><input type="submit" name="submit" value="Submit"></td></tr>
        </form></table>
        <?php
        if($_POST['mazesize']>20){
            $m_size=20;
        }elseif($_POST['mazesize']<5){
            $m_size=5;
        }else{
            $m_size=$_POST['mazesize'];
        }
    define("COL_MAX",$m_size);
    define("ROW_MAX",$m_size);
    run_maze($_POST['name']);
    close_down();
}

//session_destroy();


?>

「インクルード」ファイルは、クラス、メソッド、および関数です。

私は何か間違ったことをしたと確信しています、誰か助けてもらえますか?

どうもありがとう

ETA:

(エコー「ERROR ...行」の後にコードが修正されました)

    }else if (isset($_SESSION['name']) && !isset($_POST['n_mazesize'])) {
            //if a previous session exists but n_mazesize not set
            //calculate elapsed time since session start and now
            echo "Welcome back, ".$_SESSION['name'].". This session was activated ".round((time()-$_SESSION['start'])/60)." minute(s) ago. Click <a href=".$_SERVER['PHP_SELF'].">here</a> to refresh the page.<br />";
            echo "Current session ID: ".session_id();
        //Ask for a new maze size
            ?><table><tr>
            <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
            <td>Maze size (min 5 max 20): </td><td><input type="text" name="n_mazesize"></td></tr>
            <tr><td colspan="2" align="center"><input type="submit" name="submit" value="Submit"></td></tr>
            </form></table>
            <?php
    }else if (!isset($_SESSION['name']) && isset($_POST['n_mazesize'])){
            //if a previous session exists and n_mazesize is set
            //calculate elapsed time since session start and now
            echo "Welcome back, ".$_SESSION['name'].". This session was activated ".round((time()-$_SESSION['start'])/60)." minute(s) ago. Click <a href=".$_SERVER['PHP_SELF'].">here</a> to refresh the page.<br />";
            echo "Current session ID: ".session_id();
            if(!empty($_POST['n_mazesize'])){
            if($_POST['n_mazesize']>20){
                $m_size=20;
            }elseif($_POST['n_mazesize']<5){
                $m_size=5;
            }else{
                $m_size=$_POST['n_mazesize'];
            }
        run_maze($_SESSION['name'], $m_size);
        close_down();
        }

    //session_destroy();
    }

    ?>
</body>
</html> 

これはサイズを要求しますが、送信時に空白の画面を返します:-(

4

1 に答える 1

2

$ _POST ['mazesize']の値は、フォームが送信された場合にのみ使用できます。条件を追加する必要があります。

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // use posted data here
}
于 2012-05-14T15:22:54.317 に答える