Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Operacje na plikach
Forum PHP.pl > Forum > Przedszkole
Arctos
Witam.

Zrobiłem sobie bazę w pliku tekstowym.
I problem jest z wyciąganiem odpowiedniej linijki danych z pliku poprzez wartość zmiennej z adresu $_GET["anime"] (zmienna ma wartość liczbową).

W pliku dane są zapisane jako 1 linijka = 1 zestaw danych z unikalnym ID na końcu.

Chodzi o to by wyciągało linijkę danych z ID odpowiadającemu wartości zmiennej $_GET["anime"] i echo'wało kod html ze zmiennymi w odpowiednich miejscach.

  1. $pliczek = "anime.db";
  2. $anime=$_GET["anime"];
  3. $uchwyt = fopen($pliczek,'r');
  4. while(!feof($uchwyt)){
  5. $linia = rtrim(fgets($uchwyt));
  6. list(,,,,,,,,,,,,,,$id)=explode("||",$linia);
  7. if($id==$anime){
  8. $tabliczka[] = $linia;
  9. }
  10. }
  11. fclose($uchwyt);
  12.  
  13. list($tytul,$tytulang,$typ,$dataemisji,$gatunek,$tlumaczenie,$korekta,$timing,$typesetting,$karaoke,$efekty,$qualitycheck,$kodowanie,$opis,$id)=explode("||",$tabliczka);
  14. $opis = str_replace("\\| ", "|", $opis);
  15. echo 'I TUTAJ TEN CAŁY KOD HTML ZE ZMIENNYMI Z LIST W ODPOWIEDNICH MIEJSCACH';


Nie wiem dlaczego nie działa. sad.gif
dublinka
Po pierwsze to f. fgets posiada 2 parametry - uchwyt pliku i ilosc pobieranych znakow.U Ciebie masz tylko uchwyt.

  1. <?php
  2. $handle = @fopen("plik.txt", "r");
  3. if ($handle) {
  4. while (($buffer = fgets($handle, 4096)) !== false) {
  5. echo $buffer;
  6. }
  7. if (!feof($handle)) {
  8. echo "blad\n";
  9. }
  10. fclose($handle);
  11. }
  12. ?>

Wez sobie odpal ten przyklad i zrobi listing pliku.W petli zrob tablice jak to robisz a pozniej jak chcesz tym list-em wyciagnij dane.Tylko najpierw podaj ilosc znakow we fgets()
To tak na szybko bo tylko zerknolem.

Zreszta masz tutaj gotowca bo mialem chwile.
Plik z linkiem przesylasz id o numerach od 0 (to zalezne co masz w pliku) W tym momencie jest sprawdzany pierwszy indeks kazdej linii pomiedzy separatorami | (osobiscie radze stosowach jako separatory znaki ktorych nie mozna wprowadzic z klawiatury np chr(15))
plik z linkiem
  1. <a HREF="odczyt.php?id=2">ds</A>

dane:
  1. 0|1|2|3|4|5
  2. 1|6|7|8|9|10
  3. 2|11|12|13|14|15
  4. 3|16|17|18|19|20


przyklad:
  1. <?
  2. $to = array();
  3. $foo = fopen('plik.txt', 'r');
  4. flock($foo, 1);
  5. while(!feof($foo))
  6. {
  7. $linia = fgets($foo,1024);
  8. list($id,$jeden,$dwa,$trzy,$cztery,$piec)=explode("|",$linia);
  9. if($_GET['id']==$id){
  10. $to[]=$linia;
  11. }
  12. }
  13. flock($foo, 3);
  14. fclose($foo);
  15. print $to[0]; //tw tablicy [0] masz zawarta szukana linie i możesz kolejnym razem ja wylistowac od separatora
  16.  
  17. ?>

Mozna to zrobic na kilka roznych sposobow.Koncowy wynik jest w tablicy i ja potem obrabiasz dalej.Chyba nie bedzie problemow.
siemano.
Arctos
Ten pierwszy kod od listowania działa. Wylistował mi zawartość pliku.

Ten drugi kod już niestety nic nie pokazał :/
dublinka
Cytat(Arctos @ 29.10.2011, 14:11:47 ) *
Ten pierwszy kod od listowania działa. Wylistował mi zawartość pliku.

Ten drugi kod już niestety nic nie pokazał :/

1. Zmien nazwe pliku na swoja smile.gif
2. Zmien separator z tego co jest '|' na swoj '||'

W tym przykladzie jest inaczej jak u Ciebie tzn chodzi o dane.Ty tam masz wiecej danych.Tutaj jest tylko kilka i ID ktore jest przekazywane w linku (ID) sprawdzane jest z tym co jest w kazdej linii w pierwszym indeksie.Nie wiem co sprawdzasz - swoj plik czy ten co dalem.Jesli swoj to sie nie dziwie bo to trzeba przerobic jesli nie masz liczb w pierwszym indeksie.Paramter jaki przekazujesz moze byc jaki chcesz tylko musi sie zgadzac z tym co sprawdzasz.

Po pierwsze odpal to co podalem.

Po drugie pozmieniaj w list() tzn dodaj swoje zmienne tzn ich ilosc.

Prosciej sie nie da.
Arctos
No łał, taki głupi nie jestem i zmieniłem na te swoje, dlatego pierwszy kod działa, a drugi nie tongue.gif

Kod wygląda tak:

  1. $pliczek = "link/do/anime.db";
  2. $anime = $_GET["anime"];
  3. $to = array();
  4. $uchwyt = fopen($pliczek, 'r');
  5. flock($uchwyt, 1);
  6. while(!feof($uchwyt)){
  7. $linia = fgets($uchwyt,1024);
  8. list($tytul,$tytulang,$typ,$dataemisji,$gatunek,$tlumaczenie,$korekta,$timing,$typesetting,$karaoke,$efekty,$qualitycheck,$kodowanie,$opis,$id)=explode("||",$linia);
  9. if($anime==$id){
  10. $to[]=$linia;
  11. }
  12. }
  13. flock($uchwyt, 3);
  14. fclose($uchwyt);
  15. print $to[0];
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.