Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: parsowanie tekstu
Forum PHP.pl > Forum > Przedszkole
Aklim...
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ź.
mike
  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.
Aklim...
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?
mike
Co to jest 10_cyfr ?
Licza 10-cio cyfrowa?

Podaj fragmanet przykładowego pliku.
Aklim...
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.
mike
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.
Aklim...
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
mike
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.
Aklim...
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.
mike
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. ?>
Aklim...
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
mike
  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. ?>
Balas
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
Aklim...
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
Guest
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
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.