PHP-форма возвращается раньше, если инструкция завершена - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть фрагмент кода, в котором я хочу, чтобы форма появлялась при нажатии кнопки «Новый игрок».Моя проблема заключается в том, что когда я нажимаю на кнопку отправки в форме, код проверки не запускается.Я не уверен, как заставить функцию сохранить контроль.

Исходная кнопка New Player вызывает внешний скрипт PHP

echo "<form action = '', method = 'post'>";
echo "<button  name = 'showPF', type = 'submit', value = 'New Player'>New Player</button></br>";

echo "</form>";

if(isset( $_POST['showPF'])) { 


require(__DIR__.'/new_player.php');

}

Затем отображается форма и, в свою очередь, вызывает функцию.Эта функция является частью, которая никогда не выполняется.

echo "<form action = '' method='post'>";
    echo "Player Name: <input type='text' name='playerName'></br>";
    echo "Character Name: <input type='text' name ='charName'></br>";
    echo "Class: <input type='text' name = 'class'></br>";
    echo "Race: <input type='text' name = 'race'></br>";
    echo "Level: <input type = 'int' name = 'level'></br>";
    echo "<button name='add', type = 'submit', value = 'Add Player'>Add Player</button></br>";
    echo "</form>"; 

    if(isset($_POST['add'])){
        addPlayer();
    }

Функция addPlayer () выглядит как

function addPlayer(){
    //PLAYER NAME
    if(empty($_POST['playerName'])){
    //Player Name is required
        echo "Player Name is required";
    }
    elseif(ctype_alpha(str_replace(' ','', $_POST['playerName'])) == FALSE){
        //Player Name can only be letters and spaces
        echo "Player Name can only contain letters and spaces";
    }
    else{
        $playerName = $_POST['playerName'];
    }


    //CHARACTER NAME
    if(empty($_POST['charName'])){
        $charName = "NULL";
    }
    elseif(ctype_alpha(str_replace(' ','', $_POST['charName'])) == FALSE){
            //Character Name can only be letters and spaces
        echo "Character Name can only contain letters and spaces";
    }
    else{
        $charName = $_POST['charName'];
    }

    //CLASS

    if(empty($_POST['class'])){
        $charClass = "NULL";
    }
    elseif(ctype_alpha(str_replace(' ','', $_POST['class'])) == FALSE){
            //Class can only be letters and spaces
        echo "Class can only contain letters and spaces";
    }
    else{
        $charClass = $_POST['class'];
    }

    //RACE

    if(empty($_POST['race'])){
        $charRace = "NULL";
    }
    if(ctype_alpha(str_replace(' ','', $_POST['race'])) == FALSE){
            //Race can only be letters and spaces
        echo "Race can only contain letters and spaces";
    }
    else{
        $charRace= $_POST['race'];
    }

    //LEVEL

    if(empty($_POST['level'])){
        $charLvl = "NULL";
    }
    if(ctype_digit($_POST['level']) == FALSE){
            //Level must be a number
        echo "Level must be a number";
    }
    else{
        $charLvl= (int)$_POST['lvl'];
    }
}

Поскольку я не знаю, почему она не завершает второй оператор if IЯ не уверен, как Google мой ответ.И я знаю, что мой код не очень красив.Я переучиваюсь после 10+ лет вне школы.К сожалению, я не знаю, где еще задать такой вопрос новичку.

Спасибо за ваше время.

1 Ответ

0 голосов
/ 04 декабря 2018

Проблема в том, что new_player.php включается только при отправке значения showPF, но во второй форме такого поля нет.В качестве решения просто добавьте скрытое поле для вашей второй формы:

<input type='hidden' name='showPF' value='New Player'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...