Edycja konkretnej linijki w pliku tekstowym

0

Witam stworzyłem kartotekową baze danych w pliku txt lecz nie wiem jak mogę dokonać edycji w konkretnej linijce
póki co napisałem taki kod lecz usuwa całą zawartość pliku,a w moim zamyśle było że miał od nowa zapisywać wszystkie pobrane dane i gdy natrafi na wybrany rekord wcześniej podmieni dane podane też wcześniej przez użytkownika w formularzu.

function zamien($dane){
	$dane=explode("|",$dane);
	$id=$dane[6];
	$dane=$dane[1]."|".$dane[2]."|".$dane[3]."|".$dane[4]."|".$dane[5];
   $t=file('baza.txt');
   $ile=count($t);
   array_splice($t,$ile,1,$dane."\n");
   $s=implode("",$t); 
   $u=fopen('baza.txt','w+');
   foreach($s as $i=>$a)
   {
	   if($id!=$i)
   fwrite($u,$a);
   else
	 fwrite($u,$dane);  
   
   }
   fclose($u);

return "<h1>Pomyślnie zmieniono dane w bazie danych</h1> <br>";
}
0

Dlaczego po prostu nie zastosujesz bazy danych? A co do problemu - czytałeś dokumentację? Jest tam napisane
'w+' Otwiera do odczytu i zapisu; umieszcza wskaźnik pliku na jego początku i obcina plik do zerowej długości. Jeśli plik nie istnieje to próbuje go utworzyć.

0
axelbest napisał(a):

Dlaczego po prostu nie zastosujesz bazy danych? A co do problemu - czytałeś dokumentację? Jest tam napisane
'w+' Otwiera do odczytu i zapisu; umieszcza wskaźnik pliku na jego początku i obcina plik do zerowej długości. Jeśli plik nie istnieje to próbuje go utworzyć.

Musze na lekcje koniecznie na pliku txt,wiem że w+ obcina do zerowej długość, od nowa chcę wprowadzić dane pobrane przed usunięciem i kiedy napotka linijkę o podanym Id ma wstawić inne dane

0
  • napisz funkcję, która wczytuje całą zawartość pliku do tablicy,
  • przetwórz tę tablicę,
  • napisz funkcję, która zapisuje całą zawartość tablicy z powrotem do pliku.
0
Patryk27 napisał(a):
  • napisz funkcję, która wczytuje całą zawartość pliku do tablicy,
  • przetwórz tę tablicę,
  • napisz funkcję, która zapisuje całą zawartość tablicy z powrotem do pliku.
function zamien($dane){
	$dane=explode("|",$dane);
	$id=$dane[6];
	$dane=$dane[1]."|".$dane[2]."|".$dane[3]."|".$dane[4]."|".$dane[5];
    $t=file('baza.txt');
    $ile=count($t);
    array_splice($t,$ile,1,$dane."\n");
    $baza=array();
    for($i=0;$i<$ile;$i++)    
	{
		
     $baza[$i]=$t[$i];
    
		
	}
	$u=fopen('baza.txt','w');
	fclose($u);
	$baza[$id]=$dane;
	
	
  
    for($i=0;$i<$ile;$i++)
	{
		$u=fopen('baza.txt','a');
		fwrite($u,$baza[$i]);
		fclose($u);
		
	}
	```
Teraz nadpisuje mi ale tylko ostatni rekord gdy próbuję pierwszy lub któryś w środku to pisze mi wszystko w jednej linijce

1 użytkowników online, w tym zalogowanych: 0, gości: 1