Michass utworzono 30 listopada 2008 utworzono 30 listopada 2008 Na początku zaznaczę iż NIE CHCĘ CMS'ÓW. Moje pytanie: Jak zrobić, by na stronie po kliknięciu na link wyświetlała się inna treść w danym divie, bez robienia żadnych podstron ? Na stronie kolegi: http://www.otworld.pl jak klikniecie na 'Wymiana bannerami' czy 'Status checker', zauważycie iż to jest ta sama strona, zmienia się tylko zapytanie w adresie 'index.php?body=cośtam' Ja chcę tak samo. Jak to zrobić ? Dlaczego? Tworzę "obfitą stronę", nie zamierzam edytować 20 podstron, by wyglądały jak Strona główna (po jakiejś edycji). Powtarzam: Nie proponujcie CMS. Pozdrawiam i czekam na wypowiedzi mam nadzieję pozytywne i pomocne , Michał //Edit: Może być coś takiego, że dany artykuł pisze w pliku "artykul1.php" a po kliknięciu na link serwer otrzymuje informacje: "w divie "aktualności" wyświetl mi zawartość jaka jest w pliku "artykyl1.php".
luq komentarz 30 listopada 2008 komentarz 30 listopada 2008 Co do sposobu podstron w oparciu na tablicy superglobalnej $_GET, jest to dziecinnie proste. Nie radziłbym Ci pisać tak jak Twój kolega, tzn. podawać przez GET`a nazwy plików na serwerze, dlaczego? Dlatego, że na stronie ma błąd związany z bezpieczeństwem. Zaraz poleci wiadomość do niego. Nie wiem co dokładnie chcesz mieć na tych "podstronach". Załóżmy więc, że artykuły. Tworzysz w bazie nową tabelę: artykuly z polami: id(Auto_Increment), autor, tresc, data... itd. W index.php dajesz coś w stylu, w miejscu gdzie ma się wyświetlać ten środek: <?php $id = intval( $_GET['id'] ); if( !$id ){ $id = 1; // id indexu, czyli do treści jaka ma być // pokazana jeśli nie ma $_GET['id']; } // połączenie z baza $q = 'SELECT * FROM artykuly WHERE id = \'$id\''; if( $result = @mysql_query($query) ){ $row = mysql_fetch_assoc( $result ); $autor = $row['autor']; $tresc = $row['tresc']; $data = $row['data']; // robisz coś z tymi pobranymi danymi // np dołączasz jakiś plik (template.php) // gdzie wszystko wyświetlasz require_once( 'template.php' ); } else{ echo 'nie ma takiej strony'; }?> Zaznaczam, pisane na kolanie, więc może jest gdzieś błąd i odwołujesz się do tego www.mojastroa.pl?id=5
Michass komentarz 30 listopada 2008 Autor komentarz 30 listopada 2008 Czyli wywołuje dane z bazy w danym div'ie ? A jak wpisać te dane do bazy.
luq komentarz 30 listopada 2008 komentarz 30 listopada 2008 Czyli wywołuje dane z bazy w danym div'ie ? Można tak powiedzieć A jak wpisać te dane do bazy. Normalnie Najłatwiej będzie przez PhpMyAdmin
Michass komentarz 5 grudnia 2008 Autor komentarz 5 grudnia 2008 Może prostszy byłby taki sposób: Widziałem gdzieś jak jest następująco. Strony - 1 strona, tylko index.php Jak się kliknie na jakiś link, załóżmy "Artykuł 1", to do środka strony, czyli np. div'u środkowego ładuje się plik "artykul1.php". Tak więc zmienia się tylko środkowa zawartość, poprzez wczytywanie pliku "artykuł.php". W adresie było natomiast: "www.adresstrony.pl?index.php?body=artykul1" czy jakoś podobnie. Przy czym "body" to nazwa naszego środku. Czy może mi ktoś napisać taki kod? Lub jakoś inaczej pomóc w uzyskaniu dokładnie tego efektu? Pozdrawiam, Michał
DoGeR komentarz 5 grudnia 2008 komentarz 5 grudnia 2008 <?php$body = mysql_real_escape_string($_GET['body']);if(!empty($body) { include('inc/'.$body.'.inc');}else{//tresc gdy body jest puste}?> Pliki zapisuj z rozszerzeniem inc Ten kod umieść w divie
luq komentarz 5 grudnia 2008 komentarz 5 grudnia 2008 DoGeR, Twój kod jest z kilku względów bardzo słaby. Po pierwsze, rozszerzenia .inc są raczej mało bezpieczne i raczej niestosowalne. Dlatego, że pliki .inc standardowo nie są parsowane po ich wywołaniu z poziomu np. przeglądarki, dzięki czemu otrzymujemy cały kod w czystej formie. Więc raczej się skłania ku nazwie plik.inc.php Oczywiście jeśli będzie w tym pliku tylko tekst to nic się nie dzieje, więc zależy jak to się wykorzystuje, jeśli autor tematu nie będzie miał w tych plikach nic napisane w PHP to jak najbardziej poprawnie, ale nie wiem czy tak chce mieć Po drugie includowanie plików przez GETa to najczęściej spotykany błąd. Dlaczego? A no dlatego że można sobie wszystko z serwera includnąć (np. passwd na linuksie), oczywiście jeśli nie jest wszystko dostatecznie filtrowane. Przez Poisoning Null Byte wycinamy sobie rozszerzenia (...)?body=index.php%00 ofc. gdy magic_quotes_gpc = on i mamy DoS`a w index.php bez końca incudowany jest index.php więc robi się koło. Przez Directory Traversal "chodzimy" sobie po całym serwie. (...)?body=../../plik_o_2_katalogin_nizej.php%00 bo mysql_real_escape_string() nie filtruje slasha. Poza tej funkcji można używać dopiero po uprzednim połączeniu z bazą, funckcją mysql_connect() Więc podsumowując, imho kod słaby.
Michass komentarz 5 grudnia 2008 Autor komentarz 5 grudnia 2008 Nie pasuje mu 3 linijka. Poprawiłem, było o 1 ")" za mało. Teraz nie wiem czemu, nie pasuje 9. Adres: http://www.bikestrefa.boo.pl/ff/ Pozdrawiam, Michał
luq komentarz 5 grudnia 2008 komentarz 5 grudnia 2008 Jak chcesz to, tak: <?php mysql_connect( 'localhost', 'root', 'pass' ) or die( 'nie można połączyć się z bazą' ); $body = mysql_real_escape_string( $_GET['body'] ); if( !empty( $body ) ) { include('inc/'.$body.'.inc'); } else{ // tresc gdy body jest puste }?> ale przeczytaj mój post wyżej.
Michass komentarz 5 grudnia 2008 Autor komentarz 5 grudnia 2008 Skoro ta metoda jest ryzykowna to uprość mi jakoś tą Twoją jak to mam dokładnie, krok po kroku zrobić, jeśli to nie problem dla Ciebie. Pozdrawiam, Michał
luq komentarz 5 grudnia 2008 komentarz 5 grudnia 2008 Albo sposób tak jak pisałem w moim pierwszym poście w tym temacie, albo coś bardziej kłopotliwego jeśli chodzi o dodawanie kolejnych plików, tzn tablica. <?php $f = $_GET['f']; $files = array( 1 => 'a.php', 2 => 'b.php' ); if( array_key_exists( $f, $files ) ){ include( $files[$f] ); } else{ // strona podstawowa }?> Oczywiście tablica może być asocjacyjna.
Michass komentarz 6 grudnia 2008 Autor komentarz 6 grudnia 2008 W else rozumiem, że ma być link do index'u. A na jakiej zasadzie to ma działać? To znaczy: jak ma wyglądać odnośnik do tego "a.php" ? Pozdrawiam, Michał
luq komentarz 6 grudnia 2008 komentarz 6 grudnia 2008 Z tym elsem dobrze rozumiesz Co do tego jak to działa to tak: www.strona.pl?f=1 i masz includowane a.php Jeśli chcesz zamiast liczb odwoływać się poprzez stringi to zmieniasz tablice na asocjacyjną, np: $files = array( 'jeden' => 'a.php', 'b' => 'b.php' ); i w tedy odwołujesz się do tego w ten sposób aby dołączyć a.php: www.strona.pl?f=jeden Sposób z liczbami jest o tyle lepszy że możesz sobie dać na stronę odnośnik "Następny artykuł". Robisz $next = ++$_GET['f']; i używasz tego w linku.
Michass komentarz 6 grudnia 2008 Autor komentarz 6 grudnia 2008 Wielkie dzięki. Dostajesz plusik. Proszę jednak aby tego tematu jeszcze nie zamykać.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.