Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Usuwanie z pliku
Forum PHP.pl > Forum > Przedszkole
Krisso
Witam sprawa niby oczywista,jednak stwarza problem:

Istnieje wyszukiwarka znajdujaca interesującą nas linie z pliku "baza.txt".
Dodam, że wyszukiwarka znajduje linie za pomocą autora i tytulu (2 pierwsze kolumny w tabeli)
nastepnie wyswietla nam to co znalazł i automatycznie zapisuje do innego pliku "postoj.txt".

A tutaj tkwi problem:
Co należałoby zrobić aby po zapisaniu do "postoj" jednoczesnie wykasował tą linię z "baza.txt" questionmark.gif
Tak, aby po zedytowaniu możnabyłoby spokojnie zapisać do "baza.txt" nową ksiazke bez obawiania się, że stary(bledny) wpis nadal istnieje.
Maxik
Może jakieś zastępowanie znalezionej linii pustą?
Cezar708
A nie łatwiej wykorzystać do tego celu zwykła bazę danych. Chociażby nawet SQLite? Tam już wszystkie tego typu problemy są wyeliminowane
Krisso
Z racji mojej upartości pozostaje przy plikach. Może z czasem zmienie na MySql-a ale poki co tylko na plikach pracuje.
Lion_87
może tak:

Kod
$linia = str_replace("|$autor|$tytul\n","",$linia ); //tutaj podaj jak wyglada Twoja linia w baza.txt
Krisso
baza.txt
Kod
Sienkiewicz Henryk||Potop||PWN||2005||4532/5422||powiesc||historyczna||jazda na szweda
Sienkiewicz Henryk||Pan Wołodyjowski||PWN||1785||45632/75645||powiesc||historyczna||ciekawa


ed.php
  1. <?php
  2. // fragment odpowiedzialny za wyszukanie
  3. $arrFile = file( 'baza.txt' ); // powinienem chyba dodać ,'r+'
  4. for( $i = 0; $i < count( $arrFile ); $i++ ) 
  5. {
  6. list($autor[$i], $tytul[$i], $wyd[$i],$rw[$i],$isbn[$i],$gat1[$i],$gat2[$i],$opis[$i] ) = explode("||", $arrFile[$i]);
  7. $line = explode( '||', $arrFile[ $i ] );  //rozbicie na elementy
  8. //znalezienie szukanego slowa, $pole1 to slowo pobrane z formularza umieszczonego 
    troche wyzej
  9. if( eregi( $pole1, $line[1])||eregi( $pole1, $line[0] ) ) 
  10. $dane = $line[0]."||".$line[1]."||".$line[2]."||".$line[3]."||".$line[4]."||".$line[5]."||".$line[6]."||".$line[7].""; 
  11. //tutaj nastepuje zapis znalezionej lini do pliku "postoj.txt"
  12. ?>

Przepraszam Lion_87 ale nie zabardzo rozumiem jak do powyższego kodu zastosować twoją propozycje.
powinien otowrzyc plik baza.txt do odczytu i zapisu ('r+') ale reszty jakoś nie łapie.
co podstawić do $linia, bo z twojego zapisu wyglada jakby ona sama siebie szukala.

EDIT: godzina 3:04 15 stycznia 2008 // Krok po kroku

OD ostatniego postu sprawa ruszyła do przodu (nocne pisanie widocznie mi służy), doszedlem do etapu usunięcia i mam problem:
plik baza.txt wyglada tak samo jak wyżej:

  1. <?php
  2. if($sprawa==$sprawdz)  //znajduje te same wpisy teraz mozna usunac opowiedni,
  3. // $sprawa zawiera zmienną z baza.txt
  4. //$sprawdz zawiera zmienne ktore zaraz będą edytowane
  5. {
  6. echo "Ta zmienna jes w bazie i teraz ją usuniemy<br>";
  7. unset($sprawa);  
  8. echo "Usunięto zbędną linie i reszte zapisujemy do pliku baza.txt";  
  9. }
  10.  else
  11.  {  
  12. $filer = "baza.txt";  
  13. $ftp = fopen($filer, "r+");  
  14. flock($ftp, 2);
  15. fwrite($ftp, $sprawa[j]);  
  16. flock($ftp, 3);
  17. fclose($ftp);
  18. echo "<center><strong><p>Stara wersja usunieta</p><br /></center></strong>";
  19.  }
  20. ?>


I problem polega na tym ze nie kija jak to działa, wiem że to powinno inaczej wygladać, ale poki co jest tak jak widzicie.
Moja prośba prosta - co zrobic aby po usunieciu tej lini ($sprawa) zapisać reszte pliku baza.txt na nowo.
Tak usunięcie zakończyło się w pełni sukcesem.
Lion_87
moze to pomoże

Kod
<?
$plik = "baza.txt";
  $fopen = fopen ($plik , "r");
  $zmien = fread ($fopen, filesize ($plik));
  fclose ($fopen);
  if(strstr($zmien,"".$line[0]."||".$line[1]."||".$line[2]."||".$line[3]."||".$line[4]."||".$line[5]."||".$line[6]."||".$line[7]."")){
  
  $plik = "baza.txt";
  $fsee = fopen($plik,'w');

  $zmien = str_replace(""$line[0]."||".$line[1]."||".$line[2]."||".$line[3]."||".$line[4]."||".$line[5]."||".$line[6]."||".$line[7]."\n","",$zmien);


  fputs($fsee, $zmien);
  fclose($fsee);
  ?>
Krisso
NIe za bardzo rozumiem kolego jak ten kod ma działać, więc jeśli można prosic to jakiś mały komentarzyk questionmark.gif
A ponieważ muszę skończyć ten projekt i to jak najszybciej,a ja z jakiegos powodu nie mogę usunąć wybranej lini.
Używając twojej podopowiedzi pojawia sie blad, na ktory nie mam koncepcji pozbycia sie.

Czyli nadal jestem na etapie, gdy znaleziono linie do usunięcia, ale nie wiem jak się jej teraz pozbyć.
dziurson
wyszuć if z tego wyżej i powinno działać
Krisso
Kod juz działa ale nadal z dużym minusem.
Zamiast kasować mi wybraną linię kasuje wszystkie od początku pliku i zapisuje tylko tą która była edytowana.

EDIT: juz sie zorientowalem dziursoni poprawilem tą linie z brakującą kropką, ale pozostaje problem skasowania wszystkiego a nie tylko wybranej lini.
dziurson
  1. <?php
  2. $zmien = str_replace("".$line[0]."||".$line[1]."||".$line[2]."||".$line[3]."||".$line[4]."||".$line[5]."||".$line[6]."||".$line[7]."\n","",$zmien);
  3. ?>
Krisso
OKI już sobie jakoś z tym poradziłem, ale poki co to jest po prostu fuszerka. Tzn.działa jak należy ale funkcjonalnie daje sobie "-5" a estetyka "-9" w skali 0-10 smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.