Php 为什么我的函数将布尔值更改为“开”?

Php 为什么我的函数将布尔值更改为“开”?,php,function,Php,Function,因此,我对php/编程世界是新手,我正在学习在线和其他表单之类的东西,但我找不到任何东西来帮助回答我的问题,这就是我来这里的原因。非常感谢您的帮助,谢谢 我想把下面的代码转换成一个我可以调用的函数。它的工作原理与下面的一样,如果我在表单中选中我的复选框,它将输出1,如果我不点击复选框,它将保持0 $activeMain = (isset($_POST['activateBox'])) ? $_POST['activateBox'] : false; if ($activeMain == tru

因此,我对php/编程世界是新手,我正在学习在线和其他表单之类的东西,但我找不到任何东西来帮助回答我的问题,这就是我来这里的原因。非常感谢您的帮助,谢谢

我想把下面的代码转换成一个我可以调用的函数。它的工作原理与下面的一样,如果我在表单中选中我的复选框,它将输出1,如果我不点击复选框,它将保持0

$activeMain = (isset($_POST['activateBox'])) ? $_POST['activateBox'] : false;

if ($activeMain == true) {
    $activeMain = '1';
} 
然而,当我尝试使用一个函数来做同样的事情,并且我选中复选框来显示“1”时,它仍然是0,如果我做一个var_dump,那么输出现在是打开的,而不是像应该的那样是1

下面是我尝试的函数:

function activeCheck($activeMain) {

$activeMain = (isset($_POST['activateBox'])) ? $_POST['activateBox'] : false;

    if ($activeMain == true) {
        $activeMain = '1';
    } 

    return $activeMain;//I messed around with a return value
                           and as far as I can tell, it has no effect.

}//ends activeCheck function

activeCheck($activeMain);//call to function
总之,我不明白为什么在我尝试使用一个函数时它会出现,以及如何使它工作

编辑:

如何将上面发布的第一段原始代码转换为函数? 我应该使用什么值/我可以使用会话之外的其他值来检查用户是否从表单中选择了复选框

我有一个HTML/PHP表单,在这个表单中我可以选择一个复选框。如果用户点击复选框,他们提供的输入将输出一个“1”表示真值

我的HTML/PHP表单:

<?php session_start(); ?>
<!DOCTYPE HTML>
<HTML>
    <head>
        <title>PHP FORM</title>
    </head>

    <body>
<form method="post" action="processForm.php">

    Name: <input type="text" name="names" required = "required"><br>

    <input type="submit" value="Create Users" onclick="formNAMES"><br>

        Activate: <input type="checkbox" name="activateBox">
<?php 

if (isset($_SESSION ['error'])) {
        foreach ($_SESSION['error'] as $value) {
            echo $value;
        }
        session_destroy();
        unset($_SESSION['error']);
}


/* Above if statement checks if $_SESSION variable has been set in processForm page. If it has, 
an error message corresponding to the error shows up on redirect to this form. The unset makes sure 
the $_SESSION is destroyed upon completion of the process. */

?>
</form>
    </body>
    </html>

将相关行更改为以下内容:问题是当activateBox不是空的时候,它会自动将自己分配到$activeMain

$activeMain = isset($_POST['activateBox']);
更新:检查这个

function activeCheck() {
    return isset($_POST['activateBox']);
}

activeCheck();
由于更新了问题,更新了答案: 我删除了session_destory,如果您执行它,并且如果您有另一个session变量ex:user isLoggedIn,它也会被销毁。未设置就可以了。请检查互联网上的XSS、Sql注入攻击,根据最佳实践实施逻辑,并在将参数放入数据库或其他程序之前验证/清理数据

<?php
// formView.php
ob_start();
session_start();
?>
<!DOCTYPE HTML>
<HTML>
    <head>
        <title>PHP FORM</title>
    </head>

<body>
    <form method="POST" action="processForm.php">
    Name: <input type="text" name="names" required = "required"><br>
    <input type="submit" value="Create Users" onclick="formNAMES"><br>
    Activate: <input type="checkbox" name="activateBox">
    <?php

    if (isset($_SESSION ['error'])) {
            foreach ($_SESSION['error'] as $value) {
                echo $value;
            }
            unset($_SESSION['error']);
    }


    /* Above if statement checks if $_SESSION variable has been set in processForm page. If it has, 
    an error message corresponding to the error shows up on redirect to this form. The unset makes sure 
    the $_SESSION is destroyed upon completion of the process. */

    ?>
    </form>
</body>
</html>
<?php ob_end_clean(); ?>


<?php
// processForm.php

if (!empty($_POST)) {
    $safeParameters = [];
    foreach ($_POST as $key => $val) {
        // sanitize your inputs. @see XSS, SQL injection etc.
        // validate parameters according to your needs.
        $safeParameters[$key] = $val;
    }
    $_POST = [];
    checkIsActivated($safeParameters);
    // implement other logic,
    // save form to database etc.
}

function checkIsActivated($parameters)
{
    return !empty($parameters['activateBox']);
}
?>

如果$activeMain==true{$activeMain='1';}我建议删除该行,您不需要这样做。它不能。返回变量是布尔值,请检查此项。如果您无法获得所需的值,您可能会错误地使用,请分享您的完整逻辑。我知道,您正在为函数提供一个参数,但您正在通过$\u POST global进行检查。这可能有冲突。明白了,所以我现在明白了我函数的范围不是全局的,定义全局值也不好。我还明白,使用_POST作为参数是不可能的。你能帮我解决这个问题,或者至少给我指出正确的方向吗?@Alei$\u POST是一个超级全球性的帖子,请查看。您可以在函数或其他任何不受作用域影响的地方使用超全局函数,因此不要传递给函数,只需在函数中使用它即可。但是,如果您想做一个好的设计,只需在脚本开始时清理全局变量并将其分配给变量,然后在脚本中使用这些变量,那么您可以将这些变量传递给函数以获得更可读的代码。顺便说一句,如果你有具体的问题,请分享你的具体代码,你在哪里/在哪里挣扎。你在哪里看到?我看不到echo@u_mulder它很可能已启用,因为它们没有设置值。PHP在没有给出value=xxx时默认为这个值。@Fred ii-我知道,这就是为什么我试图理解代码的错误之处。可能OP回显var并认为函数中的var与函数外的var相同。[active]=>string2 on}什么是活动的?你可以检查一下activateBox。你真的明白你在做什么吗?