2

最终编辑(已解决)

我刚刚替换if(empty($num1))if(!isset($num1))现在有条件的Required!通知完美无缺。非常感谢所有参与其中的人,我重新获得了一些已经失去的力量,我终于开始将它变成一个功能齐全、风格独特的小部件: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很明显)

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

我已经为这一切工作了几个小时,已经为那个 PHP 调试通知找到了一些解决方案,但它主要涉及if (isset($var))方法,假设我有一个复选框......好吧,我没有......默认$_POST值是实际替换

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

和:

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

好吧,通知仍然出现:(

任何人都可以帮助我吗?

4

4 回答 4

2

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

function getPost($key, $default) {
    if (isset($_POST[$key]))
        return $_POST[$key];
    return $default;
}
于 2012-11-05T02:13:45.107 回答
1

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

于 2012-11-05T02:10:31.613 回答
1

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

$num1 = filter_input(INPUT_POST, 'number1', FILTER_SANITIZE_NUMBER_INT);
$num2 = filter_input(INPUT_POST, 'number2', FILTER_SANITIZE_NUMBER_INT);
于 2013-11-13T22:51:05.570 回答
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'];
}
于 2012-11-05T02:15:16.633 回答