$_GET['id']

witajcie

w pliku index.php mam krótki kod:

<?php 

// zmienna $id przekazana metoda GET 

$id = $_GET['id']; 

// sprawdzamy czy zmienna $id nie jest pusta 

if(!empty($id)) { 

// sprawdzamy czy plik o danej nazwie (php) oraz dopuszczalnych znakach (litera/cyfra oraz -/_) istnieje 

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 '1.php'; 

?>

a linki tak zrobione: Home itd…

niestety nie działają mi linki po nacisnieciu kolejnych linków wczytuje mi zawsze 404.php. na serwerze są odpiwednio 1.php, 2.php itd…

wie ktos dlaczego?

Zamiast + daj * tzn.

'|^[[:alpha:]-/_]*$|'

ps. W warażeniach warunkowych

nie dziala jeszcze.

zauważylem ze jesli id= jest cyfrą to linki nie działają, a jesli po id= jest słowem (np home) to działa.

czyli dobrze zauważyles Puma ze tu gdzies jest błąd:

if( (file_exists("$id.php")) && (preg_match('|^[[:alpha:]-/_]+$|', $id)) ) include "$id.php";

ps. niestety musze miec id z liczbami tez :frowning:

'|^[a-zA-Z0-9-/_]+$|'

jeżeli same cyfry i litery to

'|^[a-zA-Z0-9]+$|'

To co podałem działa bo sprawdziłem.

<?php

 // zmienna $id przekazana metoda GET

 $id = $_GET['id'];

 // sprawdzamy czy zmienna $id nie jest pusta

 if(!empty($id)) {

 // sprawdzamy czy plik o danej nazwie (php) oraz dopuszczalnych znakach (litera/cyfra oraz -) istnieje

 if( (file_exists("$id.php")) && (preg_match('|^[[:alnum:]-/_]*$|', $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';

?>

_Puma_ , podałeś i testujesz dwa zupełnie różne wyrażenia, pomiędzy [:alnum:], a [:alpha:] jest ogromna różnica, również dopasowywanie z * nie jest moim zdaniem w tym wypadku bezpieczne, gdyż dopasowuje też 0 ‘trafień’ co w tym wypadku mija się z celem

Myli mi się to alnum z alpha :wink: co do * to masz rację.

nadal nie dziala, jakies fatum czy co?

działa id typu tekst ale juz np home1, home2 (czyli doszła cyfra) nie działa.

tak, to działa juz: ‘|^[[:alnum:]-/_]*$|’

Zapoznaj się proszę z tą stroną i zmień tytuł na

konkretny. Inaczej temat poleci do śmietnika.

problem rozwiazany, mozena zamknąć, dziekuje za pomoc