Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Jak wykonać najprostszy system SEO?
wbeatn
post 28.10.2014, 08:22:59
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


Witam.

Mam bazę danych z kolumnami (aliasID,query,keyword).
W 'query' zapisuje się zapytanie, np. 'index.php?strona=oferta', a keyword klucz - w tym przypadku 'oferta'.

W pliku index.php jest taki kod:

  1. <?php
  2. if(isset($_GET['key'])) {
  3.  
  4. $key=$_GET['key'];
  5. $checkiskey=mysql_fetch_array(safe_query("SELECT * FROM seoaliasy WHERE keyword='".$key."'"));
  6.  
  7. if($checkiskey) {
  8.  
  9. include($checkiskey['query']);
  10.  
  11. } else { echo '404'; }
  12.  
  13. }
  14. ?>


W .htaccess mam wpis:

  1. RewriteEngine On
  2. RewriteRule ^([a-z]+)?$ index.php?key=$1 [L]


Chodzi o to, że teraz po wywaołaniu adresu

http://www.strona.pl/oferta

jeśli w bazie znajdzie alias o takim kluczu (oferta) miałaby się wyświetlić strona z adresu zgodnego z tym co jest w kolumnie 'query', czyli:

http://www.strona.pl/index.php?strona=oferta

jednak include wyświetla zawartość poprawnie tylko jeśli adres jest bez zmiennej - ze zmienną wyświetla się pusta strona

Jakim sposobem poprawnie wyświetlić zawartość wybranej podstrony za pomocą danych z tabeli MySQL, z aliasami tych podstron?

Chciałbym stworzyć najprostszy system SEO.

Ten post edytował wbeatn 28.10.2014, 08:24:37
Go to the top of the page
+Quote Post
Turson
post 28.10.2014, 08:29:39
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jak wywala Ci pustą stronę to najprawdopodobniej include wywala błąd, a masz wyłączone raportowanie błędów. Wniosek - włacz raportowanie błędów error_reporting
Go to the top of the page
+Quote Post
wbeatn
post 28.10.2014, 08:44:37
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


Cytat
Warning: include(index.php?strona=oferta) [function.include]: failed to open stream: No such file or directory in /index.php on line 14


Jednak kiedy wywołuje ją z pasku adresu to się wczytuje.

W index.php coś takiego:

  1. <?php
  2. $site = $_GET['strona'];
  3. $invalide = array('\\','/','/\/',':','.');
  4. $site = str_replace($invalide,' ',$site);
  5. if(!file_exists("inc/subpages/".$site.".php")) { $site='404'; };
  6. include("inc/subpages/".$site.".php"); ?>
  7. ?>


Ten post edytował wbeatn 28.10.2014, 08:48:37
Go to the top of the page
+Quote Post
nospor
post 28.10.2014, 08:48:15
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No przeciez widac, ze zamiast
include(oferta)
robi ci
include(index.php?strona=oferta)
....

Tak ma byc:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)?$ index.php?key=$1 [L]


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Turson
post 28.10.2014, 08:49:03
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Z jakiej racji includujesz plik index.php?strona=oferta ?
To kompletnie nie tak ma działać.

W bazie masz np strukturę
key | plik
oferta | oferta.php

Reguła to
Kod
RewriteEngine On
    RewriteRule ^([a-z]+)?$ index.php?key=$1 [L]

I teraz pobierasz z bazy `plik` dla key = $_GET['key'] i includujesz plik
Go to the top of the page
+Quote Post
tzm
post 28.10.2014, 08:50:46
Post #6





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


Tu masz najlepszy poradnik jak to zrobić:
poradnik seo i php
Go to the top of the page
+Quote Post
wbeatn
post 28.10.2014, 08:51:01
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


Cytat(nospor @ 28.10.2014, 08:48:15 ) *
No przeciez widac, ze zamiast
include(oferta)
robi ci
include(index.php?strona=oferta)


Bo dokładnie ma wgrać podstronę "index.php?strona=oferta", właśnie o tę podstronę chodzi
jeśłi wywołam ją bezpośrednio z paska adresu to się wczytuje, jeśli przez include - nie
Go to the top of the page
+Quote Post
Turson
post 28.10.2014, 08:53:47
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Zrozum, że PHP szuka pliku o nazwie index.php?strona=oferta a nie oferta.php
Go to the top of the page
+Quote Post
wbeatn
post 28.10.2014, 08:56:01
Post #9





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


Cytat(Turson @ 28.10.2014, 08:53:47 ) *
Zrozum, że PHP szuka pliku o nazwie index.php?strona=oferta a nie oferta.php


Ale nie istnieje u mnie plik oferta.php. Przeczytaj jeszcze raz pierwszy post dokładnie.

Nie chce by wyświetlało zawartośc pliku, a zawartość którą wywołuje użycie adresu ze zmienną.
W tym przypadku dokładnie to samo, co wyświetla się po ręcznym wpisaniu 'http://www.strona.pl/index.php?strona=oferta' w pasku adresu przeglądarki

Ten post edytował wbeatn 28.10.2014, 09:00:23
Go to the top of the page
+Quote Post
Turson
post 28.10.2014, 08:58:35
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


A jaki plik istnieje który odpowiada za treść oferty?
Go to the top of the page
+Quote Post
wbeatn
post 28.10.2014, 09:23:35
Post #11





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


Po kolei

index.php służy tylko i wylacznie do pobrania wartosci zmiennej "key" z adresu

  1. <?php
  2. if(isset($_GET['key'])) {
  3.  
  4. $key=$_GET['key'];
  5. $checkiskey=mysql_fetch_array(safe_query("SELECT * FROM seoaliasy WHERE keyword='".$key."'"));
  6.  
  7. if($checkiskey) {
  8.  
  9. include '_'.$checkiskey['query'];
  10.  
  11.  
  12. } else { echo '404'; }
  13.  
  14. }
  15. ?>


a więc wywołuję w pasku adresu stronę www.strona.pl/index.php?key=(*) [(*) - obojętnie co]
teraz wewnątrz index.php najpierw skrypt sprawdza czy w bazie istnieje rekord, w którym kolumna "keyword" jest równa temu czym jest (*) .. (nie ważne czy "oferta", czy np. "kontakt" .... jak "kontakt", to sprawdza czy jest rekord, w którym kolumna "keyword" równa się "kontakt"

Jak nie znajdzie ma wyświetlić 404

jeśli znajdzie, to ma wyświetlić zawartość z adresu, który zapisany jest w kolumnie "query" dla tego rekordu

||-------------query-------------||-keyword-||
--------------------------------------------------
|| _index.php?strona=oferta || oferta ||
--------------------------------------------------
|| _index.php?strona=kontakt || kontakt ||
--------------------------------------------------

Chodzi o to, że w kolumnie query zapisane są adresy, które prawidlowo wyświetlają stronę do której się odwołują
_index.php?strona=oferta wyświetla pięknie podstronę z ofertą, _index.php?strona=kontakt z kontaktem

ale jeśli próbuję zaincludować przez funkcję include taki adres, to wyświetla, że wywołana scieżka nieprawidłowa, czyli

Cytat
Warning: include(_index.php?strona=oferta) [function.include]: failed to open stream: No such file or directory in /index.php on line 14


Rozumiem, że funkcja inlude nie wyświetli zawartości podstrony zgodnej z tym co jest w zmiennych, że słuzy tylko do wyświetlenia zawartości pliku bez użycia zmiennych
Ja szukam rozwiązania, które spowoduje, że skrypt wczyta mi to samo, co wyświetla się po wpisaniu w pasku adresu dokładnie tego, co jest w kolumnie query

Ten post edytował wbeatn 28.10.2014, 09:26:01
Go to the top of the page
+Quote Post
Turson
post 28.10.2014, 09:52:57
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


W poście #5 napisałem jak to powinno wyglądać. Trzymanie w bazie index.php?strona=oferta jako aliasu jest słabe.

W tabeli masz trzymać alias (keyword) i nazwę/ścieżkę pliku, który ma być wczytany i tylko to, czyli np.
keyword | filename
oferta | pliki/something/oferta.html

  1. <?php
  2. if(isset($_GET['key'])) {
  3.  
  4. $key=$_GET['key'];
  5. $checkiskey=mysql_fetch_array(safe_query("SELECT filename FROM seoaliasy WHERE keyword='".$key."'"));
  6.  
  7. if($checkiskey) {
  8.  
  9. include $checkiskey['filename'];
  10.  
  11.  
  12. } else { echo '404'; }
  13.  
  14. }
  15. ?>


Ten post edytował Turson 28.10.2014, 09:53:56
Go to the top of the page
+Quote Post
wbeatn
post 28.10.2014, 10:35:09
Post #13





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


Od początku piszę, że podstrony wczytywane są przez definiowanie w adresie zmiennych, a ty mi dajesz rozwiązanie, które opiera się na plikach.
Co z tego, że sobie wgram plik " pliki/something/oferta.php " jak potrzebuje wgrac zawartość " pliki/something/oferta.php?zmienna1=wartosc&zmienna2=wartosc " etc., przez użycie danego aliasa z tabeli?

To o czym piszesz zupełnie nie ma sie jakkolwiek do tego czego potrzebuje... to że include mi wgra zawartość wywoływanej sciezki, ale do pliku, nie adresu ze zmiennymi, to wiedziałem przed przyjsciem tutaj

Ten post edytował wbeatn 28.10.2014, 10:35:52
Go to the top of the page
+Quote Post
freemp3
post 28.10.2014, 11:10:21
Post #14





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Sam to napisałeś, czy poprawiasz po kimś? Jeśli sam, to zrobiłeś to źle i lepiej przeprojektuj to na nowo.
Co do Twojego pytania jedyne co mi przychodzi do głowy to coś takiego:

  1. $curl = curl_init('http://www.domena.com/index.php?opcja=wartosc');
  2. echo curl_exec($curl);



--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 10.07.2025 - 07:56