x-kom hosting

[Rozwiązany][PHP] Zapytania dla treści danego div'u.

Michass
utworzono
utworzono

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
komentarz

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
komentarz

Czyli wywołuje dane z bazy w danym div'ie ? A jak wpisać te dane do bazy.

luq
komentarz
komentarz
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
komentarz

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
komentarz
<?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
komentarz

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
komentarz

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
komentarz

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
komentarz

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
komentarz

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
komentarz

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
komentarz

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
komentarz

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.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.