Arhimenrius
15.01.2013, 20:41:21
Więc. Mam takowy problem, że mam zadeklarowany kontroler, że jeżeli jakiś $_GET jest, to coś ma robić.
No ale jak sprawić, by coś robił, gdy nie ma jakiegokolwiek $_GET?, tzn. jest czyste nazwastrony.pl a nie nazwastrony.pl/?zapytanie=wartosc.
Nie wiem czy dobrze rozumiem, chcesz sprawdzić czy ktoś kto wszedł na stronę www.aaa.pl np. edytował jakiś wiersz czy dowolnie inną wartość. W tedy adres strony będzie np. www.aaa.pl?edytuj=tak
Ja bym to zrobił tak. Przy wejściu na stronę zarejestruj w sesji adres strony zmienna $url_strony
$url_strony = $_SERVER['SCRIPT_NAME'].$_SERVER['QUERY_STRING'];
$sesja_odwiedzonyurl=$url_strony;
Następnie porównaj sobie sesję z bierzącą zmienną
$url_strony i będziesz wiedział czy coś ktoś klikał na stronie i czy zmienił się adres.
Arhimenrius
15.01.2013, 21:29:17
chodzi o to, że jak nie ma żadnego zapytania GET, to ma wyświetlić zawartość jednego pliku, aczkolwiek jeżeli już jest $_GET['page'], to wyświetla inne pliki.
pokaż kawałek kodu co masz zrobione, będzie łatwiej
Arhimenrius
15.01.2013, 21:39:31
<!-- box na tekst po prawej -->
<div class="menu_rigth_box">
<!-- Wyświetlanie całych kategorii -->
<? if($_GET['cat'] || $_SERVER['REQUEST_METHOD'] !='GET')
{
echo '<h2>'.$category_title.'</h2>'; //artykuł
for($i=0;$i<count($article);$i++)
{
?>
<div class="menu_right_name">
<div id="name">
<span class="title"><a href="#">
<? echo $article[$i]['article_title']; ?></a></span><span class="category"><a href="#">
<? echo $article[$i]['article_category']; ?></a></span><span class="date">
<? echo $article[$i]['article_date']; ?></span>
</div>
</div>
<div class="menu_right_center">
<div id="page">
<?
if($error != '')
echo '<h3>'.$error.'</h3>'; else
echo $article[$i]['article_article']; ?>
</div>
</div>
<div class="menu_right_bottom">
</div>
<?
}
}
//Wyświetlanie pojedyńczych stron
elseif($_GET['pag'])
{
?>
<div class="menu_right_name">
<div id="name">
<span class="title"><a href="#">
<? echo $page_title; ?></a></span></span>
</div>
</div>
<div class="menu_right_center">
<div id="page">
<?
if($error != '')
echo '<h3>'.$error.'</h3>'; else
</div>
</div>
<div class="menu_right_bottom">
</div>
<?
}
?>
<!-- koniec artykułu -->
</div>
<br class="clear">
</div>
</div>
i potem controller_page.php
if($_GET['pag'])
{
if(@!include_once 'cache/pag'.$_GET['pag'].'.php')
{
$error = '404 - Nie ma takiej strony';
}
}
elseif($_GET['cat'])
{
if(@!include_once 'cache/cat'.$_GET['cat'].'.php')
{
$error = '404 - Nie ma takiej strony';
}
}
elseif( $_SERVER['REQUEST_METHOD'] !='GET')
{
@include_once 'cache/articles.php';
}
Pliki z zapytania cat i z articles.php mają podobną budowę, więc działają tak samo.
markonix
15.01.2013, 22:13:39
Sprawdzić czy ten $_GET jest utworzony.
Arhimenrius
15.01.2013, 22:14:59
próbowałem isset... aczkolwiek wtedy dawało true nawet jak było utworzone, ale nei 'cat' i nie 'pag'
markonix
15.01.2013, 22:21:37
Isset daje true jeśli utworzone więc to prawidłowe zachowanie.
Arhimenrius
15.01.2013, 22:28:43
Fu. miało być jak jest nieutworzone. Tj. Poprawienie było jak był tylko nazwastrony.pl, aczkolwiek jak było nazwastrony.pl/?frxrf=frxfxxr to też było true. aczkolwiek jak już było nazwastrony.pl/cat(pag)=wartosc to zwracało false
markonix
15.01.2013, 22:33:29
Pomyśl troszkę, to podstawowa funkcja, którą używa miliony osób, ale Ty akurat uważasz, że ona nie działa..
Isset sprawdza czy zmienna jest utworzona - nie sprawdza czy jest pusta.
Błąd leży w powyższym (tworzysz zmienną np. na podstawie $_GET).
I nie mówiłem o sprawdzaniu samego $_GET tylko konkretnego elementu tej tablicy czyli np. $_GET['pag'].
Arhimenrius
15.01.2013, 22:46:20
Dobra. Wyjaśnię o co mi chodzi w krokach.
-Na chwilę obecną mam 2 elementy $_GET,
cat, odpowiadające za wyświetlanie plików z artykułami z całej kategorii
pag, odpowiadające za wyświetlanie "stron" (ogółem całość wzorowana na WP).
- mam plik articles.php, który ma być wczytywany jeżeli żaden, jakikolwiek $_GET nie jest podany
- jest to spowodowane tym, że będzie się wszystko rozwijało, więc mogą nagle dojść kolejne elementy, a chciałbym uniknąć po prostu dodawania coraz większej ilości ich do warunku.
markonix
16.01.2013, 09:28:49
if (isset($_GET['cat']) && !empty($_GET['cat'])) { // strona kategorii
} else if (isset($_GET['pag']) && !empty($_GET['pag'])) { // konkretna podstrona
} else {
// strona domyślna
}
Poza tym nie wygłuszaj błędów tylko sprawdzaj czy plik istnieje i jeśli nie to wyświetlaj błąd 404.
Arhimenrius
16.01.2013, 11:14:05
if($_GET['cat'] || !$_GET)
Tak ostatecznie miało to wyglądać. A co do 404, specjalnie wyłączyłem obsługę błędów, i tyle sprawdzam, że jeżeli nie może otworzyć pliku, to da 404. Chyba że jakoś inaczej to można zrobić? Bo jak dotąd zawsze robiłem to w ten sposób.
Jeśli wzorowałeś się na WP, to już oznacza że zrobiłeś to źle. Chcesz stworzyć coś na wzór routera i na postawie GET, uruchamiać kontrolery? Solidna dziura bezpieczeństwa. Tym bardziej że GET jest nazwą pliku której nie zabezpieczasz, więc mogę wczytać każdy plik, jaki mi się tylko podoba. I nie sprawdzasz w ogóle czy te pliki istnieją.
if($_GET['cat'] || !$_GET)
Sprawdzsz czy GET['cat'] istnieje, oraz gdy nie ma GET? Bez sensu.
1. pierw sprawdź czy GET istnieje
2. później sprawdz czy istnieje w ogóle jakakolwiek wartość ['cat'] oraz czy nie jest pusta
3. sprawdź czy plik który chcesz wczytać istnieje, oraz to co chcesz wczytać na pewno jest plikiem.
is_exists,
is_file,
isset,
is_emtpy is_string basename
CuteOne
16.01.2013, 12:57:52
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.