在PHP中,使用isset还是!isset来检查变量?

3
我有一个提交数据的表单,作为测试,我试图首先检查变量是否在提交时被设置。如果变量已设置,则会显示文本,例如“变量已设置”。但是,如果未设置,将显示一条消息,指示“变量未设置”。一旦变量未设置,它应该被设置,这样下次提交表单时,它将显示变量已设置。然而,对我来说,这并不起作用,因为某种原因它总是显示变量未设置。我的PHP代码如下:
<?php
if (isset($test)) {
    echo "This var is set";
}

if (!isset($test)) {
    echo "This var is not set";
    $test = 'set';  
}
?>
            <form action="" method="post">
                <input type="text" id="text" name="text" autocomplete="off"><br><br>
                <input type="submit" value="submit">
            </form>

我感到非常愚蠢,因为我不能做一些看起来很容易的事情,我刚开始学习并试图自学,谢谢您提供的任何帮助!!!

(Note: The original text was already in English. I simply translated it to Chinese and added some clarity.)

请问您能否发布表单的HTML代码吗? - kittykittybangbang
@kittykittybangbang,这是新的更新版本! - bobbyjane
@bobbyjane 在 if 语句中检查 isset() 和 !empty(),然后查看结果。 - Sagar
你的问题不是很清楚,有点令人困惑。 - Narendrasingh Sisodia
4个回答

4

工作代码和解释:

<?php
    $test="";
    if (isset($_POST["text"])) { //always directly check $_POST,$_GET var without assigning
        echo "This var is set";
        $test=$_POST["text"]; // then assign
    }
    else{ // and use else clause for otherwise case
        echo "This var is not set";
        $test = 'set';  // AND if you want set to default/custom value in case of not set.
    }
?>
<form action="" method="post">
    <input type="text" id="text" name="text" autocomplete="off">
    <br /><br />
    <input type="submit" value="submit">
</form>

先检查,再使用,这从来不是坏逻辑 ;) - Wh1T3h4Ck5

3
如果您正在使用表单提交值,请尝试以下方法:
if (isset($_POST['text'])) {
    echo "This var is set";
}

if (!isset($_POST['text'])) {
    echo "This var is not set";
    $test = 'set';  
}

否则,如果一个变量被设置为空值,比如$test = '';(这意味着变量被设置了,但它没有值),它将只执行你的第一个if条件。

1
原帖使用的是 text,而不是 test 作为 inputname。此外,在 $_POST 数组键名周围需要加上引号($_POST['text'] 而不是 $_POST[test])。 - kittykittybangbang
哦,抱歉我打错了拼写 @kittykittybangbang - Vignesh Bala

0

您尚未声明变量$test

除非您还有一些PHP代码没有包含在此处,否则您的变量为空。当表单被提交时,输入将被添加到$_POST数组(对于method =“post”)或者$_GET数组(对于method =“get”)中。

解决方法:

<?php 

if (isset($_POST['text'])) {
    $test = $_POST['text'];
    echo "This var is set";
}

if (!isset($_POST['text'])) {
    echo "This var is not set";
    $test = 'set';  
}

?>

        <form action="" method="post">
            <input type="text" id="text" name="text" autocomplete="off"><br><br>
            <input type="submit" value="submit">
        </form>

在表单中没有任何操作将会告诉表单重定向到自身。请参考此帖子获取更多信息。 - Blue
不好的例子。最好在原始帖子变量上进行设置检查,而不是在分配给它的变量上进行检查。 - scrowler
@scrowler 感谢您的建议,已经进行了编辑以反映您的建议。 - kittykittybangbang

0
<?php
$test=$_GET["text"];
if (isset($test)) {
    echo "This var is set";
}

if (!isset($test)) {
    echo "This var is not set";
    $test = 'set';  
}
?>
            <form action="#" method="get">
                <input type="text" id="text" name="text" autocomplete="off"><br><br>
                <input type="submit" value="submit">
            </form>

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