Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Problem z tablicami
sytluk
post 1.08.2006, 11:17:54
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 3
Dołączył: 1.08.2006

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
Kosmi
post 1.08.2006, 11:30:58
Post #2





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post
sytluk
post 1.08.2006, 12:11:08
Post #3





Grupa: Zarejestrowani
Postów: 73
Pomógł: 3
Dołączył: 1.08.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Kosmi
post 1.08.2006, 12:15:42
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post
sytluk
post 1.08.2006, 19:07:51
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 3
Dołączył: 1.08.2006

Ostrzeżenie: (0%)
-----


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 to the top of the page
+Quote Post
-Gość-
post 1.08.2006, 20:43:14
Post #6





Goście







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
Go to the top of the page
+Quote Post
sytluk
post 2.08.2006, 10:16:00
Post #7





Grupa: Zarejestrowani
Postów: 73
Pomógł: 3
Dołączył: 1.08.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 2.08.2006, 10:22:00
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kosmi
post 2.08.2006, 10:37:00
Post #9





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:53