使用会话格式化和重定向到500的PHP脚本

时间:2018-10-19 15:48:34

标签: php html session

我是php的新手,正在从事子手游戏。我有一个home.php,带您进入主页,并且它们是login的形式,用户必须提交usernamepassword。如果usernamepassword与我设置的匹配,它将重定向到hangman.php。如果我编写脚本的方式正确或不正确,我需要一些建议。另外,用户登录后出现500错误。我不知道为什么。我将代码粘贴到下面。

更新:我已经添加了hangman.php

的代码

home.php

<?php

    // starting a new session
    session_start();

    if(isset($_POST['uname'], $_POST['psw'])){

        $uname= "my_admin";
        $psw = "password";

        if($_POST['uname'] == $uname && $_POST['psw'] == $psw) {

            $_SESSION["uname"] = "my_admin";
            $_SESSION["psw"] = "password";

            # array holds errors
            $errors = array();

        # validation starts here
        if(empty($_POST['uname'])){
            $errors['uname1'] = "Your name cannot be empty";
        }

            # check strlength
        if(strlen($_POST['uname']) < 6){
            $errors['uname2'] = "Must be longer than 6 characters";
        }

            # check username
        if ($_POST['uname'] !== "my_admin"){
            $errors['uname3'] = "You are not the admin";

        }

        if($_POST['uname'] == "my_admin" &&  $_POST['psw'] == "password"){
            header('Location:hangman.php');
            exit();
        }else{
            $errors['uname4'] = "Please try again";
        }


        if(empty($_POST['psw'])){
            $errors['psw1'] = "Your password cannot be empty";
        }

        if(strlen($_POST['psw']) < 6){
            $errors['psw2'] = "Must be longer than 6 characters";
        }

        if($_POST['psw'] !== "password"){
            $errors['ps3'] = "AH AH AH thats not it";
        }else{
            header('Location:hangman.php');
            exit();
        }


        if(count($errors) == 0){
            # redirect to the game page
            header('Location:hangman.php');
            exit();
        }
    }
}


    ?> 

form for my script to run against

<div class="container">
</p>

<label for="uname"><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="uname">
<p>
<?php if(isset($errors['uname1']))
        echo $errors['uname1'];  ?>
</p>
<p>
<?php if(isset($errors['uname2']))
        echo $errors['uname2'];  ?>
</p>
<p>
<?php if(isset($errors['uname3']))
        echo $errors['uname3'];  ?>
</p>
<p>
<?php if(isset($errors['uname4']))
    echo $errors['uname4'];  ?>
</p>




<label for="psw"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="psw">
<p>
<?php if(isset($errors['psw1'])) echo $errors['psw1'];  ?>
</p>
<p>
<?php if(isset($errors['psw2'])) echo $errors['psw2'];  ?>
</p>
<?php if(isset($errors['psw3'])) echo $errors['psw3'];  ?>
</p>

<button name="check" type="submit" value="submit">Login</button>
</div>
</form>

hangman.php

<?php
    require_once 'hangedman.php';
    $words = array('VIETNAM', 'PEOPLE', 'PYTHON');
    $numwords = 0;
    function printPage($image, $guesstemplate, $which, $guessed, $wrong) {
        echo <<<ENDPAGE
        <!DOCTYPE html>
        <html>
        <head>
        <title>Hangman</title>
        <link rel="stylesheet" type="text/css" href="home.css">
        </head>
        </html>
        <body>

        <h1 style='color: red'>Hangman Game</h1>
        <br />
        <pre style='color: red'>$image</pre>
        <br />
        <p style='color:red'><strong>Word to guess: $guesstemplate</strong></p>
        <p style='color:red'>Letters used in guesses so far: $guessed</p>
        <form method="post" action="$script">
        <input type="hidden" name="wrong" value="$wrong" />
        <input type="hidden" name="lettersguessed" value="$guessed" />
        <input type="hidden" name="word" value="$which" />
        <fieldset>
        <legend style='color: red'>Your next guess</legend>
        <input type="text" name="letter" autofocus />
        <input type="submit" value="Guess" />
        </fieldset>
        </form>
        </body>
        ENDPAGE;
    }
    function loadWords() {
        global $words;
        global $numwords;
        $input = fopen("./words.txt", "r");
        while (true) {
            $str = fgets($input);
            if (!$str) break;
            $words[] = rtrim($str);
            $numwords++;
        }
        fclose($input);
    }
    function startGame() {
        global $words;
        global $numwords;
        global $hang;
        $which = rand(0, $numwords - 1);
        $word =  $words[$which];
        $len = strlen($word);
        $guesstemplate = str_repeat('_ ', $len);
        $script = $_SERVER["PHP_SELF"];
        printPage($hang[0], $guesstemplate, $which, "", 0);
    }
    function killPlayer($word) {
        echo <<<ENDPAGE
        <!DOCTYPE html>
        <html>
        <head>
        <title>Hangman</title>
        </head>
        <body>
        <h1>You lost!</h1>
        <p>The word you were trying to guess was <em>$word</em>.</p>
        </body>
        </html>
        ENDPAGE;
    }
    function congratulateWinner($word) {
        echo <<<ENDPAGE
        <!DOCTYPE html>
        <html>
        <head>
        <title>Hangman</title>
        </head>
        <body>
        <h1>You win!</h1>
        <p>Congratulations! You guessed that the word was <em>$word</em>.</p>
        </body>
        </html>
        ENDPAGE;
    }
    function matchLetters($word, $guessedLetters) {
        $len = strlen($word);
        $guesstemplate = str_repeat("_ ", $len);
        for ($i = 0; $i < $len; $i++) {
            $ch = $word[$i];
            if (strstr($guessedLetters, $ch)) {
                $pos = 2 * $i;
                $guesstemplate[$pos] = $ch;
            }
        }
        return $guesstemplate;
    }
    function handleGuess() {
        global $words;
        global $hang;
        $which = $_POST["word"];
        $word  = $words[$which];
        $wrong = $_POST["wrong"];
        $lettersguessed = $_POST["lettersguessed"];
        $guess = $_POST["letter"];
        $letter = strtoupper($guess[0]);
        if(!strstr($word, $letter)) {
            $wrong++;
        }
        $lettersguessed = $lettersguessed . $letter;
        $guesstemplate = matchLetters($word, $lettersguessed);
        if (!strstr($guesstemplate, "_")) {
            congratulateWinner($word);
        } else if ($wrong >= 6) {
            killPlayer($word);
        } else {
            printPage($hang[$wrong], $guesstemplate, $which, $lettersguessed, $wrong);
        }
    }
    //header("Content-type: text/plain");
    loadWords();
    $method = $_SERVER["REQUEST_METHOD"];
    if ($method == "POST") {
        handleGuess();
    } else {
        startGame();
    }
    ?>

0 个答案:

没有答案