代码之家  ›  专栏  ›  技术社区  ›  Ilrind

isset($_POST)太多次

  •  0
  • Ilrind  · 技术社区  · 11 年前

    我正在制作一个简单的菜单应用程序。我做了一个特殊的类Dish,我想对应用程序中的按钮做出反应。首先,如果你想吃饭或喝酒,你必须做出选择,而且效果很好。然后,你必须选择你的菜肴(波兰-意大利-墨西哥),它很完美,但后来你应该可以选择是想吃一顿饱饭还是只吃一顿晚餐,因为某种原因,它不起作用。我和以前一样遵循同样的规则,但现在不行了。希望我能得到一些答案,而不是说我的代码有多糟糕。

    <?php
    
        class Dish
        {
            private $Price;
            private $Name;
    
            public function setData($Price, $Name)
            {
                $this->Price = $Price;
                $this->Name = $Name;
            }
    
            function getPrice()
            {
                return $this->Price;
            }
    
            function getName()
            {
                return $this->Name;
            }
    
        }
        // It could be much faster by using database...
    
        $Polish_Dinner = new Dish;
        $Polish_Dinner->setData("3$", "Kapuśniak");
        $Polish_Desser = new Dish;
        $Polish_Desser->setData("3$", "Kapuśniak z cukrem");
    
    
        $Mexican_Dinner = new Dish;
        $Mexican_Dinner->setData("4$", "Fasola");
        $Mexican_Desser = new Dish;
        $Mexican_Desser->setData("4$", "Fasola z cukrem");
    
    
        $Italy_Dinner = new Dish;
        $Italy_Dinner->setData("5$", "Pizza");
        $Italy_Desser = new Dish;
        $Italy_Desser->setData("5$", "Pizza z cukrem");
    
    ?>
    <div style="background-color: gray;">
    
        <?php
            $zamowienie[10] = new Dish;
            $i=0;
        ?>
    
        <form action ="index.php" method="post">
                    <input type="submit" value="Dinner" name="Dinner" style="margin: 35px; display: inline;  ;width: 35%; height: 300px" />
                    <input type="submit" value="Cash" name="Cash" style="display: inline;  width: 10%; height: 75px" />
                    <input type="submit" value="Drink" name="Drink" style="margin: 35px   ; display: inline; width: 35%; height: 300px"/></br>
        </form>
            </br></br></br>
          <?php
            if(isset($_POST['Dinner']))
            {
                ?>
                <form action ="index.php" method="post" style="background-color: darkgreen;">
                    <input type="submit" value="Mexican" name="Mexican" style="display: inline; width: 10%; height: 100px" />
                    <input type="submit" value="Polish" name="Polish" style="display: inline;  width: 10%; height: 100px" />
                    <input type="submit" value="Italy" name="Italy" style=" display: inline;   width: 10%; height: 100px"/></br>
                </form>
            <?php
            }
            elseif(isset($_POST['Drink'])) 
            {
            ?>
                <form action ="index.php" method="post" style="background-color: darkgreen;">
                    <input type="submit" value="ice" name="ice" style=" display: inline;width: 10%; height: 100px" />
                    <input type="submit" value="lemon" name="lemon" style=" display: inline;width: 10%; height: 100px" />
                </form>
           <?php
            }
            switch(true)
            {
                case isset($_POST['Mexican']):
    
                    ?>
                    <form action ="index.php" method="post" style="background-color: darkblue;">
                        <input type="submit" value="Mex_Lunch" name="Mex_Lunch" style=" display: inline;width: 10%; height: 100px" />
                        <input type="submit" value="Mex_Desser" name="Mex_Desser" style=" display: inline;width: 10%; height: 100px" />
                    </form>
                    <?php
                    echo "Mexican";
                        if(isset($_POST['Mex_Desser']))
                        {
                            echo "Mex_Des";
                            $zamowienie[$i]=$Mexican_Desser;
                            $zamowienie[$i]->getName();
                            $i++;
                            $zamowienie[$i]=$Mexican_Dinner;
                            $zamowienie[$i]->getName();
                            $i++;
                        }
                        elseif(isset($_POST['Mex_Lunch']))
                        {
                            echo "Mex_Din";
                            $zamowienie[$i]=$Mexican_Dinner;
                            $i++;
                        }
                        echo $_POST['Mex_desser'];
                    break;
                case isset($_POST['Polish']):
                     ?>
                    <form action ="index.php" method="post" style="background-color: darkblue;">
                        <input type="submit" value="Pol_Lunch" name="Pol_Lunch" style=" display: inline;width: 10%; height: 100px" />
                        <input type="submit" value="Pol_Desser" name="Pol_Desser" style=" display: inline;width: 10%; height: 100px" />
                    </form>
                    <?php
                    echo "POLISh";
                    if(isset($_POST['Pol_Desser']))
                        {
                            $zamowienie[$i]=$Polish_Desser;
                            $i++;
                            $zamowienie[$i]=$Polish_Dinner;
                            $i++;
                        }
                        elseif(isset($_POST['Pol_Lunch']))
                        {
                            $zamowienie[$i]=$Polish_Dinner;
                            $i++;
                        }
                    break;
                case isset($_POST['Italy']):
                    ?>
                    <form action ="index.php" method="post" style="background-color: darkblue;">
                        <input type="submit" value="It_Lunch" name="It_Lunch" style=" display: inline;width: 10%; height: 100px" />
                        <input type="submit" value="It_Desser" name="It_Desser" style=" display: inline;width: 10%; height: 100px" />
                    </form>
                    <?php
                    echo "ITALY";
                    if(isset($_POST['It_Desser']))
                        {
                            echo "LUNCH + DESSER ITALY";
                            $zamowienie[$i]=$Italy_Desser;
                            $i++;
                            $zamowienie[$i]=$Italy_Dinner;
                            $i++;
                        }
                        elseif(isset($_POST['It_Lunch']))
                        {
                            echo "Lunch italy";
                            $zamowienie[$i]=$Italy_Dinner;
                            $i++;
                        }
                    break; 
            }
            ?>
    
    </div>
    

    此外: 我很乐意提出如何做得更好的建议 css 喜欢这个,所以请跳过这个评论)。

    2 回复  |  直到 11 年前
        1
  •  0
  •   Sbls    11 年前

    这是代码的伪部分。

    if ($dinner) {
      mexican or polish or italy
      also unsetting $dinner, so we won't get back here
    }
    
    if ($mexican) {
      Lunch or dessert
      also unsetting $mexican
      if ($lunch) {
        mexican lunch
      }
    }
    

    当您到达以下路径时:

    Dinner->Mexican->Lunch
    

    您要输入 if($mexican){ if ($lunch){}} ,换句话说: if $mexican AND $lunch .

    但是 当你按下午餐按钮时,你会取消设置$mexican。所以 $mexican AND $lunch 不会是真的。您的嵌套错误。


    我认为我的解释很难理解。我没有找到最好的词,但我希望你能理解。

        2
  •  0
  •   steven    11 年前

    正如我在上面的评论中所写的那样,主要问题是,如果显示了墨西哥表单,则提交表单时不再有$_POST['Mexican']。

    以下解决方案将开关替换为“if else”,并将“if isset mexican”中的“if-isset-mex_desser”移动为独立的“if-isset-mex.desser”。

    这很难解释。请查看代码并尝试了解每个表单帖子上发生的情况。

    如果你想在最后一次提交后显示第三张表格,那么你必须稍微修改一下。

    希望有帮助。

        <?php
    
        class Dish
        {
            private $Price;
            private $Name;
    
            public function setData($Price, $Name)
            {
                $this->Price = $Price;
                $this->Name = $Name;
            }
    
            function getPrice()
            {
                return $this->Price;
            }
    
            function getName()
            {
                return $this->Name;
            }
    
        }
        // It could be much faster by using database...
    
        $Polish_Dinner = new Dish;
        $Polish_Dinner->setData("3$", "Kapusniak");
        $Polish_Desser = new Dish;
        $Polish_Desser->setData("3$", "Kapusniak z cukrem");
    
    
        $Mexican_Dinner = new Dish;
        $Mexican_Dinner->setData("4$", "Fasola");
        $Mexican_Desser = new Dish;
        $Mexican_Desser->setData("4$", "Fasola z cukrem");
    
    
        $Italy_Dinner = new Dish;
        $Italy_Dinner->setData("5$", "Pizza");
        $Italy_Desser = new Dish;
        $Italy_Desser->setData("5$", "Pizza z cukrem");
    
        ?>
        <div style="background-color: gray;">
    
        <?php
            $zamowienie[10] = new Dish;
            $i=0;
        ?>
    
        <form action ="index.php" method="post">
                    <input type="submit" value="Dinner" name="Dinner" style="margin: 35px; display: inline;  ;width: 35%; height: 300px" />
                    <input type="submit" value="Cash" name="Cash" style="display: inline;  width: 10%; height: 75px" />
                    <input type="submit" value="Drink" name="Drink" style="margin: 35px   ; display: inline; width: 35%; height: 300px"/></br>
        </form>
        </br></br></br>
        <?php
        if(isset($_POST['Dinner']))
        {
            ?>
            <form action ="index.php" method="post" style="background-color: darkgreen;">
                <input type="submit" value="Mexican" name="Mexican" style="display: inline; width: 10%; height: 100px" />
                <input type="submit" value="Polish" name="Polish" style="display: inline;  width: 10%; height: 100px" />
                <input type="submit" value="Italy" name="Italy" style=" display: inline;   width: 10%; height: 100px"/></br>
            </form>
        <?php
        }
        elseif(isset($_POST['Drink'])) 
        {
        ?>
            <form action ="index.php" method="post" style="background-color: darkgreen;">
                <input type="submit" value="ice" name="ice" style=" display: inline;width: 10%; height: 100px" />
                <input type="submit" value="lemon" name="lemon" style=" display: inline;width: 10%; height: 100px" />
            </form>
        <?php
        }
    
        if(isset($_POST['Mexican'])) {
            ?>
            <form action ="index.php" method="post" style="background-color: darkblue;">
                <input type="submit" value="Mex_Lunch" name="Mex_Lunch" style=" display: inline;width: 10%; height: 100px" />
                <input type="submit" value="Mex_Desser" name="Mex_Desser" style=" display: inline;width: 10%; height: 100px" />
            </form>
            <?php
        } else if(isset($_POST['Polish'])) {
             ?>
            <form action ="index.php" method="post" style="background-color: darkblue;">
                <input type="submit" value="Pol_Lunch" name="Pol_Lunch" style=" display: inline;width: 10%; height: 100px" />
                <input type="submit" value="Pol_Desser" name="Pol_Desser" style=" display: inline;width: 10%; height: 100px" />
            </form>
            <?php
        } else if(isset($_POST['Italy'])) {
            ?>
            <form action ="index.php" method="post" style="background-color: darkblue;">
                <input type="submit" value="It_Lunch" name="It_Lunch" style=" display: inline;width: 10%; height: 100px" />
                <input type="submit" value="It_Desser" name="It_Desser" style=" display: inline;width: 10%; height: 100px" />
            </form>
            <?php
        } else if(isset($_POST['Mex_Desser'])) {
            echo "Mex_Des";
            $zamowienie[$i]=$Mexican_Desser;
            $zamowienie[$i]->getName();
            $i++;
            $zamowienie[$i]=$Mexican_Dinner;
            $zamowienie[$i]->getName();
            $i++;
        } else if(isset($_POST['Mex_Lunch'])) {
            echo "Mex_Din";
            $zamowienie[$i]=$Mexican_Dinner;
            $i++;
        } else if(isset($_POST['Pol_Desser'])) {
            echo "LUNCH + DESSER POL";
            $zamowienie[$i]=$Polish_Desser;
            $i++;
            $zamowienie[$i]=$Polish_Dinner;
            $i++;
        } else if(isset($_POST['Pol_Lunch'])) {
            echo "Lunch pol";
            $zamowienie[$i]=$Polish_Dinner;
            $i++;
        } else if(isset($_POST['It_Desser'])) {
            echo "LUNCH + DESSER ITALY";
            $zamowienie[$i]=$Italy_Desser;
            $i++;
            $zamowienie[$i]=$Italy_Dinner;
            $i++;
        } else if(isset($_POST['It_Lunch'])) {
            echo "Lunch italy";
            $zamowienie[$i]=$Italy_Dinner;
            $i++;
        }
    
        ?>
    
        </div>