Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: .httacces przyjazne linki, zmienna w php bez użycia metody GET
Forum PHP.pl > Forum > PHP
szmerak
Używam do określenia linku jednego parametru get video.php?id=1
Chciał bym to zamienić w .htaccess na np. www.mojastrona.pl/video/samolot-sie-rozbil.html
Czy jest to możliwe nie podając zmiennej zawierającej nazwe "samolot sie rozbil" w GET?
tylko osobno w kodzie PHP?
Dalej chciał bym bazować tylko na id. Już oparłem cały skrypt na tym więc męczące by było przepisywanie wszystkiego na nowo.
Szukam już bardzo długo odpowiedzi ale na internecie są same przykłady co niedziałają. Przynajmniej mi ;/

Z góry dziękuje za pomoc
kiler129
Musisz zawrzec id w linku smile.gif
Zamiast samolot-sie-rozbil daj 123-samolot-sie-rozbil winksmiley.jpg
szmerak
Chyba nie za bardzo zrozumiałeś moje pytanie... Ja nie podaje przez GET nazwy samolot sie rozbil. Tylko tą wartość przyjmuje jakaś tam zmienna która jest wyciągana z bazy na podstawie ID. I tutaj moje pytanie czy bez podawania w GET tej nazwy jestem wstanie użyć zmiennej z nazwą do stworzenia linku "video/samolot-sie-rozbil"
Ja widziałem przykłady na stronach ale wszystkie były na podstawie podawanych parametrów GET. A ja bym chciał prosto ze zmiennych w kodzie tylko za pomocą ID.
tehaha
jak dla mnie Twój opis jest kompletnie nie zrozumiały i zamotany...może opisz od początku co próbujesz zrobić?


chyba już rozumiem, masz takie linki video.php?id=1 i chcesz je zamienić na takie www.mojastrona.pl/video/samolot-sie-rozbil.html bez pobierania nazwy "samolot-sie-rozbil." z bazy danych tak?
szmerak
ok.
link do filmiku jest www.mojastrona.pl/video.php?id=1
Ja chciał bym zrobić www.mojastrona.pl/video/samolot-sie-rozbil <--- gdzie "samolot-sie-rozbil" jest to nazwa video "samolot sie rozbil";
Jak widać głównym parametrem do filmiku jest id=$1
Nazwy "samolot sie rozbil" nie podaje w GET. np. www.mojastrona.pl/video.php?id=1&nazwa=samolot+sie+rozbil
Tylko jest ona wyciągana z bazy danych i zawarta w tablicy np. $row['nazwa'];
I tutaj moje pytanie czy da się na podstawie tej tablicy zbudować link www.mojastrona.pl/video/"nazwa-video"; bazując tylko na id filmiku podanym jako video.php?id=1
Myślę że teraz moja wypowiedź będzie zrozumiała, jeśli nie to już nie wiem dry.gif dry.gif
Quadina
Twoje pytanie nie jest precyzyjne wystarczająco i mam dziwne wrażenie, że nie wiesz co to jest metoda GET tak właściwie więc, żeby dać na nie odpowiednią odpowiedź wyłożę trochę teorii.

Metoda GET to nic innego jak wszystko co widzisz w pasku adresu, zatem jeżeli masz w pasku adresu link:
www.mojastrona.pl/video/samolot-sie-rozbil.html
To jest to wszystko co wyżej wysłane metodą GET i można to przy pomocy pliku .htaccess rozbić na różne elementy zgodnie z NASZYM życzeniem. Np. W twoim przypadku możemy sprawdzić czy zaistniało słowo kluczowe /video/ i jeżeli tak, to wykonać skrypt video.php. Następnie możemy się zastanowić, czy chcemy, żeby dalsza część była przekazywana do skryptu czy jakoś przepisana. Ja proponuje w takich przypadkach przepisanie pomiędzy /video/ a .html tekstu do zmiennej strip. W ten sposób skrypt video.php będzie myślał, że otrzymał coś takiego:
www.mojastrona.pl/video.php?strip=samolot-sie-rozbil/
Mimo tego, że w przeglądarce wygląda to zupełnie inaczej. Taki przykład jak wyże w pliku htaccess będzie wyglądać następująco:
Kod
RewriteRule ^video/([^/]*).html$ video.php?strip=$1


Tłumaczę element po elemencie:
RewriteRule słowo kluczowe, nie podlega specjalnie dyskusji. Oznacza tyle, że chcemy przepisać wedle zasad podanych dalej w tej linijce
^video/([^/]*).html$ kod mający coś tam wspólnego z eregiem (nie będę się tutaj z nikim kłócić). Szukamy słówka video/ i coś cokolwiek (*) co nie będzie zawierało w sobie znaczka /, oraz ten ciąg zakonczy się .html (koniec oznaczony $ w tej sekcji, w kolejnej oznacza coś innego). Wytnie nam do zmiennej to co jest w nawiasie ([^/]*) czyli w skrócie mówiąc od video/ do .html czyli to co własciwie chcemy.
video.php?strip=$1 przepisujemy tutaj wszystko tak jak chcemy, czyli używamy skrypt video.php i podajemy mu metodą GET zmienną strip i przypisujemy jej zmienna $1. Zmienna ta to po prostu pierwsze wystąpienie nawiasów w poprzednim argumencie. Jeżeli było by ich wiecej, moglibyśmy je tutaj pokolei przepisywać w różny sposób i w różnej kolejności.

Cytat
Ja nie podaje przez GET nazwy samolot sie rozbil. Tylko tą wartość przyjmuje jakaś tam zmienna która jest wyciągana z bazy na podstawie ID. I tutaj moje pytanie czy bez podawania w GET tej nazwy jestem wstanie użyć zmiennej z nazwą do stworzenia linku "video/samolot-sie-rozbil"
Ja widziałem przykłady na stronach ale wszystkie były na podstawie podawanych parametrów GET. A ja bym chciał prosto ze zmiennych w kodzie.

Zatem Pana pytanie odnosi się do czegoś co nazywam osobiście "abstrakcją urojoną", czyli bez podstaw teoretycznych pyta Pan o rzeczy niemożliwe. Analizując Pana wypowiedź dochodzę do wniosku, że chce Pan przekazać jeden parametr z jednej strony do drugiej strony w linku, ale tak, żeby go nie było widać. Zatem czy nie jest to trochę bezsensowne? Jak można dać dziecku bułkę do szkoły, ale tak, żeby jej nie zauważyło że ją ma, nawet o tym nie wiedziało, ale koniecznie zjadło?



EDITED
Analizując ostatnią wypowiedź stwierdzam, że pytanie zostało teraz zadane poprawnie.

Odpowiedź na nie jest proste - wystarczy przebudować Pana skrypt tak, aby nie zadawał zapytania do bazy po numerze ID, ale po nazwie, którą Pan podaje. Ewentualnie (co raczej polecam) jest utworzenie linku w stylu:
www.mojastrona.pl/video/76/samolot-sie-rozbil.html
I w htaccess odpowiednio obsłużyć te zmienne, ale w skrypcie korzystać jedynie z ID. Użytkownik będzie widział jaki jest tytuł strony już w linku, a i skrypt otrzyma wymaganą przez siebie informację, czyli numer ID.
szmerak
Ja się tylko pytałem czy jest to możliwe ponieważ w internecie nie znalazłem żadnych informacji na ten temat.
Cytat
Czy jest to możliwe nie podając zmiennej zawierającej nazwe "samolot sie rozbil" w GET?
tylko osobno w kodzie PHP?

Więc jest to nie możliwe. Tyle w sumie chciałem usłyszeć a nie nazwy typu "abstrakcja urojona"
Quadina
Jeżeli uraziłem, to oficjalnie i szczerze przepraszam. Moje określenie nie jest wcale na złość, tylko wyrażam w nim moją dezaprobatę do braku teorii lub/i logiki.
szmerak
@Offtop Tym razem ja nie zauważyłem "EDITED" z odpowiedzią dry.gif smile.gif. A co do urażania nikt nikogo nie urażał tongue.gif
----------------------------------------------------------
Nie za bardzo rozumiem.
Z wypowiedzi zrozumiałem tak że zapytanie ma być wykonane przez nazwe filmiku.
hmmm...
Czyli muszę stworzyć 2 zapytania do bazy.
1.(pierwsze zapytanie) Za pomocą ID wyciągnąć nazwę
2.(drugie zapytanie) Za pomocą nazwy wyciągnąć resztę danych.
Hmm... wydaje mi się że źle zrozumiałem bo jest to dla mnie trochę bez sensu.
I nie pomaga mi to w stworzeniu przyjaznego linku.
Jak napisałem cały skrypt opiera się na ID tak więc przerabianie skryptu który wyciąga wyniki na podstawie nazwy jest równoznaczne z pisaniem od nowa całego skryptu.

A pytanie główne w tym temacie jest czy muszę podać przez GET nazwę aby ją dodać do linku.

P.S dziękuje za kulturę z "Pan" smile.gif
Ale myślę że łatwiej będzie po prostu Szmerak smile.gif
Quadina
Nie musisz wykonywać dwóch zapytań. Jeżeli masz link wygenerowany np.:
www.mojastrona.pl/video/76/samolot-sie-rozbil.html
to w htaccess przepisujesz sobie, żeby uzyskać $id=76 i $nazwa='samolot-sie-rozbil'. Jeżeli masz $id i twój system jest już do tego przygotowany to możesz w ogóle zaniedbać zmienną $nazwa i jej nie wykorzystywać przy zapytaniu. W ten sposób użytkownik będzie widzieć ładny i mu przyjazny link z tytułem danego filmiku, a ty (skrypt) będziesz widział swoje ID po którym będziesz szukać w bazie.

EDITED:
Dodanie nazwy do linku nie jest konieczne do Twojego skryptu na tyle ile zdołałem się dowiedzieć cokolwiek o nim, ponieważ wykorzystujesz tylko numer ID. Powtórzę się zatem, nazwa będzie tylko ładnie wyglądać dla użytkownika korzystającego z serwisu.
szmerak
Dobra dzięki mniej więcej rozumiem tongue.gif Muszę zawrzeć te ID w linku. W przeciwnym wypadku muszę zmienić cały skrypt.
Teraz jak zapisać w htaccess aby pobierał również dane z tablicy $row['nazwa']; z pliku (cośtam.php) i dopisywał je do linku?
gdzie $row['nazwa'] - Nazwa obecnie oglądanego video. Mam na myśli (video)/$1/(i jak pobrać teraz dane z $row['nazwa'] a raczej ze zmiennej $nazwa która będzie już implodowana.
Nie znam się za dobrze na htaccess ale na pewno w niedługim czasie pogłębię swoją wiedzę na ten temat.
erix
Łapaj linka: http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html

A co do Twojego tematu - poszukaj o czymś takim, co się nazywa slug.
szmerak
Dzięki ci wielki to jest właśnie odpowiedź na moje pytanie.
Dzięki za link napewno mi się przyda.

Jedna krótka odpowiedź i problem rozwiązany. O to cały czas mi chodziło.
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.