PHP重复输出

时间:2015-04-03 06:21:53

标签: php pdo

出于某种原因,我的代码只输出'p3'和'p4'两次。我想知道是否有人能指出它为什么重复,并且值得赞赏。这是一个错误的例子(这只是在p3和p4上面,如上所述,p1和p2工作正常)

http://i.imgur.com/glNXwr7.png

这是我的代码:

index.php -

 <?php
 session_start();

 if (!isset($_SESSION['p']))
 {
     $_SESSION['p'] = 'p1';
 }

 include('core.php');
 include('core2.php');
 $story = new Story;
 $action = new Action;
 $part = $_SESSION['p'];
 ?>
 <!DOCTYPE HTML>
 <html>
<head>
    <title>MacBeth Console</title>

    <style>
        body{
        background:black;
        color:#2ecc71;
        font-family: "Courier New", Courier, monospace
        }

        .txt{
            border:0px;
            background-color:black;
            color:#2ecc71;
            font-family: "Courier New", Courier, monospace
        }

        input:focus {outline: none; }
    </style>
</head>

<body>
    <?php

    echo 'DEBUG: P_'.$part.' <br />';

        if ($_SESSION['p'] == 'p1')
            $story->p1();
        else
            $action->continueStory($part, '');

        if (isset($_POST['submit']))
        {
            $action->ContinueStory($part, $_POST['yourAction']);
        }
    ?>
    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
        <input type="hidden" name="p" value="<?php echo $part; ?>" style="vertical-align:middle;">
        <img src="cmd.png"><input type="text" id="input" name="yourAction" class="txt">
        <input type="submit" name="submit" value="continue">    
    </form>
</body>
 </html>

core.php -

 <?php
class Story
{
    public function p1()
    {
        print '<b>Witch 1</b>: When shall we all meet again? <br />
                <b>Witch 2</b>: When the hurly-burly is done, and the battle\'s lost and won. <br />
                <b>Witch 3</b>: That will be ere the set of sun. <br />
                <b>Witch 1</b>: Where\'s the place? <br />
                <b>Witch 2</b>: Upon the heath, is this location to thou satisfaction? <br />';
    }

    public function p2($action)
    {
        $action = strtolower($action);
        if ($action == 'yes')
        {
            $_SESSION['p'] = 'p3';
            print '** The meeting shall be held upon the heath to meet with MacBeth. ** -- PRESS ENTER';
        }
        else if ($action == 'no')
        {
            $_SESSION['p'] = 'p3';
            print '** Despite your opinion, the other witches decide the best place to meet would be at the heath. **';
        }
        else
        {
            print 'Unknown action "'.$action.'".';
        }
    }

    public function p3($action)
    {
        echo 'test ';
            $_SESSION['p'] = 'p4';
            /*return '<b><i>Scene II</i></b> <br />
                    <b>Duncan</b>: What bloody man is that? He can report, as seemeth by his plight, of the revolt the newest state. <br /> <br />
                    <b>Sergent</b>: Doubtful it stood; As two spent swimmers, that do cling together, and choke their art. The merciless Macdonwald-- Worthy to be a rebel, for to that
                                    The multiplying villanies of nature. Do swarm upon him--from the western isles of kerns and gallowglasses is supplied; and fortune, on his damned quarrel smiling,
                                    Show\'d like a rebel\'s whore: but all\'s too weak: For brave Macbeth--well he deserves that name-- Disdaining fortune, with his brandish\'d steel,
                                    which smoked with bloody execution like valour\'s minion carved out his passage till he faced the slave; Which ne\'er shook hands, nor bade farewell to him 
                                    till he unseam\'d him from the nave to the chaps and fix\'d his head upon our battlements.  
                    <b>Duncan</b>: O valiant cousin! worthy gentleman! <br /> <br />
                    ** Please press enter ** <br />';*/

    }

    public function p4($action)
    {
        $_SESSION['p'] = 'p1';
        echo 'test 2';
    }
}
 ?>

core2.php -

 <?php
class Action
{
    public function ContinueStory($p, $action)
    {
        $story = new Story;
        if ($p == "p1")
        {
             $story->p2($action);
        }
        else if ($p == "p3")
        {
             $story->p3($action);
        }
        else if ($p == "p4")
        {
            $story->p4($action);
        }
    }
}
?>

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

<?php

echo 'DEBUG: P_'.$part.' <br />';

    if ($_SESSION['p'] == 'p1')
        $story->p1();
    else
        $action->continueStory($part, '');

    if (isset($_POST['submit']))
    {
        $action->ContinueStory($part, $_POST['yourAction']);
    }
?>

你正在做

$action->continueStory($part, '');

两次。首先是你的第一个'if else',其次是你的“if isset $ _POST”。

这应该是最好的方式:

<?php

echo 'DEBUG: P_'.$part.' <br />';


    if (isset($_POST['submit']))
    {
        $action->ContinueStory($part, $_POST['yourAction']);
    } else {
        if ($_SESSION['p'] == 'p1')
            $story->p1();
        else
            $action->continueStory($part, '');
    }
    ?>

N.B。:出于安全考虑,请不要在表单操作中使用$ _SERVER ['PHP_SELF'],我认为#_应该更好!