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

question-closed Problem z wyświetlaniem zamówienia w pliku *.txt (PHP)

Cloud VPS
0 głosów
860 wizyt
pytanie zadane 22 lipca 2015 w PHP przez DL TD Nałogowiec (36,710 p.)
zamknięte 22 lipca 2015 przez DL TD

Mam taki problem. Robię włąśnie kolejny przykład z książki. Chcę wyświetlić zawartość pliku *.txt w tabeli. Mam jednak mały problem :(

Siedzę nad tym problemem 2h i nadal nie znalazłem sensownego rozwiązania. Zamówienie zapisuje się bez problemu, ale odczyt zapisany w ten sposób już nie.:

<meta charset="utf-8">

<?php
  //Odczytanie całego pliku
  //Każde zamówienie staje się elementem tablicy
  $zamowienia = file("zamowienia.txt");
  //Obliczanie ilości elementów tablicy
  $ilosc_zamowien = count($zamowienia);
  if ($ilosc_zamowien == 0) {
    echo "<p><strong>Brak zamówień. Proszę spróbować później.</strong></p>";
  }
  echo '<table border="1">';
  echo '<tr><th bgcolor="#CCCCFF">Data zamówienia</td>
            <th bgcolor="#CCCCFF">Opony</td>
            <th bgcolor="#CCCCFF">Olej</td>
            <th bgcolor="#CCCCFF">Świece</td>
            <th bgcolor="#CCCCFF">Suma</td>
            <th bgcolor="#CCCCFF">Adres</td></tr>';

  for ($i=0; $i<$ilosc_zamowien; $i++) {
    //Rozbicie każdej linii
    $linia = explode("\t".$zamowienia[$i]);

    //Zapamiętanie wyłączenie ilości zamówionych produktów
    $linia[1] = intval($linia[1]);
    $linia[2] = intval($linia[2]);
    $linia[3] = intval($linia[3]);

    //Wyświetlenie każdego zamówienia
    echo "  <tr>
              <td>$linia[0]</td>
              <td align=\"right\">".$linia[1]."</td>
              <td align=\"right\">".$linia[2]."</td>
              <td align=\"right\">".$linia[3]."</td>
              <td align=\"right\">".$linia[4]."</td>
              <td>".$linia[5]."</td>
            </tr>";
  }

  echo '</table>';
?>

Resztę kodu (całą stronę) zamieszczam tutaj -> https://mega.co.nz/#!VpwCxCZb!SPBkuQTj0-HbJKdQGBDZ5zZv96Os-a7kLgUGuk1D5Ik

komentarz zamknięcia: Problem rozwiązany.

2 odpowiedzi

+2 głosów
odpowiedź 22 lipca 2015 przez Comandeer Guru (607,100 p.)
wybrane 22 lipca 2015 przez DL TD
 
Najlepsza
A od kiedy parametry w funkcji rozdziela się kropką, nie przecinkiem (linia 22)?
komentarz 22 lipca 2015 przez DL TD Nałogowiec (36,710 p.)
o jaaa, taki błąd (już sprawdzam rezultat po zmianie)
komentarz 22 lipca 2015 przez DL TD Nałogowiec (36,710 p.)

Działa miszczu, hehe :)

0 głosów
odpowiedź 22 lipca 2015 przez Magicone Nałogowiec (45,100 p.)
Rozbicie linii to nie \t ale \n. Btw. zapoznaj się z funkcją file_get_contents :)
count($zamowienia); -> count to metoda do otrzymywania długości tablicy, $zamowienia to string.
 

EDIT: przy okazji poczytaj w manualu o funkcjach explode/implode i o tym, jakie parametry przyjmują :D
komentarz 22 lipca 2015 przez DL TD Nałogowiec (36,710 p.)
niestety zmiana \t na \n nic nie daje :/
komentarz 22 lipca 2015 przez Comandeer Guru (607,100 p.)

@Magicone zauważ, że chodzi o rozbicie JEDNEJ linii, nie WIELU linii. Plik na poszczególne linie jest już rozbity dzięki wywołaniu file (stąd tutaj file_get_contents się niekoniecznie sprawdzi), natomiast w jednej linii dane są przedzielone właśnie tabulatorem.

komentarz 22 lipca 2015 przez Magicone Nałogowiec (45,100 p.)
1. file_get_contents('zamowienia.txt');

2. explode("\n", $zamowienia);

3. $ile_zamowien = count($zamowienia);

4. Zamiast intval($int) użyj (int)$int
komentarz 22 lipca 2015 przez Comandeer Guru (607,100 p.)

file zwraca tablicę, w której element = wiersz z pliku tekstowego, więc tutaj bym raczej omijał file_get_contents.

BTW czemu zamiast intval polecasz (int)?

komentarz 22 lipca 2015 przez Magicone Nałogowiec (45,100 p.)
W jakimś kursie do optymalizacji php to wyczytałem, rzekomo (int) jest szybszy od intval. Poza tym mam przyzwyczajenie z c++. Co do file - masz rację, dotąd nigdy się z nim nie spotkałem.
komentarz 22 lipca 2015 przez Comandeer Guru (607,100 p.)
Hmm… Pewnie tak, bo konstrukcja języka powinna być szybsza niż odpalenie funkcji. Ja jakoś bardziej ufam funkcjom ;)
komentarz 22 lipca 2015 przez efiku Szeryf (75,160 p.)
komentarz 22 lipca 2015 przez Magicone Nałogowiec (45,100 p.)
zmienna zmiennej nie równa :D
komentarz 22 lipca 2015 przez Comandeer Guru (607,100 p.)
http://ideone.com/RBtKkx  → jakoś do mnie ten "kompilator" bardziej przemawia
komentarz 22 lipca 2015 przez Boshi VIP (100,240 p.)
@Comandeer,  siłąc się, to przez file_get też się da to wykonać, dwie pętle foreach, jedna leci  i dzieli na wiersze a druga te wiersze  dzieli na tabulatory. Na jedno wyjdzie. Choć  nie wydaje się logicznym dzielić stringa na wiersze kiedy może to zrobić gotowa funkcja file.
komentarz 22 lipca 2015 przez Comandeer Guru (607,100 p.)

@Boshi po co Ci dwie pętle? Starczy jedna, bo na wiersze podzielisz przez explode

komentarz 22 lipca 2015 przez Boshi VIP (100,240 p.)
W sumie  racja.  2x explode wystarczy.

Podobne pytania

0 głosów
2 odpowiedzi 1,192 wizyt
pytanie zadane 26 maja 2015 w PHP przez TomWaw.IT Użytkownik (920 p.)
0 głosów
3 odpowiedzi 456 wizyt
pytanie zadane 5 października 2015 w C i C++ przez Куба Янчевски Początkujący (390 p.)
0 głosów
1 odpowiedź 908 wizyt
pytanie zadane 14 września 2018 w Java przez Moras Obywatel (1,620 p.)

93,488 zapytań

142,422 odpowiedzi

322,772 komentarzy

62,906 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

Kursy INF.02 i INF.03
...