为什么我的函数将布尔值更改为' on'?

时间:2016-01-19 18:05:36

标签: php function

所以我是php /编程世界的新手,我在网上和其他形式学习等等,但我无法找到任何可以帮助回答我的问题,这就是为什么我会这样做的原因。我在这里任何帮助当然感谢,谢谢!

我想将以下代码转换为我可以调用的函数。它就像它在下面一样工作,如果我在我的表单中选中我的复选框,则输出1,如果我不触摸我的复选框,则保持为0。

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

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

然而,当我尝试使用一个函数做同样的事情时,我选择我的复选框来显示' 1',它保持为0,如果我执行var_dump,则输出现在为&#34 ;关于"而不是像它应该是的那样。

以下是我尝试的功能:

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

总之,我很困惑为什么它会显示" on"当我尝试使用一个函数以及如何使它工作。

编辑:

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

我有一个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>

1 个答案:

答案 0 :(得分:0)

将相关行更改为以下内容:问题是当activateBox不为空时,它会自动为$ activeMain自行调整。

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

更新:检查一下。

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

activeCheck();

因更新问题而更新的答案: 如果您执行该操作,我删除了session_destory,如果您有另一个会话变量ex:user isLoggedIn,它也会被销毁。 unset可以达到目的。请根据最佳实践检查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']);
}
?>