我在index.php中有一个代码:
<input type="text" name="login">
<input type="text" name="password">
<input type="submit" name="submitBtn"> 然后
<?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文件中,保存方式如下:
login1 | pass1
login2 | pass2诸若此类
类型是相同的字符串,我检查过了。这应该是我看不到的东西。
发布于 2022-06-23 18:20:56
您的代码可以更有效地编写:
<?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、字典,不管你想叫它什么):
<?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';
}以外,这仅仅是为了演示!
不要在任何连接到互联网的东西中使用这个--它是可怕的不安全的!
我试图不让这些例子变得过于复杂,同时保持它的可读性;还有很多事情可以做。
发布于 2022-06-23 18:20:54
$i只在您的循环中。是你的迭代器变量。
您可以这样修改代码:
<?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";
}
}
?>https://stackoverflow.com/questions/72734724
复制相似问题