2014-10-05 36 views
0

我在php中遇到問題。我被要求爲了我的大學目的而這樣做。我的第一頁有一個基本的文本框,用戶需要在其中輸入一個登錄ID並按下登錄按鈕。一旦登錄按鈕被按下,登錄ID和時間戳被存儲在用逗號分隔的txt文件中。因此,如果是第二次用戶A登錄,則以前的時間戳必須用新的時間戳覆蓋。在txt文件中搜索並覆蓋時間戳

這是我的代碼:

<html> 
<head><title>Login Portal</title></head> 
<body><center> 
<h1>TPF EMPLOYEE LOGIN</h1><hr><br><br> 
<?php 
session_start(); 
if(isset($_POST['submit'])) 
    { 
    $myfile = fopen("data.txt", "a") or die("Unable to open file!"); 
    $_SESSION['name']=$_POST['id']; 
    date_default_timezone_set('Asia/Calcutta'); 
    $date = date('Y-m-d H:i:s'); 
    $txt=$_SESSION['name'].",".$date.",\n"; 
    fputs($myfile, $txt); 
    fclose($myfile); 
    } 
    else 
    { 
    echo "<form name='login' method='post'>"; 
    echo "Enter your login id : <input type='text' name='id' id='id' /><br><br>"; 
    echo "<input type='submit' name='submit' value='Login' />"; 
    echo "</form>"; 
    } 
?> 
</center> 
</body> 
</html> 

這是我的txt文件看起來像:

yesh,2014-10-05 10:00:42, 
thilak,2014-10-05 10:00:56, 

回答

0
if(isset($_POST['submit'])) { 
    $myfile = file_get_contents('data.txt'); 
    $_SESSION['name']=$_POST['id']; 
    date_default_timezone_set('Asia/Calcutta'); 
    $date = date('Y-m-d H:i:s'); 
    $txt=$_SESSION['name'].",".$date.",\n"; 
    $name = $_SESSION['name']; 
    if(preg_match("/$name/", $myFile)) { 
     $results = preg_replace("/$name.*\,/", $txt, $myFile); 
     file_put_contents('data.txt', $results); 
    } 
    else { 
     file_put_contents('data.txt', $txt, FILE_APPEND); 
    } 
} 
else { 
    echo "<form name='login' method='post'>"; 
    echo "Enter your login id : <input type='text' name='id' id='id' /><br><br>"; 
    echo "<input type='submit' name='submit' value='Login' />"; 
    echo "</form>"; 
} 

確保您測試這一點使用它在你的真正的文件時,應仔細來確保它不會損害您的數據。因爲我對文件本身不夠了解,以確保它不會損壞文件。

0

這樣的事情(雖然可能不是最佳)應該工作。但是,在真實環境中,您可能希望使用數據庫,或者至少鎖定文件,使其不會在讀取和寫入之間被另一個會話更新。這是未經測試的,但應該讓你在正確的方向。

$lines = file($file, FILE_IGNORE_NEW_LINES); 
$name = preg_quote($_SESSION['name']); 
$lines = preg_replace('/^' . $name . ',([^,]+),/$', $date, $lines); 
file_put_contents($file, join("\n", $lines));