为防止误解为“重复问题”,这与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就像一个魅力。只是这个小脚本似乎被打破了。
答案 0 :(得分:2)
您正在检查错误的$ _GET,if(isset($_GET['psnum']))
应如下所示:
if(isset($_GET['pswnum'])) {
// ^
$pswnum = $_GET['pswnum'];
}
所以,这个条件:
if($pswnum != null)
总是假的,永远不会进入你的for循环;