Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]System podstron
eXTrim
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.02.2007

Ostrzeżenie: (0%)
-----


Witam, nurtuje mnie pytanie w jaki sposób tworzyć małe serwisy internetowe z "5 podstronami",
1. Czy stosować cały kod html z index.html i tylko zmieniać treść podstron czy lepiej używać do tego include.
2. Jak ma się includowanie z późniejszym pozycjonowaniem strony.
3. Czy stosowanie całego kodu nie spowolni za bardzo wczytywanie tych podstron ?
Go to the top of the page
+Quote Post
askone
post
Post #2





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

Ostrzeżenie: (0%)
-----


Najprostszy system to ten z:
  • jednym plikiem index.php
  • numerem strony przekazywanym jako parametr w GET
  • na podstawie wartości include odpowiedniego pliku z treścią


Pozdrawiam
Go to the top of the page
+Quote Post
eXTrim
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.02.2007

Ostrzeżenie: (0%)
-----


możesz pokazać mniej więcej jak ma wyglądać kod (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
gigzorr
post
Post #4





Grupa: Zarejestrowani
Postów: 652
Pomógł: 47
Dołączył: 6.02.2010
Skąd: Radom

Ostrzeżenie: (0%)
-----


  1. switch($_GET['podstrona'])
  2. {
  3. default: include("index.php");
  4. case 'gry': include("gry.php"); break;
  5. }


gotowe (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
askone
post
Post #5





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

Ostrzeżenie: (0%)
-----


Cytat(gigzorr @ 25.08.2010, 13:06:15 ) *
  1. switch($_GET['podstrona'])
  2. {
  3. default: include("index.php");
  4. case 'gry': include("gry.php"); break;
  5. }


gotowe (IMG:style_emoticons/default/smile.gif)


Jedna mała zmiana - ponieważ kod include jest już w pliku index.php to nie może on sam siebie znów includować (IMG:style_emoticons/default/winksmiley.jpg) Tak więc powinno być tak:
  1. switch($_GET['podstrona'])
  2. {
  3. default: include("glowna.php");
  4. case 'gry': include("gry.php"); break;
  5. }


Pozdrawiam
Go to the top of the page
+Quote Post
eXTrim
post
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.02.2007

Ostrzeżenie: (0%)
-----


a co sądzisz o tym (IMG:style_emoticons/default/questionmark.gif)

  1. $site = $_GET['site'];
  2. if(!empty($site)) {if(is_file("$site.php"))
  3. include "$site.php";else include "error.php";}
  4. else include "glowna.php";

jakie są różnice?
Go to the top of the page
+Quote Post
askone
post
Post #7





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

Ostrzeżenie: (0%)
-----


Wykorzystanie konstrukcji switch pozwala na łatwą rozbudowę kodu o kolejne podstrony. W przypadku if musisz zadbać o kolejne bloki if...else to znacząco wpływa na obniżenie przejrzystości kodu. Co do warunków testowych zastosuj try..catch to jest zdecydowanie lepszy sposób na obsługę błędów

Pozdrawiam
Go to the top of the page
+Quote Post
eXTrim
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.02.2007

Ostrzeżenie: (0%)
-----


ehh muszę jeszcze o tym wszystkim poczytać trochę nie łapie tych komend itd
Go to the top of the page
+Quote Post
thomson89
post
Post #9





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Polecam zrobienie tego na bazie danych. W przyszłości będziesz mógł zrobić sobie jakiś panel administracyjny do zarządzania treścią.

Co do include, to stwórz sobie pliczki z treścią np. w folderze elementy. Samo pobieranie ich, jest proste:

  1. case($_GET['page'])
  2. {
  3. //o mnie
  4. case 'omnie':
  5. include 'elementy/omnie.html';
  6. break;
  7.  
  8. //kontakt
  9. case 'kontakt':
  10. include 'elementy/kontakt.html';
  11. break;
  12.  
  13. //glowna
  14. case 'glowna':
  15. default:
  16. include 'elementy/index.html';
  17. break;
  18.  
  19. }


Ten post edytował thomson89 25.08.2010, 14:17:00
Go to the top of the page
+Quote Post
eXTrim
post
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.02.2007

Ostrzeżenie: (0%)
-----


ok zastosować to potrafię tylko za bardzo nie rozumiem składni ...
Go to the top of the page
+Quote Post
thomson89
post
Post #11





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Poczytaj trochę w internecie powinieneś zrozumieć.

Ogólne założenie: do switcha przekazujesz zmienną. Za pomocą case 'zmienna': ustawiasz co ma robić skrypt, gdy zmienna będzie równa wartości z case. Za pomocą break hamujesz dalsze wykonywanie. Default odpowiada za akcje, która będzie wykonana gdy w zmienna będzie pusta.

Przykład ważności break:
  1. $zmienna = '1';
  2. switch($zmienna)
  3. {
  4. case '1':
  5. case '2':
  6. echo 'test';
  7. break;
  8. //tutaj, echo wywoła się gdy zmienna bedzie równa 1, lub 2.
  9. }


Ten post edytował thomson89 25.08.2010, 15:19:47
Go to the top of the page
+Quote Post
Asmox
post
Post #12





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Cytat(eXTrim @ 25.08.2010, 14:38:24 ) *
ehh muszę jeszcze o tym wszystkim poczytać trochę nie łapie tych komend itd

Chodzi o funkcje PHP? Polecam manual + trochę angielskiego, bo nazwy funkcji to wszystko z angielskiego ew. jakieś skróty. A co do systemu podstron, to można to zrobić w trzech plikach:
1. index.php (kontroler, router)
  1. require_once('baza.php') // załącza skrypty do połączeń z bazą
  2. if(isset($_GET['pid'])) {// pid = page id (identyfikator podstrony)
  3. $pid = mysql_escape_string($_GET['pid']) // Co z tego, że wartość jest numeryczna, SQL inject zawsze można zrobić
  4. }
  5. else $pid = 1 // Czyli na stronę główną
  6. $pageArr = getPageArr($pid) // Funkcja pobiera dane strony
  7. require_once('szablon.phtml');

2. baza.php (model do pobierania danych, obsługa bazy danych)
  1. mysql_conntect('host', 'user_name', 'pass');
  2. mysql_select_db('nazwa_bazy')
  3.  
  4. function getPageArray($pid) {
  5. $sql = "SELECT * FROM tabela_ze_stronami WHERE id=$pid LIMIT 1"; // czy jakoś tak z tym limitem
  6. $resource = mysql_query($sql);
  7. if(!is_resource($resource)) die('Sorry nie można pobrać strony');
  8. $row = mysql_fetch_assoc($resource);
  9. $pageArray = array();
  10. $pageArray['title'] = $row['title'] // Pole z tabeli w DB
  11. $pageArray['content'] = $row['content'];
  12.  
  13. return $pageArray;
  14. }

3. szablon.phtml (widok strony, szablon ze wstawkami z php)
  1. <head><title><?php echo $pageArr['title']; ?></title></head> <!-- Wstawiony tytuł z php (załączony szablon) -->
  2. <body><?php echo $pageArr['content']; ?></body>
  3. </html>

Yeah, parę minut pisania i masz działający oraz w miarę bezpieczny skrypt stronki (IMG:style_emoticons/default/biggrin.gif)
*SQL inject to takie hakierowanie, że podstawiasz apostrofy w odpowiednich miejscach i ci wywala całą zawartość z bazy, a nawet można ją wyczyścić, więcej jest napisane na forum, poszukaj w dziale o SQLu

Ten post edytował Asmox 25.08.2010, 15:55:22
Go to the top of the page
+Quote Post
eXTrim
post
Post #13





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.02.2007

Ostrzeżenie: (0%)
-----


Asmox, to bardzo ciekawe co opisujesz ale czy jest sens takiej rzeźby (złożony kod, baza mysql) dla małej strony ? rozumiem że chcesz aby witryna była bezpieczna, ale czy za pomocą includowania plików .php da się również bezpiecznie to zrobić (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Asmox
post
Post #14





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Kwestię bezpieczeństwa zmieściłem w 2 linijkach kodu - zabezpieczenie warunku od $_GET oraz limit 1 rekordu z bazy danych. Swoją drogą nie jest to dużo, a zawsze jakoś zwiększa bezpieczeństwo.

Napisałem ten skrypt w oparciu o MVC (bardzo, bardzo pobieżnie, ale jednak). Jeśli nie wiesz jeszcze co to jest, to informuję, że jest to taki styl programowania, w którym oddzielasz od siebie szablon strony określający jej wgląd (mVc - view, czyli widok), elementy pobierające dane (Mvc - model, typ zbierania danych) oraz warstwę łączącą, która pozwala na współpracę między tymi elementami (mvC - controller). Więcej możesz poczytać w googlach, wiki oraz na forum, gdzie te kwestie były wyjaśniane dokładniej setki razy.

I teraz tak: chcesz mieć dane z plików zamiast z bazy? Spoko. Zamieniasz element pobierający dane na taki, który wykorzystuje pliki, oraz modyfikujesz nieco kontroler index.php:
1. Index.php
  1. require_once('teksty.php') // załącza skrypty DO POBIERANIA ZAWARTOŚCI PLIKÓW - zmiana I
  2. if(isset($_GET['pname'])) {// pname = page name (nazwa pliku) - zmiana II ALE TO TYLKO KWESTIA WIZUALNA
  3. $pname = mysql_escape_string($_GET['pname']) // WARTOŚĆ TEKSTOWA, SQL inject zawsze można zrobić, a z tekstem łatwiej na to wpaść
  4. }
  5. else $pname = 'glowna' // Czyli na stronę główną
  6. $pageArr = getPageArr($pname) // Funkcja pobiera dane strony
  7. require_once('szablon.phtml');

I to by było na tyle co do modyfikacji index.php. Szablonu nie trzeba zmieniać, można tak napisać skrypt, żeby wciskał do tablicy te same dane.
2. teskty.php
  1. function getPageArr($pname) {
  2. $plik = file('jakas/sciezka/' . $name . '.php');
  3. $pageArray['title'] = $plik[0];
  4. foreach($plik as $klucz => $linia) {
  5. if($klucz == 0) continue // Pierwsza linia jest określana jako tytuł strony, więc nie zaliczamy jej do treści
  6. $pageArray['content'] .= nl2br($linia); // Zamieniamy znaki końca linii na znaczniki <br />,które powodują przejście do nowej lini w HTMLu
  7. }
  8. return $pageArray
  9. }

No i to wszystko. W sumie nie trzeba nawet robić tego nl2br. file pobiera plik z wpisaniem każdej linii w osobnym polu tabeli - pierwsza linia w kluczu [0], druga w [1] itd...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 30.08.2025 - 10:20