繁体   English   中英

在使用if语句循环后如何具有else语句?

[英]How to have an else statement after a loop with an if statement?

我正在尝试使用文本文件创建注册系统,并且在检查用户名是否被使用的循环之后,我需要使用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语句,并且它可以工作。

循环不是条件,因此也不包含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";
}

您的逻辑存在严重缺陷。

$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输入以禁止任何输入,密码等之前,不应将其存储为纯文本格式,这不是为此创建工厂的正确方法。 您应该在线找到更好,更安全的示例,并从中进行工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM