Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zmienne GET - przepisywanie URL'ów
Forum PHP.pl > Forum > Przedszkole
boro11
Witam!
Posklejałem stronę dosyć dawno i projekt zarzuciłem, ale teraz do niego powróciłem i chcę "zrobić" go lepiej.

Zrobiłem sobie system podstron oparty na prostej metodzie:
  1. <?
  2. if($id!='' && $id!='home')
  3. {
  4. require_once("modules/users/id.php");
  5. }
  6. else
  7. {include("includes/homepage.php");
  8. }
  9. ?>


Gdzie adresy mają link

typu:

tralala.pl/kokpit/

itd.

Jest za to odpowiedzialny .htaccess

  1. RewriteRule ^([a-zA-Z]+)/$ index.php?id=$1
  2. RewriteRule ^([^-]+).html$ joke/?mode=kawaly&id=$1&[title]=La [L]
  3. RewriteRule ^plus-([^-]+).html$ casting/?mode=kawaly&voted=1&id=$1 [L]
  4. RewriteRule ^minus-([^-]+).html$ casting/?mode=kawaly&voted=2&id=$1 [L]
  5. RewriteRule ^porcja-([^-]+).html$ casting.php?porcja=$1 [L]


Konkretnie pierwsza linijka. Mam zrobiony system głosowania na get'ach dla zalogowanych userów i wygląda on tak:

  1. if($_GET['voted'] == '1')
  2. mysql_query('UPDATE `kawaly` SET `plus`=`plus`+1 WHERE `id`='.mysql_real_escape_string($_GET['id']).'');
  3. if($_GET['voted'] == '2')
  4. mysql_query('UPDATE `kawaly` SET `plus`=`plus`-1 WHERE `id`='.mysql_real_escape_string($_GET['id']).'');
  5.  
  6. Echo "Dzięki za głos!";


A linki do głosowań:

  1. <a href="http://tralala.pl/plus-'.$AFR['id'].'.html"><img src="/images/plus.png" alt="Plus"/></a>
  2. <a href="http://tralala.pl/minus-'.$AFR['id'].'.html"><img src="/images/minus.png" alt="Minus" /></a>


Czy da się przekazywać zmienne jeśli nie ma w adresie .php

czyli np.

/casting/?mode=kawaly&voted=2&id=$1

Testowałem to i nie mogę tego poprawić, ale być może da się to zrobić a ja po prostu źle coś napisałem.
maniana
Jeśli używasz przyjaznych linków to rób wszystko przez nie. Przykład:
.htacces:
Cytat
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).$ index.php [L]
index.php
  1. $url = array();
  2. if(!empty($_SERVER['REQUEST_URI'])) {
  3. $qs = explode('/',$_SERVER['REQUEST_URI']);
  4. $l = 0;
  5. foreach($qs AS $v) {
  6. if(!empty($v)) {
  7. $phtml = strpos($v,'.html');
  8. if($phtml!==false) {
  9. $url['page'] = substr($v,0,$phtml);
  10. }else $url[] = $v;
  11. }
  12. }
  13. }
  14. print_r($url);

Jest to najprostszy skrypt do parsowania danych. Teraz mozesz parsować również ścieżki. Czyli np: www.domen.ka/to/jakas/zmienna/pliczek.html przeparsuje na tablicę:
Cytat
Array
(
[0] => to
[1] => jakas
[2] => zmienna
[page] => pliczek
)
boro11
Ten kod php mam wstawić zamiast tego który już mam, czy dodać go poprostu, to samo pytanie odnośnie .htaccess'a?
maniana
Na samym początku pobaw się nim, zobacz jak działa i zrozum ideę. Nie ma sensu robić czegokolwiek na zasadzie wstawić tu i koniec. Nie jest skomplikowany, poradzisz sobie :)
boro11
No własnie próbuje go zrozumieć, ale bez opisu i pytań raczej nie da rady smile.gif
maniana
Całą ścieżkę z URL dzielisz znakiem / na tablicę. Potem w pętli filtrujesz dane dodając do nowej tablicy. Przy okazji sprawdzasz czy nie masz pliku kończącego się na .html. Jeśli taj to jest to główna nazwa... Czyli
Cytat
www.domen.ka/blog/archiwum/2011.html
... Możesz sobie przesłać właśnie zmienne odbierając je bezpiecznie w tablicy. To jest tylko taki najprostszy i pisany na szybko przykład.
erix
Cytat
Jeśli używasz przyjaznych linków to rób wszystko przez nie. Przykład:

Dlaczego?

Rozwiązaniem problemu jest flaga [QSA] w htaccess.
maniana
@erix: Raczej chodziło mi o taki zapis: www.domen.ka/jakis-tytul-strony.html?zmienna=1&dana=2 To jest bez sensu....
boro11
Rozwiązałem problem w innym sposób nie mniej jednak ten kod który podałeś może mi się w przyszłości przydać, dlatego też daje pomógł smile.gif
erix
Cytat
To jest bez sensu....

Wiem, że chodzi o ten zapis, ale teraz uzasadnij, dlaczego jest bez sensu.
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.