Как правильно использовать $ _POST - не получается заставить кнопку работать с POST

0

У меня есть вопрос, как заставить эти кнопки ввода работать. Мне нужно, чтобы они вызывали и выполняли соответствующую функцию при нажатии кнопки, однако это не работает. Вот код до сих пор. Я не думаю, что правильно использую $ _POST.

<form method="POST" action = "class.ElementalStone.php">
    Select your magic...
    <input type="submit" name="potion" id="potion" value="" class="potion">
    <input type="submit" name="redMagic" id="redMagic" value="Red Magic"  class="magic.red">
    <input type="submit" name="blueMagic" id="blueMagic" value="Blue Magic" class="magic.blue">
    <input type="submit" name="yellowMagic" id="yellowMagic" value="Yellow Magic" class="magic.yellow">
</form>

    <?php
        if ( !isset($_SESSION['stone']) ):
            $_SESSION['stone'] = new ElementalStone;
        else:
            $_SESSION['stone']->displayStone();
        endif;

        for($i = 1; $i <= 5; $i++){
            if($i == 1 || $i == 2 || $i == 4):
                if(isset($_POST["potion"])):
                    //$potion = $_POST['potion'];
                    usePotion();
                else if(isset($_POST["redMagic"])):
                    //$redMagic = $_POST['redMagic'];
                    $_SESSION['stone']->useMagic("red");
                else if(isset($_POST["blueMagic"])):
                    //$blueMagic = $_POST["blueMagic"];
                    $_SESSION['stone']->useMagic("blue");
                else if(isset($_POST["yellowMagic"])):
                    //$yellowMagic = $_POST["yellowMagic"];
                    $_SESSION['stone']->useMagic("yellow");
                endif;
            else:
                $_SESSION['stone']->randomAction();
            endif;
        }

    ?>

Вот полный код для файла HTML:

<?php
    require 'class.ElementalStone.php';

    session_start();

    //unset($_SESSION['stone']);
?>

<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />

        <link rel="shortcut icon" href="favicon-normal.ico" type="image/x-icon">
        <link rel="icon" href="favicon-normal.ico" type="image/x-icon">

        <link rel="stylesheet" href="styles.css" />

        <title>Elemental Stones | Normal</title>
    </head>

    <body class="clearfix">
        <div>
        <form method="POST" action = "class.ElementalStone.php">
            Select your magic...
            <input type="submit" name="potion" id="potion" value="" class="potion">
            <input type="submit" name="redMagic" id="redMagic" value="Red Magic" class="magic.red">
            <input type="submit" name="blueMagic" id="blueMagic" value="Blue Magic" class="magic.blue">
            <input type="submit" name="yellowMagic" id="yellowMagic" value="Yellow Magic" class="magic.yellow">
           </form>


        <?php
            if ( !isset($_SESSION['stone']) ):
                $_SESSION['stone'] = new ElementalStone;
            else:
                $_SESSION['stone']->displayStone();
            endif;

            for($i = 1; $i <= 5; $i++){
                if($i == 1 || $i == 2 || $i == 4):
                    if(isset($_POST["potion"])):
                        //$potion = $_POST['potion'];
                        $_SESSION['stone']->usePotion();
                    elseif(isset($_POST["redMagic"])):
                        //$redMagic = $_POST['redMagic'];
                        $_SESSION['stone']->useMagic("red");
                    elseif(isset($_POST["blueMagic"])):
                        //$blueMagic = $_POST["blueMagic"];
                        $_SESSION['stone']->useMagic("blue");
                    elseif(isset($_POST["yellowMagic"])):
                        //$yellowMagic = $_POST["yellowMagic"];
                        $_SESSION['stone']->useMagic("yellow");
                    endif;
                else:
                    $_SESSION['stone']->randomAction();
                endif;
            }

        ?>
        </div>

    </body>
</html>

И вот класс.ElementalStones.php:

<?php
    class ElementalStone {
        public $size;
        public $color = array("","");
        public $valid_colors = array("red", "blue", "yellow");  
        public $actions;

        public function __construct() {     
            $size = rand(1,4);

            $this->setSize($size);
            $this->setColor();
            $this->actions = 5;
            $this->displayStone();      
        }

        public function getSize() {
            return $this->size; 
        }
        public function setSize($new_size = 1) {
            if ($new_size > 4):
                $this->size = 1;
            else:
                $this->size = $new_size;    
            endif;
        }

        public function getColor() {
            $color = implode(" ", $this->color);
            return $color;  
        }
        public function setColor($new_color = "") {
            array_push($this->color, $new_color);

            if (count($this->color) > 2):
                array_shift($this->color);
            endif;

        }

        public function displayStone() {
            echo '<p class="stone-'.$this->getSize().' '.$this->getColor().'">'.$this->actions.'</p>';  
        }

        public function displayAction($action) {
            switch ($action):
                case "No more":
                    echo '<p>'.$this->getScore().'</p>';
                    break;

                case "red":
                case "yellow":
                case "blue":
                    echo '<p class = "magic '.$action.'"></p>';
                    break;

                case "potion":
                    echo '<p class="potion"></p>';
                    break;

                default:
                    echo '<p class = "unknown">X</p>';
                    break;
            endswitch;  

            $this->actions--;
        }

        public function useMagic($type) {
            if ($this->actions == 0):
                $this->displayAction('No more');
                return;
            endif;

            if (in_array($type, $this->valid_colors)):
                $this->displayAction($type);

                $this->setColor($type);
                $this->displayStone();
            else:
                $this->displayAction();

                $this->setColor();
                $this->displayStone();              
            endif;  
        }

        public function usePotion() {
            if ($this->actions == 0):
                $this->displayAction('No more');
                return;
            endif;

            $new_size = $this->getSize() + 1;

            $this->displayAction("potion");

            $this->setSize($new_size);

            $this->displayStone();  
        }

        public function randomAction() {

            $die = rand(0,3);

            switch ($die):
                case 3:
                    $this->usePotion();
                    break;
                default:
                    $this->useMagic($this->valid_colors[$die]);
                    break;
            endswitch;
        }

        public function getScore() {
            sort($this->color);

            switch ($this->color):
                case(array("blue", "red") == $this->color):
                    $score = 600;
                    break;
                case(array("blue", "yellow") == $this->color):
                    $score = 500;
                    break;
                case(array("red", "yellow") == $this->color):
                    $score = 400;
                    break;
                case(in_array("blue",$this->color)):
                    $score = 300;
                    break;
                case(in_array("yellow", $this->color)):
                    $score = 200;
                    break;
                case(in_array("red",$this->color)):
                    $score = 100;
                    break;
                default:
                    $score = 50;
                    break;
            endswitch;      

            $score *= $this->size;

            return $score;

}}

  • 0
    var_dump($_POST);
  • 2
    Очевидно, отсутствует session_start();
Показать ещё 13 комментариев
Теги:
input
post

1 ответ

0
Лучший ответ

Кто-то замечает меня, если я ошибаюсь, но то, что я прочитал из комментариев, код HTML и PHP находится в одном файле. Если это происходит, вам необходимо разделить файлы и отправить данные в отдельный файл со вторым блоком кода. Например:

index.html:

<form method="POST" action = "handlep.php">
Select your magic...
<input type="submit" name="potion" id="potion" value="" class="potion">
<input type="submit" name="redMagic" id="redMagic" value="Red Magic"  class="magic.red">
<input type="submit" name="blueMagic" id="blueMagic" value="Blue Magic" class="magic.blue">
<input type="submit" name="yellowMagic" id="yellowMagic" value="Yellow Magic" class="magic.yellow">

handlep.php:

<?php
    session_start();
    require("class.ElementalStone.php");
    if ( !isset($_SESSION['stone']) ):
        $_SESSION['stone'] = new ElementalStone;
    else:
        $_SESSION['stone']->displayStone();
    endif;

    for($i = 1; $i <= 5; $i++){
        if($i == 1 || $i == 2 || $i == 4):
            if(isset($_POST["potion"])):
                //$potion = $_POST['potion'];
                usePotion();
            else if(isset($_POST["redMagic"])):
                //$redMagic = $_POST['redMagic'];
                $_SESSION['stone']->useMagic("red");
            else if(isset($_POST["blueMagic"])):
                //$blueMagic = $_POST["blueMagic"];
                $_SESSION['stone']->useMagic("blue");
            else if(isset($_POST["yellowMagic"])):
                //$yellowMagic = $_POST["yellowMagic"];
                $_SESSION['stone']->useMagic("yellow");
            endif;
        else:
            $_SESSION['stone']->randomAction();
        endif;
    }

?>

Кроме того, ошибка, которую вы бросали на загрузку начальной страницы, заключалась в том, что вы пытались использовать класс ElementalStone, не требуя его сначала.

  • 0
    Я просто добавил остальную часть кода для программы, за исключением таблицы стилей. Надеюсь, это может быть более полезным.
  • 0
    Вы должны разделить файлы. PHP запускается и запускается только при первом запуске страницы. Таким образом, даже когда вы отправляете форму, вы отправляете ее в файл класса, который не знает, что делать с информацией о публикации. Единственным другим вариантом было бы самостоятельное размещение формы, что сделало бы действие формы страницей, на которой была форма. На основании вашего макета страницы, это будет работать. Например: <form method="post"> сделает свое дело. Выход из действия по умолчанию - текущая страница. @ user3369140

Ещё вопросы

Сообщество Overcoder
Наверх
Меню