Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z tablicami
Forum PHP.pl > Forum > Przedszkole
sytluk
  1. <?php
  2.  $lines = file('dla_sys.txt');
  3.  
  4.  if (isset($_GET['linki'])) $linki=$_GET['linki']; else $linki=$lines[0];
  5.  
  6.  if (in_array($linki,$lines)) include($linki.'.php');
  7.  else include($lines[0].'.php');
  8. ?>


W tym kodzie jest błąd i nie wiem gdzie i jaki. Ten błąd to:
Cytat
Warning: main(glowna .php): failed to open stream: No such file or directory in c:\usr\krasnal\www\wymagania\sys.php on line 7

Warning: main(): Failed opening 'glowna .php' for inclusion (include_path='.') in c:\usr\krasnal\www\wymagania\sys.php on line 7
Kosmi
Cytat(sytluk @ 1.08.2006, 12:17 ) *
Warning: main(glowna .php): failed to open stream: No such file or directory in c:\usr\krasnal\www\wymagania\sys.php on line 7

Warning: main(): Failed opening 'glowna .php' for inclusion (include_path='.') in c:\usr\krasnal\www\wymagania\sys.php on line 7



glowna .php <-- spacja lub niedozwolony znak (znak końca wiersza) w nazwie, pewnie o to chodzi. Użyj rtrim() do wywalenia znaku końca linii czyli odczytuj tablice jako:

  1. <?php
  2. rtrim($lines[0]);
  3. ?>


Pozdrawiam
sytluk
Niestety dalej nie działa:
  1. <?php
  2.  $lines = file('dla_sys.txt');
  3.  rtrim($lines[0]);
  4.  if (isset($_GET['linki'])) $linki=$_GET['linki']; else $linki=$lines[0];
  5.  
  6.  if (in_array($linki,$lines)) include($linki.'.php');
  7.  else include($lines[0].'.php');
  8. ?>


Wyśiwetla się ten sam błąd
Kosmi
Pisząc "odczytuj tablice jako:" miałem na myśli coś takiego:

  1. <?php
  2. $lines = file('dla_sys.txt');
  3.  
  4.  if (isset($_GET['linki'])) $linki=$_GET['linki']; else $linki=rtrim($lines[0]);
  5.  
  6.  if (in_array($linki,$lines)) include($linki.'.php');
  7.  else include(rtrim($lines[0]).'.php');
  8. ?>


czyli dodanie rtrim tam gdzie faktycznie odczytujesz wartość z tablicy.

Pozdrawiam
sytluk
Dzięki Kosmi. Działa biggrin.gif biggrin.gif biggrin.gif

Skrypt ten działa, lecz czyta tylko pierwszą linię z pliku dla_sys.txt
Przez to wyświetlona może być tylko strona główna. Jak jednak zmienić skrypt, aby czytał wszystkie linie pliku tekstowego? dry.gif dry.gif dry.gif
Gość
Funkcja file() czyta całą zawartośc pliku do tablicy. Możesz to sprawdzić wpisując za linią odczytu pliku czyli
  1. <?php
  2. $lines = file('dla_sys.txt');
  3. ?>
coś takiego:
  1. <?php
  2. print_r($lines);
  3. ?>


Wklej przykładową zawartosć pliku dla_sys.txt żeby było wiadomo o czym mowa.

Pozdrawiam
sytluk
Zgodnie z radą gościa postanowiłem zastosować print_r, wyświetlają się wszystkie tablice z pliku tekstowego, jednak nie wiem, dlaczego działa tylko link strony głównej. Zresztą wynik skryptu można zobaczyć na stronie: www.wymagania.yoyo.pl. Po kliknięciu w którykolwiek link wyświetli się strona główna. Pokażę teraz początkowy skrypt, który działał prawidłowo:
  1. <?php
  2.  $dozwolone=array('glowna','lista','szukaj','kontakt','dodaj_gre','dodaj');
  3.  
  4.  if (isset($_GET['linki'])) $linki=$_GET['linki']; else $linki=$dozwolone[0];
  5.  
  6.  if (in_array($linki,$dozwolone)) include($linki.'.php');
  7.  else include($dozwolone[0].'.php');
  8. ?>


A oto skrypt, który nie wyświetla błędu, lecz nie działa tak, jak powyższy:
  1. <?php
  2. $dozwolone = file('dla_sys.txt');
  3.  
  4.  if (isset($_GET['linki'])) $linki=$_GET['linki']; else $linki=rtrim($dozwolone[0]);
  5.  
  6.  if (in_array($linki,$dozwolone)) include($linki.'.php');
  7.  else include(rtrim($dozwolone[0]).'.php');
  8. ?>


Plik dla_sys.txt zawiera:

Cytat
glowna
lista
szukaj
kontakt
dodaj_gre
dodaj
nospor
in_array($linki,$dozwolone)
Przeciez juz ci wyjasniono, ze $dozwolone zawiera elementy (linki) ze znakiem konca wiersza. No i link, ktory pobierany jest z geta nie zawiera znaku konca wiersza, czyli jest rozny od tych co są w tablicy $dozwolone.

przyklad:
link = jakislink

tablica =
jakislink+znakkoncawiersza
jakislink2+znakkoncawiersza
jakislink3

no i wydawac by sie moglo, ze pierwszy element tablicy jest taki sam jak link, ale tak nie jest spowodu znakukoncawiersza

Musisz wiec albo wszystkie elementy tablicy przeleciec trimem, albo do linku pobieranego z url dodawac znak konca wiersza smile.gif \n lub \r\n
Kosmi
in_array sprawdza wystąpienie dokładnej wartości. Tak jak napisał @nospor i ja pisalem wcześniej w tablicy masz jeszcze znak końca.
dodaj więc może coś takiego:
  1. <?php
  2. function rtrim_array(&$element)
  3. {
  4.  $value = rtrim($element);
  5. }
  6.  
  7. $dozwolone = file('dla_sys.txt');
  8.  
  9. array_walk($dozwolone, 'rtrim_array');
  10.  
  11.  if (isset($_GET['linki'])) $linki=$_GET['linki']; else $linki=$dozwolone[0];
  12.  
  13.  if (in_array($linki,$dozwolone)) include($linki.'.php');
  14.  else include($dozwolone[0].'.php');
  15. ?>


po takim zastosowaniu stosowanie rtrim w dalszych liniach już jest niepotrzebne.

Pozdrawiam
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.