2012-04-28 56 views
2

好吧,我有這樣的代碼:文本文件更新,添加和刪除

<?php 

//this is the thispage.php 

$file = "data.txt"; 
$name = $_POST['name']; 
$url = $_POST['url']; 

$data = file('data.txt'); 
$i = 1; 
foreach ($data as $line) { 
$line = explode('|', $line); 
$i++; 
} 

if (isset($_POST['submits'])) { 
$fp = fopen($file, "a+"); 
fwrite($fp, $i."|".$name."|".$url."|\n"); 
fclose($fp); 
} 


?> 

這index.php文件。

<html> 
<head> 
</head> 
<body> 
<br> 
<form name="form1" action="thispage.php" method="POST"> 
<input type="text" name="name"> 
<input type="text" name="url"> 
<input type="submit" name="submits" value="ADD"><br> 
</form> 
<form name="form2" action="thispage.php" method="POST"> 
<?php 

$display = file("data.txt"); 
    for ($i=0; $i<=count($display)-1; $i++) { 
    $lines = explode("|",$display[$i]); 

    print('<input type="hidden" name="id" value="'.$lines[0].'"> 
      <input type="text" name="name" value="'.$lines[1].'"> 
      <input type="text" name="url" value="'.$lines[2].'"> 
      <input type="submit" name="update" value="UPDATE"> 
      <input type="submit" name="delete" value="DELETE"><br>'); 
    } 

?> 
</form> 
</body> 
</html> 

這就是data.txt包含的。

1|John|http://www.john.com| 
2|Mark|http://www.mark.com| 
3|Fred|http://www.fred.com| 
4|Johnxxx|asdasdasdasd| 

不好受IM,使得這一個工程,努力更新和刪除,我可以添加,但我不能更新和刪除要麼。希望你們能幫助我,這是一個到期。先謝謝你。

回答

0

爲什麼不使用數據庫呢?您可以輕鬆地更新,刪除,插入使用數據庫。

+1

感謝您的建議,我現在使用數據庫作爲後端重新運行一切。 – 2015-03-19 14:12:21

0

爲什麼不使用數據庫?對於您的項目來說,將值存儲在平面文本文件以外的地方似乎是個不錯的主意,所以每次更改或單獨讀取時都不必閱讀整個內容。

+0

它只是一個expirement先生,我只是試圖找出如何使這一個作爲平面文件數據庫。謝謝。 – 2012-04-28 12:23:38

1

我不太清楚你問什麼在這裏,通常你會使用一個數據庫對這種存儲爲ulvund說的,但你說這是一個實驗,所以我跟他走;)

根據您提供的代碼,插入和查看我會看到一些可能發生的問題。你有更新和刪除你說的問題,但沒有代碼的那部分。你有一些不正確的代碼,或者你在問下一步該怎麼做?

我的問題與此代碼

  • 如果有人有什麼提交表單用「\ n」(換行字符)看到了什麼?這會弄亂你的數據(或者至少有幾行,這取決於用戶的帖子數量。)

  • 當你刪除第2行並且你再次插入新行時會發生什麼?由於您計算行數並使用其結果來彌補下一個INSERT的ID的方式,因此您需要使用2行#4。 「thispage.php」中的行根本沒有任何意義,因爲你只需要計算行數,而不是將所有數據提取到數組中。正如我之前所說的,編寫id的方式不是一個好主意。

所以,如果這個實驗是值得你的工作,你需要考慮存儲「自動增加ID」無論是在一個單獨的文件,或使數據庫的文件的第一行一元線,包含元數據AI身份證和其他你可能想要的東西。

0

根據您的具體情況,下面的內容可能會有效。但是,請務必閱讀user1362861ulvund的答案。有很多方法可能會出錯,如果你打算在實踐中應用這個,你最好用數據庫。

<?php 
//this is the thispage.php 

$file = "data.txt"; 
$name = $_POST['name']; 
$url = $_POST['url']; 
$id = $_POST['id']; 
$mode = $_POST['mode']; 

$data = file('data.txt'); 
$i = 1; 
foreach ($data as $line) { 
    // You're not doing anything with this. 
    //$line = explode('|', $line); 
    $i++; 
} 

if (isset($_POST['submits'])) { 
    if ($mode === 'add') { 
     $fp = fopen($file, "a+"); 
     fwrite($fp, $i."|".$name."|".$url."|\n"); 
     fclose($fp); 
    } else { 
     $fp = fopen($file, "r+"); 
     foreach ($data as $line) { 
      $l = explode('|', $line); // $l = substr($line, 0, strpos($line, '|')); 
      if ($id === $l[0]) { 
       if ($mode === 'update') { 
        fwrite($fp, $l[0]."|".$name."|".$url."|\n"); 
       } // else delete; don't re-write this line. 
      } else { 
       fwrite($fp, $line); 
       // This assumes IDs are attached to data, not line numbers. 
       // If that isn't the case, storing the ID (line number) is pointless. 
      } 
     } 
     fclose($fp); 
    } 
} 
?>