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

Ładowanie pliku tekstowego jako tablicy w PHP

Aruba Cloud - Virtual Private Server VPS
0 głosów
126 wizyt
pytanie zadane 29 stycznia w PHP przez Pawel93 Nowicjusz (120 p.)

Witam wszystkich forumowiczów.
Jestem tutaj nowy jak i uczę się dopiero programowania. Mam problem, chciałbym załadować plik tekstowy do php ale od razu żeby był stworzony jako tablica. Może najpierw pokaże jaki mam kod:
 

<?php

  //utworzenie krótkich nazw zmiennych

 $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

 ?>

 <html>

 <head>

   <title>Części samochodowe Janka - zmówienia klientów</title>

 </head>

 <body><h1>Części samochodowe Janka</h1>

 <h2>Zamówienia klientów</h2>

 <?php

 //Odczytanie całego pliku

 //Każde zamówienie staje się elementem tablicy

 $zamówienia = file("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");

 //obliczanie ilości elementów tablicy

 $ilosc_zamowien = count($zamówienia);

 if ($ilosc_zamowien ==0) {

    echo "<p><strong>Brak zamówień

    Proszę spróbować później</strong></p>";

 }

 

 echo '<table border=\"1\">\n';

 echo "<tr><th bgcolor=\"#CCCCFF\">Data zamówienia</td>

          <th bgcolor=\"#CCCCFF\">Opony</td>

          <th bgcolor=\"#CCCCFF\">Olej</td>

          <th bgcolor=\"#CCCCFF\">Świece zapłonowe</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łącznie 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>";

 ?>        

 </body>

 </html>



a błąd na stronie pojawia się taki:

 

Warning: file(E:\Xampp\htdocs\moje aplikacje/../zamowienia/zamowienia.txt): Failed to open stream: No such file or directory in E:\Xampp\htdocs\moje aplikacje\zobaczmowienia2.php on line 17

Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, false given in E:\Xampp\htdocs\moje aplikacje\zobaczmowienia2.php:19 Stack trace: #0 {main} thrown in E:\Xampp\htdocs\moje aplikacje\zobaczmowienia2.php on line 19

i pytanie z mojej strony jest następujące: Nadałem wszystkie prawa w danym folderze abym mógł ładować pliki odczytywać itp i czy jest może jakaś opcja od strony serwera żeby tak zrobić ? Jeśli nie to ktoś ma pomysł jak to może inaczej obejść? Robię to z książki ,,PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty wydanie IV" autorów Luke Welling Laura Thomson. Dodam że jak bezpośrednio załadowałem z ścieżki w którym mam ten plik to załadowała się tablica ale dane tablicy np linia[1] wyskoczyło mi jako nie zdefiniowany.
Jak mógłbym tutaj z tym poradzić sobie. Prosiłbym kogoś o jakąś radę ponieważ naprawdę zaczynam i nie wiem jak to obejść

 

2 odpowiedzi

+1 głos
odpowiedź 29 stycznia przez wizarddos Nałogowiec (27,550 p.)

2 rzeczy

 

1. Trochę jest tu namieszane w ścieżkach - $DOCUMENTROOT zwraca ci  E:\Xampp\htdocs\moje aplikacje, a swoją ścieżką ( ../zamowienia/zamowienia.txt) wychodzisz do `htdocs` a i szukasz folderu tam - usuń ten path traversal ("../") i zobacz czy zadziała

2. Podmień forwardslashe ("/") na backslashe ("\")

komentarz 29 stycznia przez Pawel93 Nowicjusz (120 p.)
dziękuję, już pomogło ale teraz są kolejne błędy, wrzucę zrzut ekranu może najlepiej by tak było

 

https://ibb.co/mV72R5nW
https://ibb.co/fzsWGZrz

ja to rozumiem że $zamówienie ma wartość zerową czyli nie jest zdefiniowane jako tablica dobrze myślę ?
+1 głos
odpowiedź 30 stycznia przez VBService Ekspert (256,600 p.)
edycja 30 stycznia przez VBService

https://ibb.co/mV72R5nW
https://ibb.co/fzsWGZrz

ja to rozumiem że $zamówienie ma wartość zerową czyli nie jest zdefiniowane jako tablica dobrze myślę ?

masz literówkę w nazwie zmiennej

$zamówienia = file(...);

później używasz

$linia = explode( "\t", $zamowienia[$i]);

 

BTW, jeżeli masz układ plików np. taki

możesz użyć względnej ścieżki (użycie względnej ścieżki ma swoje wady i zalety)

$zamowienia = file('./zamowienia/zamowienia.txt');
var_dump($zamowienia);

możesz też użyć tzw. stałej magicznej z php, w tym przypadku __DIR__

  $zamowienia = file(__DIR__.'/zamowienia/zamowienia.txt');
  var_dump($zamowienia);

 

3
komentarz 30 stycznia przez Pawel93 Nowicjusz (120 p.)
edycja 30 stycznia przez Pawel93
Dziękuję  panom, jak by była możliwość to zaprosił bym na kawę z ciastkiem :)
Niestety, zaczynam i na razie wychodzą głupoty w stylu literówki albo problemy z różnicy php bo książkę mam chyba od 5xx a tera jest 8xx. Wszystko już działa jak należy.
Dziękuję jeszcze raz za poświęcony czas i pomoc

Podobne pytania

0 głosów
2 odpowiedzi 317 wizyt
0 głosów
1 odpowiedź 247 wizyt
+1 głos
2 odpowiedzi 3,011 wizyt

93,335 zapytań

142,331 odpowiedzi

322,415 komentarzy

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...