• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Plik txt dodaje 2 znaki do słowa w każdej linijce.

Object Storage Arubacloud
+1 głos
126 wizyt
pytanie zadane 30 lipca 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
zamknięte 1 sierpnia 2020 przez Bakkit

Witam.

Na stronie www mam inputa oraz plik .txt. Plik txt wygląda tak:

nick: ranga

- takich linii jest parę. W skrypcie aplikacji napisałem sobie proste wyszukiwanie dzięki wartości inputa, w skrócie: wpisuje w inputa nick gracza, a dzięki temu wyskoczy jego ranga. I to działa.

Natomiast jeszcze mi jest potrzebna druga metoda wyszukiwania: wpisuje w inputa rangę i wyświetlą mi się wszyscy gracze z daną rangą. Niestety o dziwo skrypt pokazywał błąd "taka ranga nie istnieje". Więc sprawdziłem wartość zmiennej z inputa i zmiennej pochodzącej z .txt ( które powinny być takie same ) funkcją var_dump() i co mnie dziwi zmienna pochodząca z .txt ma zawsze 2 znaki więcej.

Czyżby to był znak końca linii? Proszę o pomoc! Poniżej kod, z którego korzystam:

 

<?php
    $ranga = $_POST['ranga'];
    $file = "file.txt";
    $fh = fopen($file, 'r');
    $data = fread($fh, filesize($file));
    $assoc_array = array();
    $my_array = explode("\n", $data);
    $users = array();
    $array = array();

    foreach (file($file) as $line) {
        list($key, $value) = explode(' ', $line, 2) + array(NULL, NULL);
        if ($value !== NULL) {
            var_dump($ranga);
            var_dump($value);
            if ($value == $ranga) {
                $much = count($users) + 1;
                $users[$much] = $key;
            }
            if (count($users) == 0) {
                $error = "Nie wykryto rangi $ranga w bazie danych!";
            }
        }
    }
    fclose($fh);

 

komentarz zamknięcia: Rozwiązanie problemu.

1 odpowiedź

+1 głos
odpowiedź 31 lipca 2020 przez VBService Ekspert (253,280 p.)
wybrane 1 sierpnia 2020 przez Bakkit
 
Najlepsza

Czyżby to był znak końca linii?

Dokładnie tak, w pewnym sensie sam znalazłeś odpowiedź, spowodowane to jest tym, że użyłeś funkcji file php nie do końca świadomie:


taki zapis powinien pomóc:

foreach (file($file, FILE_IGNORE_NEW_LINES) as $line)

 

1
komentarz 31 lipca 2020 przez VBService Ekspert (253,280 p.)
edycja 31 lipca 2020 przez VBService

Nie mam wglądu do całości kodu, ale ten co widać, wydaje mi się, że można skrócić: wink

<?php
    $ranga = trim($_POST['ranga']);
    $file = "file.txt";
 
    $lines = file($file, FILE_IGNORE_NEW_LINES);
    foreach ($lines as $line) {
        list($key, $value) = explode(' ', $line, 2) + array(NULL, NULL);
        if ($value !== NULL) {
           var_dump($ranga);
           var_dump($value);
           if ($value == $ranga) {
              $users[] = $key; // auto "inkrementacja" indeksu
           }            
        }
    }
    
    // var_dump($users); // test
    if (count($users) == 0) {
       $error = "Nie wykryto rangi $ranga w bazie danych!";
    }

[ file ] [ trim ]

1
komentarz 1 sierpnia 2020 przez Bakkit Dyskutant (7,600 p.)

To jest praktycznie cały kod odpowiadający za tą funkcję. Co mnie zaskoczyło, to że gdy zamieniłem swoją linijkę na:

foreach (file($file, FILE_IGNORE_NEW_LINES) as $line)

to dalej nie znajdywałem takiej rangi, ale gdy już zamieniłem kod na Twoją skróconą wersję to funkcja działała :D. Ale już nie mam głowy do sprawdzania co tam było nie tak.

Dzięki wielkie !

Podobne pytania

0 głosów
1 odpowiedź 897 wizyt
pytanie zadane 21 grudnia 2020 w C i C++ przez wodzu_37 Nowicjusz (160 p.)
0 głosów
3 odpowiedzi 446 wizyt
pytanie zadane 23 grudnia 2019 w C i C++ przez BezBarwny Użytkownik (700 p.)
0 głosów
2 odpowiedzi 359 wizyt
pytanie zadane 22 lipca 2015 w PHP przez DL TD Nałogowiec (36,710 p.)

92,567 zapytań

141,420 odpowiedzi

319,616 komentarzy

61,953 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...