HTML内部的PHP无法正常工作

时间:2017-03-26 13:21:10

标签: php scripting wampserver

为防止误解为“重复问题”,这与here不同。由于PHP配置没问题(phpinfo功能正常,WordPress开发安装也可以)。但我正在尝试使用小脚本,这可能有助于我创建密码,用于测试目的,或仅仅是为了好玩。

这是用于生成密码的脚本(使用PHP混合HTML):

<?php
    global $alpha;
    global $echo;

    $alpha_lower = 'abcdefghijklmnopqrstuvwxyz';
    $alpha_upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $alpha_nums  = '0123456789';
    $alpha_spec  = '$ß\'"_-*/\\!§()[]{}';
    $alpha = "";
    $echo = "";
    $upper = null;
    $lower = null;
    $numbers = null;
    $special = null;
    $pswlen = null;
    $pswnum = null;

    if(isset($_GET['upper'])) {
        $upper = $_GET['upper'];
    }

    if(isset($_GET['lower'])) {
        $lower = $_GET['lower'];
    }

    if(isset($_GET['numbers'])) {
        $numbers = $_GET['numbers'];
    }

    if(isset($_GET['special'])) {
        $special = $_GET['special'];
    }

    if(isset($_GET['pswlen'])) {
        $pswlen = $_GET['pswlen'];
    }

    if(isset($_GET['psnum'])) {
        $pswnum = $_GET['pswnum'];
    }

    if($lower != null) {
        $alpha .= $alpha_lower;
    }
    if($upper != null) {
        $alpha .= $alpha_upper;
    }
    if($numbers != null) {
        $alpha .= $alpha_nums;
    }
    if($special != null) {
        $alpha .= $alpha_spec;
    }

    function generatePassword($length = 8, $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$ß\'"_-*/\\!§()[]{}') {
        $chars  = $alphabet;
        $count  = mb_strlen($chars);
        $result = "";

        for ($i = 0, $result = ''; $i < $length; $i++) {
            $index = rand(0, $count - 1);
            $result .= mb_substr($chars, $index, 1);
        }

        return $result;
    }

    if($alpha != "") {
        if($pswnum != null) {
            if($pswlen != null) {
                for($i = 0; $i < (int)$pswnum; ++$i) {
                    $echo .= generatePassword($pswlen, $alpha);
                    if($i < $pswnum - 1) {
                        $echo .= "<br />";
                    }
                }
            }
        }
    }
?>
<!DOCTYPE HTML>
<html lang="cs-CZ" type="text/html">
    <head>
        <meta charset="utf-8" />
        <title>Generátor hesel</title>
        <style type="text/css">
            .passwords {
                font-family: Consolas, Courier New, Courier, monospace;
                font-size: 12pt;
                font-weight: bold;
            }
        </style>
    </head>
    <body>
        <form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            Heslo má mít tyto znaky:
            <label for="lower"><input type="checkbox" name="upper" id="lower" checked /> Malá písmena</label>
            <label for="upper"><input type="checkbox" name="lower" id="upper" checked /> Velká písmena</label>
            <label for="numbers"><input type="checkbox" name="numbers" id="numbers" checked /> Číslice</label>
            <label for="special"><input type="checkbox" name="special" id="special" checked /> Speciální znaky</label><br />
            Heslo má být takto dlouhé:
            <input type="number" name="pswlen" value="15" /><br />
            Hesel má být tolik:
            <input type="number" name="pswnum" value="5" /><br />
            <input type="submit" value="Vygeneruj!" />
        </form>
        <p class="passwords"><?php echo $echo; ?></p>
    </body>
</html>

问题是,echo语句不起作用。什么都没有产生。该函数来自here(原始函数非常相似,但只使用其他来源)。文件以.php扩展名保存,因此应该可以使用。但事实并非如此。我也试过让重要的变量全局化(也许是在错误的地方)。似乎没什么用。我通过validator运行代码,没有报告任何问题,代码看起来很干净。

是什么让脚本无效?它只是唯一一个不起作用的脚本:(报价生成器完美运行,WordPress就像一个魅力。只是这个小脚本似乎被打破了。

1 个答案:

答案 0 :(得分:2)

您正在检查错误的$ _GET,if(isset($_GET['psnum']))应如下所示:

if(isset($_GET['pswnum'])) {
//                ^
    $pswnum = $_GET['pswnum'];
}

所以,这个条件:

if($pswnum != null)

总是假的,永远不会进入你的for循环;