Stronę podzieliłem na trzy kolumny. Z lewej i prawej są odnośniki do treści, która pokazuje się w środku. Wykorzystuję taki skrypt:
i tu wszystko działa. Nie wiem, co zrobić, jak podlinkować, aby z tej środkowej kolumny (gdzie jest zasadnicza treść) można było przechodzić na inne podstrony. Bo format taki, jak powyżej nie działa, tzn. wyświetla się informacja o złym adresie strony.
| <?php $id = $_GET[‘id’]; if(!empty($id)) { if( (file_exists("$id.php")) && (preg_match(’|^[[:alpha:]-]+$|’, $id)) ) include “$id.php”; // jezeli plik nie istnieje wyswietla się komunikat else include ‘404.php’; } // jezeli zmienna $id jest pusta wyswietla się strona glowna else include ‘start.php’; ?> |
Może dokładniej bo nie wiem, czy błąd jest dlatego, że nie ma odpowiedniego pliku, czy dlatego że link jest źle wygenerowany (źle przekazana zmienna w adresie, lub złe odczytanie zmiennej z adresu)?
Ale tak czy inaczej to w ogóle masz zły pomysł Jeżeli robisz coś takiego:
include "$id.php"
to musisz przefiltrować zmienną $id trochę dokładniej, niż tylko pozbywając się kilu nieporządnych w nazwie pliku znaków. Takie beztroskie inlude może skończyć się tym, że w zmienną $id użytkownik podstawi adres pliku, którego nie powinien zobaczyć, a Twój skrypt to wyświetli. Listę kategorii (home, forum, galeria itp itd) masz zapewne zdefiniowane od początku, więc nazwę pliku możesz sprawdzić switch’em:
switch htmlspecialchars($id) {
case "forum":
include "forum.php"
break;
case "cokolwiek":
include "cokolwiek.php"
break;
default:
include "start.php"
break
}
tyle tylko, że zajmuje to trochę miejsca w kodzie. Możesz też zdefiniować (albo załadować z bazy danych) do tablicy listę kategorii i zweryfikować przesłaną zmienną tak:
$kategorie=array("forum", "cokolwiek");
if in_array($id, $kategorie) {
include "$id.php"
}else{
include "start.php"
}
A zmienną, w której będziesz miał id konkretnego artykułu, obrazka czy czegośtam sprawdzisz tylko funkcją is_numeric(); i wszystko gra
Najlepszym rozwiązaniem jest jednak chyba mod_rewrite - bezpieczna, czytelna, przyjazna dla przeglądarek i użytkownika metoda na linkowanie poszczególnych kategorii Ale o tym nie będę się rozpisywał - oddaję głos wujkowi Google
Wyświetlany błąd ma treść: page not found. Jestem początkujący w php, nie jestem pewien, czy w odpowiednie miejsce wpisałem treść tamtego kodu ze switchem:
| <?php $id = $_GET[‘id’]; if(!empty($id)) { if( (file_exists("$id.php")) && (preg_match(’|^[[:alpha:]-]+$|’, $id)) ) include “$id.php”; switch htmlspecialchars($id) { case “kluby”: include “kluby.php” break; case “kalendarium”: include “kalendarium.php” break; default: include “start.php” break } // jezeli plik nie istnieje wyswietla się komunikat else include ‘404.php’; } // jezeli zmienna $id jest pusta wyswietla się strona glowna else include ‘start.php’; ?> |
[/code]
Lista kategorii rzeczywiście jest skonfigurowana powyżej.
Konkretnie chcę osiągnąć coś takiego: w liście kategorii wybieram opcję KWIATY i wówczas w środkowej kolumnie wyświetla mi się lista np. RÓŻE, FIOŁKI, TULIPANY itp. Jak zrobić, żeby można po kliknięciu na FIOŁKI przejść do kolejnej podstrony z opisem tego rodzaju kwiatów? Opcja stosowana przeze mnie index.php?id=fiolki jako link nie działa. Oczywiście, jak w adresie strony wpiszę pełną ścieżkę dostępu do tego pliku fiolki.php, to się wyświetli, ale wówczas jest “goły”, nie ma menu i pozostałych dwóch bocznych kolumn.
Czy plik “fiolki.php” znajduje się w tym samym katalogu co plik “index.php” ?
Tak jak wspomniał l ight_neon spróbuj użyć is_numeric($id) lub is_string($id) - w zależności jakiego typu jest $id i powinno działać lepiej, dopiero po tym zastosuj wyrażenia regularne.
mariuseq , nazwij proszę temat konkretnie, bez zbędnych problemów w tytule. Inaczej wyciągnę konsekwencje. Przeczytaj ten temat. viewtopic.php?f=16&t=394978
Temat zmieniłem na polecenie moderatora, mam nadzieję, że teraz jest bardziej czytelny. Przepraszam za zamieszanie.
Udało mi się samodzielnie rozwiązać problem, który zgłaszałem w nocy. Błąd wynikał z mojej nieuwagi i był następujący: otóż w środkowej kolumnie było zamiast
Teraz wszystko funkcjonuje tak, jak bym sobie tego życzył, a zatem problem rozwiązany!
Zaintrygowało mnie jednak to, co pisał w nocy l ight_neon. Jak mogę sprawdzić, czy polecenie switch działa poprawnie? I czy ktoś mógłby zerknąć w ten kod i stwierdzić, czy jest poprawny?