-6

次の番号のフラットファイル データベース ファイルがあります。

1
2
3
4
5
etc.

番号は、ログインするために上記の番号のいずれかを入力するユーザー ID に対応しています。

ファイルを変更したくありません。私の質問は、受け入れられた「PREFIX」を追加する方法があるかどうかです。

たとえば、ユーザーは次のようにログインします。

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>";
}

?>
4

3 に答える 3

1

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
}
于 2012-06-04T14:57:04.737 に答える
0

これは、多くの方法の 1 つです。ファイルの内容の配列を作成し、その配列をループします。

$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)
                  );
于 2012-06-04T14:43:06.757 に答える
0

多分:

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

うまくいくと思いますか?私は preg_match を使用しません

于 2012-06-04T14:42:24.113 に答える