接受使用 PHP 更改前缀的登录号


Accepting login number with changing prefix with PHP

我有一个带有以下数字的平面文件数据库文件:

1
2
3
4
5
etc.

这些数字对应于用户 ID,一个人将在其中输入上述任何数字,以便登录。

我不想修改我的文件。我的问题是,是否有办法添加接受的"前缀"。

例如,用户使用以下命令登录:

abcd1
abcd2
abcd3
abcd4
abcd5
etc.

但是我的数据文件仍然存在,但不包含前缀"abcd":

1
2
3
4
5
etc.

这也必须是"完美"的匹配。到目前为止,我所做的测试还没有定论

我想使用公认的"数组"会是要走的路吗?

我目前的登录PHP脚本是这样的,但仅适用于一个数字的完全匹配,我想添加一个前缀,以后可以更改:

<?php
date_default_timezone_set('America/New_York');
$today = mktime(0, 0, 0, date("m"), date("d"), date("y"));
$currenttime = date('h:i:s:u');
list($hrs,$mins,$secs,$msecs) = split(':',$currenttime);
echo "<center><form action='"" . $PHP_SELF . "'" method='post'><input onkeypress='"return isNumberKey(event)'" type='text' name='uNum' /><input type='submit' value='Submit' /></form></center>";
if(!$_POST['uNum']) {
die('<center>Entrer votre numéro d''inscription pour finaliser votre demande.</center>');
}
$numbers = file_get_contents("datafile.txt");
$uNumber = $_POST['uNum'];
if ( @preg_match( "/([^0-9]{$uNumber}[^0-9])/", $numbers ) ) {
print_r( "<center>The number $uNumber is good. You may proceed.</b><br><br>" );
file_put_contents($_POST['uNum'].".txt",$_POST['uNum'] . "'nUsed on ".date("m/d/Y", $today). (" $hrs:$mins:$secs")."");
include 'validate_process.php';
if (isset($_POST['uNumber']))
{
$uNumber = $_GET['inscripnum1'];
}
} else {
echo "<center>Sorry, this login number does not exist.</center>";
}
?>

在执行preg_match之前,请检查输入是否具有所需的前缀并将其删除。

$uNumber = $_POST['uNum'];
$prefix = "abcd"; //you can change the prefix anytime
$length = strlen($prefix);
if(substr($uNumber, 0, $length) === $prefix) {
    $uNumber = substr($uNumber,$length);
} else {
    $uNumber = ""; //empty or some value that is not a valid ID stored in your flatfile.
}
//Now use $uNumber in preg_match()
if ( @preg_match( "/([^0-9]{$uNumber}[^0-9])/", $numbers ) ) {
    //do something
}

也许:

if ( @preg_match( "/([^0-9]{abcd$uNumber}[^0-9])/", $numbers ) || @preg_match( "/([^0-9]{$uNumber}[^0-9])/", $numbers ) )

认为这样行得通吗?我从不使用preg_match

这是实现此目的的众多方法之一。创建文件内容的数组并遍历该数组:

$numbers = file('datafile.txt');
$result = false;
foreach($numbers as $n) {
  if ('abcd'.$n === $uNumber) {
    $result = true;
    break;
  } 
}
if ($result) {
  // OK!
}

这是另一个,我将文件加载为数组,为每个元素添加前缀,然后检查提供的值是否在该数组中:

$numbers = file('datafile.txt');
$result = in_array($uNumber,
                   array_map(function($e) { return 'abcd'.$e; },
                             $numbers)
                  );