Php “错误”;未定义索引“;如果未选中复选框

Php “错误”;未定义索引“;如果未选中复选框,php,Php,当我选中复选框时,没有错误,但当我没有选中复选框时,它会给我错误 <?php if(isset($_REQUEST['btn'])) { $remmber = $_REQUEST['active']; if($remmber == "on") { echo "Checked"; } else {$remmber = "";} } ?> <

当我选中复选框时,没有错误,但当我没有选中复选框时,它会给我错误

 <?php
    if(isset($_REQUEST['btn']))
    {
        $remmber = $_REQUEST['active'];
    if($remmber == "on")
        {  
            echo "Checked";
        }
        else  {$remmber = "";}
    }
    ?>
    <html>
    <form name= "frm" action = "test.php" method = "post" >
    <p>Username
    <input  type = "text" name = "name" value = ""  />
    </p>

    <p>Password
    <input type = "text" name = "password" value = "" />
    </p>

    <p>
    <td colspan = "2"><input type = "checkbox" name = "active" value = "active" />Keep Me Loged In 
    </p>

    <p><input type = "submit" name = "btn" value = "Login" />

    </p>


    </form>
    </html>

用户名

密码

让我登录


复选框如果未选中,则不会过账。因此,请检查它是否存在于发布的数据中,然后将
设置为on
,否则将
设置为blank
。试试-

if(isset($_REQUEST['btn']))
{
    $remmber = !empty($_REQUEST['active']) ? 'on' : '';
    if($remmber == "on")
    {  
        echo "Checked";
    }
    else 
        $remmber = "";
}
if($remmber==“on”)
但您正在使用并指定一个值
value=“active”

  • 如果未指定值,“开”是复选框的默认值
因此,您需要将其调整为

if($remmber == "active")

编辑:(解释)

您获得未定义索引的原因是,一旦您点击submit并没有勾选复选框,它将生成该通知

将代码修改为,并检查是否设置了复选框值

if(isset($_REQUEST['btn']))
{

    if(isset($_REQUEST['active'])){

    $remmber = $_REQUEST['active'];

    if($remmber == "active")
        {  
            echo "Checked";
        }
        else  {$remmber = "";}

    } // closing brace for if(isset($_REQUEST['active']))

}

附加编辑,向用户显示未设置复选框:

if(isset($_REQUEST['btn']))
{

    if(isset($_REQUEST['active'])){

    $remmber = $_REQUEST['active'];

    if($remmber == "active")
        {  
            echo "Checked";
        }
        else  {$remmber = "";}

    } // closing brace for if(isset($_REQUEST['active']))

    else{ echo "The checkbox was not ticked.";
    }

}

脚注:

  • 您还应该使用有条件的
    !empty()
    用于输入

  • 仅当设置了“提交”和“提交”复选框时才进行检查


注意到您在另一个答案中留下的评论后:


@Barmar我只是将此用于登录页面,其中我使用复选框来记住用户名和密码阿克沙·迪曼

请阅读以下有关Stack的问答:

它还包含有关密码的重要信息

  • 我希望您也在使用现代散列方法,例如

您可以简单地使用isset

if(isset($_REQUEST['btn']))
{
    $remmber = isset($_REQUEST['active']) ? $_REQUEST['active'] : '';
    if($remmber == "on")
    {  
        echo "Checked";
    }
    else  {$remmber = "";}
}

错误发生在行
$remmber=$\u请求['active']上
@Barmar我知道,但是OP使用的是
if($remmber==“on”)
没有指定该值,他们使用的是
value=“active”
。我很乐意调整或删除我的答案。他的问题是关于“未定义索引”的警告。你的答案很重要,但与他的问题没有直接关系。@Barmar我将测试它,并根据我的发现调整我的答案。谢谢您的输入。@Fred ii-事实上,当复选框被取消选中时,它不在post中,因此一个简单的
isset
empty
应该足以检查,不需要检查字符串值谢谢您的帮助。现在它可以工作了,但当我一直使用if-else时,如果它打开了,那么它将发出回声,否则它将设置$memory=”“。而不是为什么它仍然给出错误。如果($remmber==“on”){echo“Checked”;}否则{$remmber=“”;}您应该解释为什么需要对复选框使用这种方法。@AkshatDhiman查看另一个答案,了解为什么在“上测试
==”不起作用。@Barmar我只是将此用于登录页面,我使用复选框来记住用户名和密码。@AkshatDhiman我不确定这与为什么应该测试
$remmber==“active”
而不是
$remmber==“on”
有什么关系,就像我在回答BOSE中士的类似回答时说的,你应该解释为什么这是必要的。可能重复的