Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP][MySQL]wyswietlanie txt na stronie
Forum PHP.pl > Forum > Przedszkole
m4dmike
Witam,

Czy moglby ktos podowiedziec mi rozwiazanie mojego problemu, nad ktorym glowie sie juz kilka godzin i nie moge nic sensownego wymyslec, mianowicie:
posiadam katalog w ktorym miesci sie, powiedzmy, ok 50000 plikow txt, kazdy plik zawiera wiersz poetycki, nazwa pliku to tytul wiersza lub tytul i tworca,
chcialbym zrobic stronke na ktorej bedzie mozna wyszukac dany wiersz, po nazwie lub tworcy, no i klikajac na tytul tego wiersza wyswietlic zawartosc pliku txt z tym wierszem na stronie.
Jak sie do tego wogole zabrac? ciezko przypisywac 50000 linkow. Jakies pomysly?
darko
Co do tematu ma sql? Chciałbyś te dane jakoś do bazy wprowadzić? W czym tkwi problem?
m4dmike
problem tkwi w tym, ze nie wiem jak zapisac to do bazy w takiej ilosci? chyba nie pojedynczo no i jak potem to wyswietlac na stronie jako liste z odnosnikami do plikow
darko
- pobierasz zawartość całego folderu z plikami
- każdą pobraną nazwę pliku zapisujesz (wraz z treścią pliku) do odpowiedni przygotowanej bazy
- usuwasz pliki
- piszesz formularz wyszukiwania
- piszesz skrypt obsługujący wyszukiwanie
koniec
nekomata
Nudziło mi się wiec napisałem ci szkielet , robisz to na xamppie i tworzysz w htdocs tworzysz folder 'wiersze' i tam wrzucasz pliki txt ,w skrypcie ode mnie zmieniasz tylko dane do bazy danych(tabela tworzy się automatycznie biggrin.gif)
plik : dodaj.php
  1. <?php
  2. #Mysqli
  3. DEFINE('DB_USER','login');
  4. DEFINE('DB_PASSWORD','haslo');
  5. DEFINE('DB_HOST','localhost');
  6. DEFINE('DB_NAME','baza');
  7. //connect
  8. $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
  9. if(!$dbc) {
  10. trigger_error('Nie mozna polaczyc z baza mysql : '.mysqli_connect_error() );
  11. }
  12.  
  13. function masowa_baza($xx){
  14. global $dbc;
  15. $MojFolder = opendir($xx);
  16. while($entryName = readdir($MojFolder)) {
  17. $ListaPlikow[] = $entryName;
  18. }
  19. closedir($MojFolder);
  20. $indexCount = count($ListaPlikow);
  21. sort($ListaPlikow);
  22. for($index=0; $index < $indexCount; $index++) {
  23. if (substr($ListaPlikow[$index], 0, 1) != '.'){
  24. echo '<br/>';
  25. $tytul = str_replace('.txt','',$ListaPlikow[$index]);
  26. $plik = file_get_contents($xx.$ListaPlikow[$index]);
  27. $tytul = mysqli_real_escape_string($dbc,$tytul);
  28. $plik = mysqli_real_escape_string($dbc,$plik);
  29. $test = "SELECT tytul FROM wiersze WHERE tytul='".$tytul."'";
  30. $sprawdzanie = mysqli_query($dbc,$test);
  31. if(mysqli_num_rows($sprawdzanie)<1){
  32. $wstawianie = "INSERT INTO wiersze (tytul,zawartosc) Values ('$tytul','$plik' )";
  33. if(mysqli_query($dbc,$wstawianie)){
  34. echo $tytul.' zostal dodany pomyslnie do bazy danych<br/>';
  35. }
  36. else{
  37. $tytul.' nie mogl zostac dodany do bazy danych.<br/>';
  38. }
  39. }
  40. else {
  41. echo $tytul.' istnieje juz w bazie wiec zostal pominiety.<br/>';
  42. }
  43.  
  44. }
  45. }
  46. }
  47. //Tworzymy baze danych
  48. $tabela = "CREATE TABLE `wiersze` (
  49. `id` smallint(10) NOT NULL AUTO_INCREMENT,
  50. `tytul` varchar(300) COLLATE utf8_polish_ci NOT NULL,
  51. `zawartosc` text COLLATE utf8_polish_ci,
  52. PRIMARY KEY (`id`)
  53. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci";
  54. mysqli_query($dbc,$tabela);
  55. masowa_baza('./wiersze/');
  56. ?>

plik: czytaj.php
  1.  
  2. <?php
  3. #Mysqli
  4. DEFINE('DB_USER','user');
  5. DEFINE('DB_PASSWORD','haslo');
  6. DEFINE('DB_HOST','localhost');
  7. DEFINE('DB_NAME','nazwabazy');
  8. $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
  9. if(!$dbc) {
  10. trigger_error('Nie mozna polaczyc z baza mysql : '.mysqli_connect_error() );
  11. }
  12. // Teraz wyswietlanie
  13.  
  14. if(!isset($_GET['id'])){
  15. echo 'witam w liscie wierszy .<br/>';
  16. $zapytanie = "SELECT id,tytul FROM wiersze";
  17. $odebrane = mysqli_query($dbc,$zapytanie);
  18. while($wiersze = mysqli_fetch_array($odebrane,MYSQLI_ASSOC)){
  19. echo '<a href="czytaj.php?id='.$wiersze['id'].'" >'.$wiersze['tytul'].'</a><br/>';
  20. }
  21. }
  22. else{
  23. $id = mysqli_real_escape_string($dbc,$_GET['id']);
  24. $zapytanie = "SELECT * FROM wiersze WHERE id='$id'";
  25. $odebrane = mysqli_query($dbc,$zapytanie);
  26. while($wiersze = mysqli_fetch_array($odebrane,MYSQLI_ASSOC)){
  27. echo '<h1>'.$wiersze['tytul'].'</h1><br/>'.$wiersze['zawartosc'];
  28. }
  29. }
  30.  
  31. ?>

Napisałem to tylko z ciekawości bo nie pisałem niczego podobnego wcześniej, na stronę to i tak zamalo ale szkielet jest :] , wystarczy ze odpalisz plik dodaj.php i wszystkie pliki txt z folderu 'wiersze' zostaną dodane do bazy.
wNogachSpisz
I co, full text search za każdym razem jak ktoś chce wyszukać tytuł?

Już lepiej podzielić tytuły na słowa,
z każdego słowa zrobić wiersz, gdzie pierwsza kolumna to słowo, druga to ID utworu,
tabele zaindeksować po słowach.

Będzie szybko jak na google smile.gif
m4dmike
ok zrobilem jak napisales i wyswietla sie blad :
Fatal error: Call to undefined function mysqli_connect() in...
dlaczego tam jest mysqli a nie mysql ?

Cytat(wNogachSpisz @ 25.02.2011, 09:35:01 ) *
I co, full text search za każdym razem jak ktoś chce wyszukać tytuł?

Już lepiej podzielić tytuły na słowa,
z każdego słowa zrobić wiersz, gdzie pierwsza kolumna to słowo, druga to ID utworu,
tabele zaindeksować po słowach.

Będzie szybko jak na google smile.gif


jak mam podzielic tytuly na slowa? chodzi o nazwy plikow? jak indeksowac po slowach?
nekomata
mysqli_connect. Mysqli_ jest rozwinięciem mysql. Dostępne dopiero od PHP5 wiec wychodzi na to ze masz jakiś stary serwer postawiony. , ja używam mysqli_ od początku mojej nauki bo jest szybsze od normalnego.
Cóż ta funkcja ode mnie powinna działać bezproblemowo gdy zamieni się mysqli na mysql.Ja patrzyłem tylko na masowe dodawanie jako ze sam się ciągle uczę , a nigdy nie robiłem czegoś takiego wcześniej.Szkielet działania zostaje ten sam.. niech sobie poprawi po prostu i będzie śmigać .

Cytat(m4dmike)
jak mam podzielic tytuly na slowa?

explode , potem count na array i odpowiednie zapytanie pod to.
wNogachSpisz
Cytat(m4dmike @ 25.02.2011, 09:42:49 ) *
jak mam podzielic tytuly na slowa? chodzi o nazwy plikow? jak indeksowac po slowach?


Odpal nowy wątek, to pogadamy..
m4dmike
Cytat(nekomata @ 25.02.2011, 15:07:20 ) *
mysqli_connect. Mysqli_ jest rozwinięciem mysql. Dostępne dopiero od PHP5 wiec wychodzi na to ze masz jakiś stary serwer postawiony. , ja używam mysqli_ od początku mojej nauki bo jest szybsze od normalnego.
Cóż ta funkcja ode mnie powinna działać bezproblemowo gdy zamieni się mysqli na mysql.Ja patrzyłem tylko na masowe dodawanie jako ze sam się ciągle uczę , a nigdy nie robiłem czegoś takiego wcześniej.Szkielet działania zostaje ten sam.. niech sobie poprawi po prostu i będzie śmigać .


explode , potem count na array i odpowiednie zapytanie pod to.


nie działa
nekomata
Bardzo wiele nam to mówi wiesz?Jakieś błędy coś?Szukasz pomocy czy nabijasz posty?Co konkretnie nie działa?Dostałeś i tak więcej kodu niż powinneś i więcej porad niż normalnie się udziela , ale nie daj dłoń to chcą rękę -.- .
m4dmike
nie mam pojecia co jest, wywala mi takie oto błędy:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in D:\WebServ\httpd\portal\dodaj.php on line 56

Warning: opendir(./portal/wiersze/) [function.opendir]: failed to open dir: No error in D:\WebServ\httpd\portal\dodaj.php on line 17

Warning: readdir(): supplied argument is not a valid Directory resource in D:\WebServ\httpd\portal\dodaj.php on line 18

Warning: closedir(): supplied argument is not a valid Directory resource in D:\WebServ\httpd\portal\dodaj.php on line 21

Warning: sort() expects parameter 1 to be array, null given in D:\WebServ\httpd\portal\dodaj.php on line 23
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.