PHP如果未定义则在GET值上设置默认值

4

我有一个表单,在我的字段中输入的值取决于是否有GET请求。

我现在的代码可以正常工作,但是我想知道是否有更高效的编码方式,因为我的真实表单将有约10个输入字段,我不想每次添加新的输入字段时都添加6行代码。

        <?php
        if (isset($_GET["name"])) {
            $name = $_GET["name"];
        }
        else {
            $name = 0;
        }

        if (isset($_GET["type"])) {
            $type = $_GET["type"];
        }
        else {
            $type = 0;
        }

        if (isset($_GET["other"])) {
            $other = $_GET["other"];
        }
        else {
            $other = 0;
        }
        ?>


        <input type="text"  name="name" value="<?php echo $name; ?>">
        <input type="text"  name="type"  value="<?php echo $type; ?>">
        <input type="text"  name="other" value="<?php echo $other; ?>">

我尝试着也做了一下。
        <?php
            $name = $_GET["name"] ?: 0;
        ?>

这将在我的表单中输入一个值0,但我会收到错误提示注意:未定义索引:名称


你在哪一行出现了错误? - dikesh
3个回答

8

在三目运算符中使用 isset()

$name = isset($_GET["name"]) ? $_GET["name"] : 0;

你收到了这个通知,是因为你直接评估$_GET['name'],没有使用isset()empty()包装器。你可能更喜欢创建一个可重复使用的函数来简化代码:
function filterThing($key){
    return isset($_GET[$key]) ? $_GET[$key] : 0;
}

$name = filterThing('name');
$type = filterThing('type');
$other = filterThing('other');

2

如果有人感兴趣,使用这个小方法,您也可以定义默认值,如果GET键没有找到或它不是整数:

//?foo=ABC&x=40

function tryGetInt($key, $def = 0){
    return isset($_GET[$key]) && is_numeric($_GET[$key]) ? $_GET[$key] : $def;
}

$value1 = tryGetInt("foo"); //value1 = 0;
$value2 = tryGetInt("bar",20); //value2 = 20
$value3 = tryGetInt("x",20); //value3 = 40

1

Try this :

$input_values = array('name','type','other');

foreach(input_values as $value){
   $$value = isset($_GET[$value]) ? $_GET[$value] : 0;
}

这是一个糟糕的解决方案,因为它允许覆盖任何本地变量(这已经通过更新的代码进行了修复)。此外,它无法解决“未定义索引”问题。 - str
我不太确定在我的HTML表单中应该回显什么。我尝试回显$name和$value,但是得到了未定义的结果? - ak85

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接