Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Porównywanie pliku i formularza
Forum PHP.pl > Forum > Przedszkole
Krisso
Napisałem poniższy fragment kodu:
plik baza.txt
Kod
Mickiewicz Adam`Dziady`PWN`1985`456123-987-987`powieϾ`literacka`Nudna ksiazka ale co robic to lektura jest
Sienkiewicz Henryk`Potop`PWN`1992`1236-9875-4865`powieϾ`historyczna`Fajna lekturka
Jajuga Krzysztof`Inwestycje`WN PWN`2007`7896-5235-7842`podrecznik`informator` Instrumenty finansowe
Szewczyk Ryszard`Bankowa obsługa firmy`Oficyna Ekonomiczna` 2002`98775-6512-9875`poradnik`finanse`Cos jakby przewodnik


plik szukaj.php
  1. <?php
  2.  
  3.  
  4. $pole1 = trim($_POST['pole1']); 
  5. echo '<form action="" method="post">
  6. <center><strong>Szukana </strong> :  <center>  
  7. <input type="text" name="pole1" style="width:  200px;" /><br /> <br /> 
  8. <input type="submit" value="Zapisz" />
  9. <br />
  10. <br />
  11. </form>';
  12. $plik = "baza.txt";
  13. $dana = file($plik);
  14. for ($i=0; $i<count($dana); $i++)
  15. {
  16. list($autor[$i], $tytul[$i] ) = explode("`", $dana[$i]);
  17. $dane =$autor[$i];
  18. if(strstr($dane, $pole1)!==False)
  19. echo "Autor".$autor[$i]."<br />Tytuł:".$tytul[$i]."<br />";
  20. } 
  21. ?>

I sprawa polega na tym, aby sprawdzić czy dany autor istnieje w spisie, a jesli tak to wyrzucić jego nazwisko oraz tytuł ksiażki jaką napisał. A że istnieje możliowść napisania wielu dzieł przez jednego autora to musi przegladać linijke po linijce.
Problem polega na tym, że porownując zmienna $dane nie jest jest porownywana.
I wynik nie jest wyswietlany.

Jestem początkujący w tej tematyce,więc może jakieś sugestie??
Wiem że na Bazach to robiąc byłoby szybciej,ale chcialem sprobować najpierw pracy na plikach.
Hazel
Może jestem dziwny, ale uruchamiam ten Twój kod i wyskakuje mi pusty delimiter przy explode, czyli że znak ` nie może być pierwszym argumentem funkcji rozbijającej...
Krisso
Pierwszym argumentem f rozbijajacej nie jest ` lecz Nazwisko i imię autora, chyba że coś źle zrozumialem.

Ps. dodalem do gornego kody framgent pliku baza.txt
Hazel
Chodzi mi nie o list(), lecz o explode()...
  1. <?php
  2. list($autor[$i], $tytul[$i] ) = explode("`", $dana[$i]);
  3. ?>

wywołanie explode ("`", .... u mnie wypluwa błąd że delimiter (pierwszy argument) jest pusty. Myślę, że w tym tkwi problem.
Zastosuj po prostu inne wyrażenie, według którego będziesz rozbijać wiersze pliki, może być to kropka, przecinek, średnik, cokolwiek, byle nie odwrócony apostrof, jak widać. A drugie co powinieneś zrobić, to włączenie raportowania błędów w php.ini, bo aż dziwne, że coś takiego Ci nie zwraca żadnego komunikatu...
Krisso
Przykro mi ale to nadal nie jest ten problem. Po naciśnięciu przycisku "Szukaj" nadal nic nie otrzymuję.
Może są jakieś inne propozycje?



EDIT:
A oto moja wersja. Jakby ktoś miał jakieś pomysły co do efektywniejszego lub "bardziej eleganckiego" wykonania to chętnie posłucham.


  1. <?php
  2. $pole1 = trim($_POST['pole1']); 
  3. echo '<form action="" method="post">
  4. <center><strong>Szukany Zwrot : </strong>  <center>  
  5. <input type="text" name="pole1" style="width:  130px;" /><br /> <br /> 
  6. <input type="submit" value="Szukaj" />
  7. <br />
  8. <br />
  9. </form>';
  10. $arrFile = file( 'baza.txt' );
  11. for( $i = 0; $i < count( $arrFile ); $i++ )
  12. {
  13. list($autor[$i], $tytul[$i], $wyd[$i],$rw[$i],$isbn[$i],$gat1[$i],$gat2[$i],$opis[$i] ) = explode(".", $arrFile[$i]);
  14. $line = explode( '.', $arrFile[ $i ] ); 
  15. if( eregi( $pole1, $line[1])||eregi( $pole1, $line[0] ) )  
  16. { 
  17. echo "<strong>Autor :</strong>".$autor[$i].
  18. "<br /><strong> Tytuł:</strong>".$tytul[$i].
  19. "<hr />";
  20.  
  21. }
  22.  else { ; }
  23. }
  24. ?>
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.