首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文本中获取数据时出错的地方

从文本中获取数据时出错的地方
EN

Stack Overflow用户
提问于 2022-06-23 18:06:18
回答 2查看 67关注 0票数 0

我在index.php中有一个代码:

代码语言:javascript
复制
<input type="text" name="login">
<input type="text" name="password">
<input type="submit" name="submitBtn"> 

然后

代码语言:javascript
复制
<?php
$f = file_get_contents ("users.txt");
$data = explode("\n", $f);
$k = count($data);

for ($i=0; $i<$k; ++$i) {
    $user_array[$i] = explode (" | ", $data[$i]);
}
            
if (isset($_POST["submitBtn"])) {
    if ($_POST["password"] == $user_array[$i][1]) {
        echo "works";
    }
}
?>

当POST中的密码与txt-file中的密码匹配时,这段代码应该说“有效”。但事实并非如此。如果我将登录与$user_array[$i][0]匹配,它就能工作。

登录和密码保存在txt文件中,保存方式如下:

代码语言:javascript
复制
login1 | pass1
login2 | pass2

诸若此类

类型是相同的字符串,我检查过了。这应该是我看不到的东西。

EN

回答 2

Stack Overflow用户

发布于 2022-06-23 18:20:56

您的代码可以更有效地编写:

代码语言:javascript
复制
<?php
if (isset($_POST["submitBtn"])) {
  $login = $_POST["login"];
  $password = $_POST["password"];

  foreach (file("users.txt") as $line) {
    list($user, $pass) = explode(' | ', $line);
    if ($login === $user && $password === $pass) {
      echo 'Works';
      break;
    }
  }
}

或者,创建一个“查找”数组(hashmap、字典,不管你想叫它什么):

代码语言:javascript
复制
<?php
if (isset($_POST["submitBtn"])) {
  foreach (file("users.txt") as $line) {
    list($user, $pass) = explode(' | ', $line);
    $logins[$user] = $pass;
  }

  $login = $_POST["login"];
  if (isset($logins[$login]) && $logins[$login] === $_POST["password"])
    echo 'Works';
}

以外,这仅仅是为了演示!

不要在任何连接到互联网的东西中使用这个--它是可怕的不安全的!

我试图不让这些例子变得过于复杂,同时保持它的可读性;还有很多事情可以做。

票数 1
EN

Stack Overflow用户

发布于 2022-06-23 18:20:54

$i只在您的循环中。是你的迭代器变量。

您可以这样修改代码:

代码语言:javascript
复制
<?php
$f = file_get_contents ("users.txt");
$data = explode("\n", $f);
$login=[];
foreach($data as $item){    
     /*
      *   [ "login1" => "pass1" , "login2" => "pass2" ]
      */
    $array = explode (" | ", $item);
    $login[$array[0]] = $array[1];
}
            
if (isset($_POST["submitBtn"])) {
    // check if password is in array values!
    if (in_array($_POST["password"],$login)) {
        echo "works";
    }
}
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72734724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档