[PHP] Zamiana wiersza w pliku tekstowym, ew.usunięcie?


(Marcin E Pc) #1

Witam!

Mam takie problem, a mianowicie robię pewną aplikację opartą o pliki tekstowe (niestety nie ma możliwości DB), i doszedłem do poziomu edycji danych. Jest do baza osób zawierająca kilka informacji, do każdej osoby 1 wiersz. Powiedzmy że chcę edytować tą osobę, zmienić pewne dane. Modę sobie to wczytać do formualarza te dane, jednak jak zrobić aby wiersz o podanym id, Imieniu i nazwisku usunąć/zamienić?

Pozdrwiam


(Howks0) #2

Aby edytować/usunąć jeden wiersz należy od nowa przebudować cały plik. Nie wiem jak jest zbudowany Twój plik który pełni rolę DB więc wymyślę sobie jakiś format, dla przykładu najprostszy:

ID||Imie||Nazwisko||Miejscowosc

//id usera ktorego chcemy edytowac

$ide = (integer) $_POST['id']; 


//otwieramy plik z danymi

$fi = file('plikdb.inc', FILE_SKIP_EMPTY_LINES);


foreach($fi As $ind => $val)

{

    $tab = explode('||', $val);

    if(!empty($tab))

    {

       $tab[0] = (integer) $tab[0];

       if($tab[0]==$ide)

       {

          $data = $tab[0].'||'.$_POST['imie'].'||'.$_POST['nazwisko'].'||'.$_POST['miasto'].'\n\r';

          $fi[$ind] = $data;

          unset($data);

       }

    }

}


//zapisujemy dane 

if(file_put_contents('plikdb.inc', $fi, LOCK_EX))

{

  echo 'Zapisano nowe dane'

}

Mniej więcej tak to może wyglądać. To jest tylko przykład, kod ten trzeba jeszcze odpowiednio zabezpieczyć. Osobiście nie budowałbym całej bazy trzymanej w jednym pliku. Trzymanie każdego usera w osobnym pliku moim zdaniem jest lepsze - jedyny minus po pewnym czasie tych plików może trochę być.


(Marcin E Pc) #3

Tak, ale to jest tylko baza osób, nie userów. Czyli osoba, trochę informacji i to wszystko.

I nie wiem dlaczego skrypt nie działa, napisałem narazie usówanie wiersza, ale nie działa:

<?php

$delete= $_GET['delete'];

$edit = $_GET['edit'];

$sektor = $_GET['sektor'];

$otworz = file("../database/$sektor.txt");

$ile = count($otworz);

if (!empty($delete))

{

	$plik = fopen ("../database/$sektor.txt", 'w');

   $zapis = fwrite ($plik, '');

   fclose($plik);

for($i=0; $i<$ile; $i++)

{

	$wiersz = explode("\t", $otworz[$i]);

	echo $wiersz['6'].'-'.$delete.'
';

	if($wiersz['6']==$delete)

	{	

		unset($otworz[$i]);

		echo 'ok';

	}

	else

	{

		$wp = fopen("../database/$sektor.txt", 'a+');

		fwrite($wp, $otworz[$i]);

		fclose($wp);

	}

}

}

?>

I tak:

echo $wiersz['6'].'-'.$delete.'

'; wyświetli wartość 1-1, czyli warunek jest spełniony, a if nie wykonuje operacji w nim zawartych, dlaczego?

Pozdrawiam

edit:

wystarczyło trim($wiersz['6']); :smiley: