我正在尝试使用文本文件创建注册系统,并且在检查用户名是否被使用的循环之后,需要使用else语句来获得帮助。
如果我发现问题基本上已经解决,那么我通常只是想在使用if语句的循环之后查找如何使用else语句。这是代码:
while($i < count($logindata)-1) {
if ($_POST['username'] == $user[$i]['username']) {
set_message(" That username is taken", "danger");
}
$i++;
}
else {
if (!empty($_POST['username']) && !empty($_POST['password'])) {
file_put_contents('logininformation.txt', $_POST['username'] . "?=%&$#@[}[}+-789409289746829" . $_POST['password'] . "\n", FILE_APPEND);
set_message("Account created!", "success");
} else {
set_message(" You have not put in a username and/or password","danger");
}
}
我希望在循环之后能够有一个else语句,并且它可以正常工作。
答案 0 :(得分:2)
循环不是条件,因此也没有else
部分。循环在条件为真时运行是正确的,但条件不为真时,循环就结束了。
因此,要检查循环是否根本没有触发,您必须找到其他方法,例如自己写一个条件。
为了争辩,您COULD
保存一个标志,然后进行评估,但是在大多数情况下,我不建议这样做:
$i = 0;
$loopDidRun = false;
while ($i < 10) {
$i++;
$loopDidRun = true;
}
if (!$loopDidRun) {
echo "loop did not run, therefore the 'else case', but not really";
}
答案 1 :(得分:0)
您的逻辑存在严重缺陷。
$failed=false;
if(empty($_POST['username']) || empty($_POST['password'])){
$failed=true,
set_message(" You have not put in a username and/or password","danger");
}else{
while($i<count($logindata)-1){
if($_POST['username']==$user[$i]['username']){
$failed=true;
set_message("That username is taken","danger");
break;
}
$i++;
}
}
if(!$failed){
file_put_contents('logininformation.txt',$_POST['username']."?=%&$#@[[}+-789409289746829".$_POST['password']."\n",FILE_APPEND);
set_message("Account created!","success");
}
但是我在这里所做的只是修复错误的代码。在需要过滤$POST
输入以禁止任何输入,密码等输入之前,不应将其存储为纯文本格式,这不是为此创建工厂的正确方法。您应该在线找到更好,更安全的示例,并从中进行工作。