函数中未定义的变量参数

时间:2016-10-20 02:08:10

标签: php forms validation

作业问题如下:

enter image description here

我创建了这个函数,如下所示:

function getToppings($toppings){
    if($toppings=='') {
        echo 'You have to select at least one topping';
       die();
    }//if
        foreach($toppings as $index => $selected) {

            $toppings[$index] = $selected;
            echo $selected;
            echo '<br />';
        }//foreach
}//function

HTML

选择您的Topping

<form name="select-topping" method="post">
    <label for="toppings">Peperoni</label>
    <input type="checkbox" name="toppings[]" value="peperoni">
    <br />
    <label for="toppings">Salami</label>
    <input type="checkbox" name="toppings[]" value="salami">
    <br />
    <label for="toppings">Ham</label>
    <input type="checkbox" name="toppings[]" value="ham">
    <br >
    <label for="toppings">Mushroom</label>
    <input type="checkbox" name="toppings[]" value="mushroom">
    <button type="submit" name="submit" class="btn btn danger">Submit</button>
</form>

功能调用

if(isset($_POST['submit'])){
    getToppings($_POST['toppings']);
}

这些功能完美无缺,并且可以打印选中的所有浇头,但是当没有选择浇头时,我的问题会出现(验证)

我的问题

如果没有选择顶部,我会得到以下错误:

enter image description here

所以尽管我的表格有效,但我仍然得到错误未定义的变量:

现在我很确定我知道为什么会收到错误消息,这是因为如果没有选择配件,没有参数传递给函数......是否正确?我不知道的是如何修复/改进它......任何建议或帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

在你的函数调用中,你没有检查是否设置了$_POST['toppings'],然后再将它传递给getToppings(),修改你的函数调用:

if(isset($_POST['submit']) && isset($_POST['toppings'])){
    getToppings($_POST['toppings']);
} elseif(isset($_POST['submit']) && !isset($_POST['toppings'])){
    getToppings('');
}

修改

这是另一种方法,因为你选择的索引没有被设置,你必须在调用之前检查它,没有别的办法。所以你可以这样做:

if(isset($_POST['submit'])){
    getToppings((isset($_POST['toppings'])) ? $_POST['toppings'] : '');
}