Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak wykonać najprostszy system SEO?
Forum PHP.pl > Forum > Przedszkole
wbeatn
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.
Turson
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
wbeatn
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. ?>
nospor
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]
Turson
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
tzm
Tu masz najlepszy poradnik jak to zrobić:
poradnik seo i php
wbeatn
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
Turson
Zrozum, że PHP szuka pliku o nazwie index.php?strona=oferta a nie oferta.php
wbeatn
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
Turson
A jaki plik istnieje który odpowiada za treść oferty?
wbeatn
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
Turson
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. ?>
wbeatn
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
freemp3
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);

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.