如何设置$ _POST变量的默认值以避免通知:未定义的索引?

时间:2012-11-05 02:06:47

标签: php

最终编辑(已解决)

我刚刚将if(empty($num1))替换为if(!isset($num1)),现在条件必需!通知可以正常运行。非常感谢所有参与者,我重新获得了一些已经失去的力量,我开始最终将它变成一个功能齐全的风格小部件:D有一个美好的一天/晚上!

编辑:

我愚蠢地认为isset()仅适用于复选框... 我摆脱了通知:未定义的索引,但必需!的问题仍然存在......


我有以下问题,我已经为产品定价制作了一个计算器,但如果我第一次加载它,它就不会“识别”尚未填充的文本输入中的空值。我不确定我是否正确命名,在谈到PHP时我是个新手,刚刚开始学习......

表格一般完美无缺,我只是想摆脱这个小问题。

基本上,我有以下代码:

$num1 = (int)$_POST['number1'];
$num2 = (int)$_POST['number2'];
$ratio = 0.2;
$utw = 1;

if (! empty($num1) && ! empty($num2)) {

    if ($num1 * $num2 <= 200) {
        $ratio = 0.2;
    }
    elseif ($num1 * $num2 > 200 && $num1 * $num2 < 400) {
        $ratio = 0.15;
    }
    elseif ($num1 * $num2 >= 400) {
        $ratio = 0.1;
    }

    if (isset($_POST['condition'])) {
        $utw = 1.8;
    }

    $price = $num1 * $num2 * $ratio * $utw;

}
else {
    $price = 0;
}

<form method="post" action="">

        <label for="number1">
            <input type="text" name="number1" id="number1">
            <?php if(empty($num1)) : ?><span style="color: red;">Required!</span><?php endif; ?>
            <br />Label1
        </label>

        <label for="number2">
            <br /><input type="text" name="number2" id="number2">
            <?php if(empty($num2)) : ?><span style="color: red;">Required!</span><?php endif; ?>
            <br />Label2
        </label>

        <label for="condition">
            <br /><input type="checkbox" name="condition" name="condition">
            Label3<br />
        </label>

        <input type="submit" value="Run">   

        <?php if($price > 0) : ?>
        <p><?php echo "Price equals: $price"; ?></p>
        <?php endif; ?>
</form>

当我第一次显示它时,我得到了

Notice: Undefined index: number1 in C:\wamp\www\calc\index.php on line 3

(第3行是因为我明显剥离了<!doctype html><?php

如何避免它?此外,仅当用户单击提交按钮时,如何确保必需!通知才会出现?目前它是从头开始显示的,因为输入字段是空的......我不希望它们“空”我只想要它们,你知道...... 在视觉上为空或等于0 ...

我已经在这几个小时内完成了所有这些工作,找到了PHP调试通知的一些解决方案,但它主要涉及if (isset($var))方法,假设我有一个复选框......好吧,我不知道t ...默认$_POST值的另一种方法是实际替换

$num1 = (int)$_POST['number1'];

使用:

if ($_POST['number1'] == '') { 
$num1 = '0'; 
else { 
$num1 = $_POST['number1'] ; 
}
嗯,通知仍然出现:(

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:2)

我相信isset实际上就是你想要的;与您正在使用的输入类型无关。您可以编写一个辅助函数,如:

function getPost($key, $default) {
    if (isset($_POST[$key]))
        return $_POST[$key];
    return $default;
}

答案 1 :(得分:1)

在尝试处理变量之前,使用isset()或array_key_exists()检查变量是否存在。

答案 2 :(得分:1)

我建议使用filter_input()而不是直接访问超全局。

$num1 = filter_input(INPUT_POST, 'number1', FILTER_SANITIZE_NUMBER_INT);
$num2 = filter_input(INPUT_POST, 'number2', FILTER_SANITIZE_NUMBER_INT);

答案 3 :(得分:0)

if($_SERVER['REQUEST_METHOD'] === 'POST'){
    if ($_POST['number1'] == '') { 
        $num1 = '0'; 
    else { 
        $num1 = $_POST['number1'] ; 
    }
}

然而,可能会以不同的方式看待您的代码。写的是“如果我什么都没有,我就会得到0.如果我有什么东西我会得到它。

因此,默认情况下将变量设置为0,然后如果值在$ _POST中可用则指定它

$num1 = 0;
if(isset($_POST['number1'])){
    $num1 = $_POST['number1'];
}