Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Now linki po wejściu na stronę .
Forum PHP.pl > Forum > PHP
kiepski96
Mam plik xxx.php .
Lecz nie chcę ,aby ktoś sobie go zapisał jako zakładkę i wchodził .
Chcę,aby można było w 1 pliku przypisać do tego xxx.php jakąś inną nazwę .
Załóżmy,że w index.php klikam w odnośnik www.fsdfd.pl/hjhfcisdhfdsfchdscvhdsvsdlv2.php a otwiera się xxx.php , ale tego nie widać .
No i jak chcę sobie zmienić wygląd tego linku www.fsdfd.pl/hjhfcisdhfdsfchdscvhdsvsdlv2.php to edytuje jeden plik .

Jak to zrobić ?

Dodam,że nie chcę edytować nazwy plików tylko zmieniać to w 1 pliku
pyro
mod_rewrite jest tym czego szukasz. Google wystarczy, żeby wiedzieć jak to obsłużyć.
kiepski96
Czy da się go sterować poprzez mysql ?
Bo chcę zrobi to przez php i te nazwy linków edytować poprzez mysql .
A ten mod rewrite to chyba htaccess
nospor
mod_rewrite (ładne linki) można też uzyskać po stronie php.
Tutaj o tym pisałem:
http://nospor.pl/ladne-urle.html
Tylko, że u Ciebie nie chodzi o ładne linki tylko o zmienne nazwy. Ale mechanizm postępowania jest ten sam.
kiepski96
Czy to losuje linki cały czas ?
Że jak wejdę i wyjdę,potem jeszcze raz to będzie cały czas jakiś inny link ?

Bo jak nie to jeszcze mógłbym zrobić tak,aby dało się wpisać jakiś tekst tego linku nowego .
nospor
To co ci podałem nic nie losuje. To jest mechanizm tego co zaproponował ci pyro w php. Jak chcesz tam coś losować to musisz dorobić smile.gif
kiepski96
Więc radzisz mi zastosować to :

Tylko nie wiem,gdzie mogę wpisać tekst tego linku nowego .
  1. <?php
  2. public function Url($path = null){
  3. if (empty($path)) //pusta ścieżka
  4. $pars = array();
  5. else
  6. $pars = explode('&', $path);
  7. $params = array();
  8. foreach ($pars as $_param){
  9. $_arP = explode('=',$_param,2); //par=war dzielimy na par i war
  10. $params[$_arP[0]] = isset($_arP[1]) ? $_arP[1] : '';
  11. }
  12. $strRet = '';
  13. if (!empty($params)){
  14. foreach ($params as $_key => $_val){
  15. if ($_key == 'module' || $_key == 'action')
  16. $_key = '';
  17. else
  18. $_key.='/';
  19. $strRet.="$_key$_val/";
  20. }
  21. }
  22. return $this->baseUrl.htmlspecialchars($strRet);
  23. }
  24. ?>
nospor
Wywoływać będziesz:
$nurl->Url('xxx.php');
A w funkcji Url sprawdzisz, czy $path jest xxx.php Jeśli tak to pobierasz z bazy aktualny adres jaki chcesz temu przypisać i zwracasz go.
Analogicznie w funkcji Decode() - sprawdzasz czy podany adres jest w bazie i jeśli tak to includujesz xxx.php
kiepski96
Chyba nie piszemy o tym samym .
Za słabo wytłumaczyłem .

Chciałbym ,aby link został tak zamaskowany :

www.domena.pl/$odczytzbazy

$odczytzbazy - To wyświetla co jest wpisane w bazie . Oczywiście do tego trzeba dać parę innych rzeczy aby wczytywało.

pmir13
Proponowałbym powiązać linki z sesją, nie z bazą danych. Możesz to zrobić dowolnie, przez mod_rewrite, przez header(), nawet przez zwykły parametr przesyłany w $_GET[]. Czyli linki przykładowo typu index.php?link=9e550cd2f9 itp. Z bazą danych masz problem, bo musisz linki regularnie usuwać, jeśli będziesz robić to w cronie to może się zdarzyć, że cron wykasuje linki w krótkim odstępie czasu tuż po wygenerowaniu tego linku, zanim użytkownik ten link kliknie. Z sesjami masz problem z głowy kiedy sesja wygasa. Po prostu jeśli w sesji jeszcze żadnych linków nie ma to generujesz pary właściwy link lub akcja do wykonania + losowy ciąg znaków tam gdzie wyświetlasz na stronie te linki i zapisujesz w sesji, a jeśli są, używasz tych co są. Wchodząc na dany link php szuka w sesji tego losowego ciągu i wykonuje akcje odpowiednie dla danej pary. Jak ktoś doda do zakładek to przestanie mu działać jak tylko sesja wygaśnie.
nospor
Cytat
Chyba nie piszemy o tym samym .
O tym samym smile.gif
kiepski96
Wolę to z sesjami .
Lecz nie mam pojęcia jak ma wyglądać kod.
Najlepiej aby link wyglądał tak jak to :

index.php?link=9e550cd2f9

No i nowa sesja= nowy link
pmir13
  1. <?php
  2.  
  3. function zakodowana_akcja( $akcja )
  4. {
  5. if( !isset($_SESSION["$akcja"] ))
  6. {
  7. $dlugosc = 10; // max 32
  8. $link = md5(uniqid(rand(), true));
  9. $link = substr( $link, 0, $dlugosc );
  10. $_SESSION["$akcja"] = $link;
  11. return $link;
  12. }
  13. else
  14. return $_SESSION["$akcja"];
  15. }
  16.  
  17. function odkodowana_akcja( $link )
  18. {
  19. foreach( $_SESSION as $odkodowana=>$zakodowana )
  20. if( $link == $zakodowana )
  21. return $odkodowana;
  22. return "error";
  23. }
  24.  
  25. echo "<a href=index.php?akcja=".zakodowana_akcja("info").">info</a><br />";
  26.  
  27. if ( !isset( $_GET['akcja'] ) )
  28. $_GET['akcja']="";
  29. $akcja = preg_replace("/[^a-zA-Z0-9]/","",$_GET['akcja']);
  30.  
  31. if( odkodowana_akcja( $akcja ) == "info" )
  32. echo "Kliknieto info<br />";
  33.  
  34. ?>
kiepski96
Jesteś bogiem ! smile.gif
Masz Pomógł !

A teraz pytanie :

Bo mam na stronie,np. yyy.php odnośnik do właśnie strony xxx.php , która zmienia linka.
To jak zrobić,aby nie było widać ,że klikając wchodzę w xxx.php ?
pmir13
Ale po co ukrywać skoro teraz sprawdzasz zakodowane wartości? Jak ktoś zapisał sobie link a nie ma zapisanej w sesji odpowiadającej mu akcji to sobie może klikać do woli a i tak nie wykona się to co jest w środku
  1. if( odkodowana_akcja( $akcja ) == "info" )
  2. {
  3. // dużo kodu wypisującego coś tam na stronie
  4. }

Odpal ten plik, pobaw się, zapisz w zakładkach link, a potem spróbuj wejść z zakładek po wyczyszczeniu cookies.
kiepski96
Ok,no i teraz tam gdzie chcę ukryć link to biorę zakodowaną akcję ,czyli :

  1.  
  2. function zakodowana_akcja( $akcja )
  3. {
  4. if( !isset($_SESSION["$akcja"] ))
  5. {
  6. $dlugosc = 10; // max 32
  7. $link = md5(uniqid(rand(), true));
  8. $link = substr( $link, 0, $dlugosc );
  9. $_SESSION["$akcja"] = $link;
  10. return $link;
  11. }
  12. else
  13. return $_SESSION["$akcja"];
  14. }



A tam gdzie jest odnośnik to :

  1. function odkodowana_akcja( $link )
  2. {
  3. foreach( $_SESSION as $odkodowana=>$zakodowana )
  4. if( $link == $zakodowana )
  5. return $odkodowana;
  6. return "error";
  7. }
  8.  
  9. echo "<a href=index.php?akcja=".zakodowana_akcja("info").">info</a><br />";
  10.  
  11. if ( !isset( $_GET['akcja'] ) )
  12. $_GET['akcja']="";
  13. $akcja = preg_replace("/[^a-zA-Z0-9]/","",$_GET['akcja']);
  14.  
  15. if( odkodowana_akcja( $akcja ) == "info" )
  16. echo "Kliknieto info<br />";



Dobrze rozumiem ?
pmir13
Funkcje definiuje się raz na początku pliku, potem można je wielokrotnie wywoływać. Jeśli masz więcej plików umieszczasz funkcje w osobnym i w pozostałych robisz include.

Za każdym razem gdy na stronie chcesz umieścić jakiś link to go kodujesz
  1. echo "<a href=index.php?akcja=".zakodowana_akcja("info").">info</a><br />";


Ten fragment pobiera zakodowany link z urla i umieszcza w zmiennej $akcja, też tylko raz go potrzebujesz (lub raz na każdy plik).
  1. if ( !isset( $_GET['akcja'] ) )
  2. $_GET['akcja']="";
  3. $akcja = preg_replace("/[^a-zA-Z0-9]/","",$_GET['akcja']);


Wszędzie gdzie chcesz wyświetlać na stronie treść, która ma nie być dostępna przez zakładki umieszczasz kod w bloku sprawdzając czy w sesji jest odpowiednia akcja.

Tylko że my nie jesteśmy w dziale Przedszkole a to są zupełne podstawy. Jeśli tego nie ogarniasz to ludzie, którzy próbują ci pomóc niepotrzebnie tracą czas.
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.