Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> parsowanie tekstu
Aklim...
post 10.01.2006, 00:05:31
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 6.07.2005

Ostrzeżenie: (0%)
-----


Witam,

mam plik tekstowy uzytkownicy.txt w postaci:
Kod
ip|10_cyfr|nazwa_usera1
ip|10_cyfr|niezalogowany
ip|10_cyfr|nazwa_usera2


chcialbym parsowac ten tekst tak by w zmiennej $zalogowanych znalazla sie ilosc userow zalogowanych (to są Ci, którzy _nie_ mają _niezalogowany_ w pliku tekstowym)
Sądzę, że trzeba to zrobić wykorzystując funkcję expolde() oraz robiąc pętle.
Nie wiem jednak jak to w sumie napisać, a niestać mnie na programistę php co zrobi stronę naszego klubu, więc sam się za to biorę.
Liczę na Waszą pomoc w tym poszczególnym elemencie już całkiem dobrze trzymającej się całości, którą z trudem i nieocenioną pomocą innych jakoś tworzę [o ile można to tak nazwać snitch.gif ] smile.gif

Pozdrawiam i proszę o odpowiedź.
Go to the top of the page
+Quote Post
mike
post 10.01.2006, 00:21:49
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. $arrFile = file( 'uzytkownicy.txt' );
  4.  
  5. $intCounter = 0;
  6.  
  7. if( count( $arrFile ) > 0 )
  8. {
  9. foreach( $arrFile as $arrValue )
  10. {
  11. if( $arrValue[ 2 ] == 'niezalogowany' )
  12. {
  13. $intCounter += (integer)$arrValue[ 1 ];
  14. }
  15. }
  16. }
  17.  
  18. echo $intCounter;
  19.  
  20. ?>


Coś takiego :?:

P.S.
Pisane z palca, mógł się wkraść jakis błąd.
Go to the top of the page
+Quote Post
Aklim...
post 10.01.2006, 00:37:43
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 6.07.2005

Ostrzeżenie: (0%)
-----


Zwraca zero niezależnie czy w uzytkownicy.txt są wpisani użytkownicy niezalogowani ( wpis w postaci
ip|10_cyfr|niezalogowany ) czy teź są zalogowani ( wtedy wpis ma postać ip_usera|10_cyfr|nazwa_usera ).

Co jest źle?
Go to the top of the page
+Quote Post
mike
post 10.01.2006, 00:39:42
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Co to jest 10_cyfr ?
Licza 10-cio cyfrowa?

Podaj fragmanet przykładowego pliku.
Go to the top of the page
+Quote Post
Aklim...
post 10.01.2006, 00:44:12
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 6.07.2005

Ostrzeżenie: (0%)
-----


Kod
83.26.245.87|1136850178|gosc
127.0.0.1|1136850296|aklim


ta liczba to wcześniej zapisany time(), służy mi do czegoś innego.

Ten post edytował Aklim... 10.01.2006, 00:44:56
Go to the top of the page
+Quote Post
mike
post 10.01.2006, 00:48:48
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


1. Ale ze mnie glupek (może to ta pora "dnia"). Mój pierwszy kod działa odwrotnie jak chciałeś. Sprawdza na oklicznośc niezalogowania. I to jeszcze źle działa bo zapomniałem całkowicie o explode() sad.gif
2. To powinno być OK:
  1. <?php
  2.  
  3. $arrFile = file( 'uzytkownicy.txt' );
  4.  
  5. $intCounter = 0;
  6.  
  7. if( count( $arrFile ) > 0 )
  8. {
  9. foreach( $arrFile as $arrRow )
  10. {
  11. $arrValue = explode( '|', $arrRow );
  12. if( $arrValue[ 2 ] != 'niezalogowany' )
  13. {
  14. $intCounter++;
  15. }
  16. }
  17. }
  18.  
  19. echo $intCounter;
  20.  
  21. ?>


BTW: Przenoszę na php Pocz.
Go to the top of the page
+Quote Post
Aklim...
post 10.01.2006, 00:53:37
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 6.07.2005

Ostrzeżenie: (0%)
-----


To działa już prawie jak ma działać smile.gif

Teraz zwracana wartość jest sumą wszystkich użytkowników - zalogowanych i niezalogowanych. Ja chcę sumę użytkowników, którzy są zalogowani (czyli bez niezalogowany w wpisie). Da się takie coś zrobić w php w ogóle? smile.gif
Go to the top of the page
+Quote Post
mike
post 10.01.2006, 00:59:59
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Echhh, szkolny błąd. To znak że już czas iść spać :/

  1. <?php
  2.  
  3. $arrFile = file( 'uzytkownicy.txt' );
  4.  
  5. $intCounter = 0;
  6.  
  7. if( count( $arrFile ) > 0 )
  8. {
  9. foreach( $arrFile as $arrRow )
  10. {
  11. $arrValue = explode( '|', $arrRow );
  12. if( trim( $arrValue[ 2 ] ) !== 'niezalogowany' )
  13. {
  14. $intCounter++;
  15. }
  16. }
  17. }
  18.  
  19. echo $intCounter;
  20.  
  21. ?>


Za pomocą trim() trzeba się pozbyć znaków niewidocznych, takich jak enter na końcu linii, bo zaburza on sprawdzanie warunku.
Go to the top of the page
+Quote Post
Aklim...
post 10.01.2006, 01:04:56
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 6.07.2005

Ostrzeżenie: (0%)
-----


Ekstra :]
Jesteś super pomocny człowiek smile.gif
Bo działa!
Teraz tylko... mam już wszystkich uzytkownikow, zalogowanych, niezalogowanych, najnowszego smile.gif
Teraz pozostalo mi wyswietlac nazwy uzytkownikow, ktorzy są zalogowani. Ale nad tym to już sam pomyślę, a jak będę miał problem to napiszę smile.gif

Pozdrawiam.
Go to the top of the page
+Quote Post
mike
post 10.01.2006, 01:14:21
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(Aklim... @ 2006-01-10 01:04:56)
Teraz pozostalo mi wyswietlac nazwy uzytkownikow, ktorzy są zalogowani.

  1. <?php
  2.  
  3. $arrFile = file( 'uzytkownicy.txt' );
  4.  
  5. $arrOnLineUsers = array();
  6.  
  7. if( count( $arrFile ) > 0 )
  8. {
  9.  
  10. foreach( $arrFile as $arrRow )
  11. {
  12. $arrValue = explode( '|', $arrRow );
  13. if( trim( $arrValue[ 2 ] ) !== 'niezalogowany' )
  14. {
  15. $arrOnLineUsers[] = $arrValue[ 2 ];
  16. }
  17. }
  18.  
  19. $intOnLineUsers = count( $arrOnLineUsers );
  20. if( $intOnLineUsers > 0 )
  21. {
  22. echo 'Zalogowanych: ' . $intOnLineUsers . "<br/>n";
  23. echo 'Są to: ' . implode( ', ', $arrOnLineUsers );
  24. }
  25. }
  26.  
  27. ?>
Go to the top of the page
+Quote Post
Aklim...
post 10.01.2006, 19:42:06
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 6.07.2005

Ostrzeżenie: (0%)
-----


Wielkie dzięki smile.gif Mam jeszcze jedno pytanie.
Chciałbym, aby po kliknięciu na nazwę użytkownika włączał się jego profil.
Link do profilu ma postać:
Kod
index.php?miejsce=profil&id_uzytkownika=X

gdzie X jest id_uzytkownika, ktore pobieram z bazy na podstawie nazwy uzytkownika takim zapytaniem:
  1. SELECT `nazwa_uzytkownika`, `id_uzytkownika`
  2. FROM `uzytkownicy` WHERE `nazwa_uzytkownika` = \'' . $nazwa_uzytkownika_z_pliku_tekstowego . ''

Jak to można w miarę wydajnie wpleść w ten kod, tak by nazwa zalogowanego użytkownika była linkiem z odpowiednim ID do jego profilu? smile.gif

Ten post edytował Aklim... 10.01.2006, 19:43:39
Go to the top of the page
+Quote Post
mike
post 10.01.2006, 20:10:27
Post #12





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. $strNick = 'mike_mech'; //  ;-)
  4.  
  5. $strQuery = 'SELECT nazwa_uzytkownika, id_uzytkownika FROM uzytkownicy WHERE nazwa_uzytkownik
    a = "'
    .$strNick.'"';
  6. $resQueryResult = mysql_query( $strQuery );
  7.  
  8. if( mysql_num_rows( $resQueryResult ) > 0 )
  9. {
  10. $arrRow = mysql_fetch_array( $resQueryResult );
  11.  
  12. echo '<a href="index.php?miejsce=profil&amp;id_uzytkownika='.$arrRow[ 'id_uzytkownika' ].'">'.$arrRow[ 'nazwa_uzytkownika' ].'</a>';
  13. }
  14.  
  15. ?>
Go to the top of the page
+Quote Post
Balas
post 10.01.2006, 20:18:42
Post #13





Grupa: Zarejestrowani
Postów: 347
Pomógł: 0
Dołączył: 27.08.2005
Skąd: Inowrocław

Ostrzeżenie: (0%)
-----


Mam takie pytanie:
Jezeli uzywasz MYSQL'a to czemu uzywasz jeszcze pliku uzytkownicy.txt questionmark.gif latwiej by to bylo zrobic tylko na MYSQL'u, chyba ze na prawde zalezy ci na pliku txt winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Aklim...
post 10.01.2006, 20:31:16
Post #14





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 6.07.2005

Ostrzeżenie: (0%)
-----


Cytat(mike_mech @ 2006-01-10 19:10:27)
  1. <?php
  2.  
  3. $strNick = 'mike_mech'; //  ;-)
  4.  
  5. $strQuery = 'SELECT nazwa_uzytkownika, id_uzytkownika FROM uzytkownicy WHERE nazwa_uzytkownik
    a = "'
    .$strNick.'"';
  6. $resQueryResult = mysql_query( $strQuery );
  7.  
  8. if( mysql_num_rows( $resQueryResult ) > 0 )
  9. {
  10. $arrRow = mysql_fetch_array( $resQueryResult );
  11.  
  12. echo '<a href="index.php?miejsce=profil&amp;id_uzytkownika='.$arrRow[ 'id_uzytkownika' ].'">'.$arrRow[ 'nazwa_uzytkownika' ].'</a>';
  13. }
  14.  
  15. ?>

no nie do końca o to chodzi smile.gif
tzn. takie zapytanie skonstruwać umiem, ale ja nie wiem jak to wpleść do kodu, który wcześniej podałeś tak by np. wynikiem było:
Kod
Zalogowanych: 3<br/>
Są to:
<a href="index.php?miejsce=profil&amp;id_uzytkownika=1" title="Aklim">Aklim</a>,
<a href="index.php?miejsce=profil&amp;id_uzytkownika=5" title="Zenek">Zenek</a>,
<a href="index.php?miejsce=profil&amp;id_uzytkownika=7" title="Stefan">Stefan</a>


teraz rozumiesz o co mi chodzi? smile.gif te nazwy userów z pliku uzytkownicy.txt poza tym, że są wyświetlane mają posłużyć do odnalezienia swoich, odpowiednich ID w bazie. Da się tak? smile.gif
Go to the top of the page
+Quote Post
-Guest-
post 10.01.2006, 22:37:11
Post #15





Goście







ok. Problem rozwiązany.
wystarczyło dać trim() dla $strUser, żeby ta zmienna wreszcie zaczęła funkcjonować w zapytaniu SQL tam gdzie dawałem where nazwa_uzytkownika = $strUser smile.gif

Pozdrawiam i dzięki za pomoc smile.gif smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 20:52