![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Mam problem ze stworzeniem schematu stringa i pozyskiwaniem dzieki niemu odpowiednich zmienych.
Na samym wstepie spotkalem sie z problemem przy funkcji sscanf. Przy kodzie: [php:1:a4eed5a715]<?php $schema = "index.php?/{module}/{action}"; $link = "index.php?/admin/show_actions"; $translate = array( "{module}" => "%2$s", "{action}" => "%1$s", ); $schema = strtr( $schema, $translate); $n = sscanf($link, $schema); ksort($n); print_r($n); ?>[/php:1:a4eed5a715] zwraca ona: Kod Array
( [0] => [1] => [4] => admin/show_actions ) a wiec nie traktuje ona '/' jako przerwy i przyporzadkowywuje nastepna zmienna do pierwszej. W manualu znalazlem cos takiego Cytat An optional padding specifier that says what character will be used for padding the results to the right string size. This may be a space character or a 0 (zero character). The default is to pad with spaces. An alternate padding character can be specified by prefixing it with a single quote ('). See the examples below.
Problem w tym ze przykladow nie ma a uzycie ' jako prefiksu przed slashem nie pomaga. Drugi problem jaki sie pojawi to to ze link moze miec zmienna liczbe parametrow i nie za bardzo sobie wyobrazam (jeszcze?) jak pozniej zapetlic reszte parametrow aby schemat Kod $schema = "index.php?/{module}/{action}/{paramName}/{paramValue}"; dzialal rowniez w przypadku Kod "index.php?/admin/show_actions/param1/value1/param2/value2"
Ogolnie mowiac nie uperam sie przy tym sposobie. Jesli ktos ma lepszy to bede wdzieczny za udzielenie wskazowek, jesli jedak nie to moze ktos sie przyjzy powyzszemu kodowi. Z gory dziekuje. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 19.02.2004 Skąd: Piaseczno Ostrzeżenie: (0%) ![]() ![]() |
Podejrzewam, ze o tym wiesz, ale efekt, który chcesz osiągnąc można zorganizować na poziome serwera www.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 19.02.2004 Skąd: Piaseczno Ostrzeżenie: (0%) ![]() ![]() |
albo moze tak:
[php:1:410e191437]<?php $string="index.php?var1/value1/var2/value2" ; $string = substr($string,strpos($string,'?')+1); $temp = explode('/',$string); $i=0; while(isset($temp[$i+1])) { $array[$temp[$i]] = $temp[$i+1]; $i+=2; } print_r($array); ?>[/php:1:410e191437] Nie wiem czy o to Ci chodzi, ale w każdym taka instrukcja ppowinna zwrócić tablice assocjacyjna z odpowiednimi wartosciami. Problem pojawi się, gdy w adresie nie kazdą wyliczona zmienna będzie miała przypisaną wartosc. UPDATE mnostwo tu bledow zaraz poprawei:) UPDATE2 ok teraz dziala:) |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Cytat Podejrzewam, ze o tym wiesz, ale efekt, który chcesz osiągnąc można zorganizować na poziome serwera www.
Jesli chodzi ci o mod_rewrite to nie mozna. Server moze przekierowac cie na strone jesli adres spelnia odpowiedni warunek ale to nie o to mi chodzi. Zalezy mi na wyciagnieciu danych z istniejacejacego linka a to jak ten link mialby wygladac to kwestia mojej wyobrazni a w tym konkretnym przypadku server nie ma nicdo rzeczy. Update rmn twoj sposob jest sztywny a mi wlasnie chodzi o elastycznosc (nie pozamieniasz kolejnosci wyrazen, nie zmienisz separatorow i wogole niczego ie mozesz zmienic) pozatym na tej zasadzie dekodowanielinka juz u mnie dziala |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 19.02.2004 Skąd: Piaseczno Ostrzeżenie: (0%) ![]() ![]() |
dziwne sscanf ze spacjami w schema dziala a ze salhami albo | nie..
|
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Cytat A wyrazenia regularne?
Wyrazenia regularne sa dobre do pozyskania jednej wartosci, nie do uzyskania kilku zmiennych, a niechcialbym miec do kazdej zmiennej osobnego wyrazenia. uff nie myslalem ze problem okaze sie tak zakrecony :/ |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 19.02.2004 Skąd: Piaseczno Ostrzeżenie: (0%) ![]() ![]() |
adnotacja do ostatniego mojego updatu:
Chodziło mi o to,że [php:1:d17241520e]<?php $n = sscanf("index.php? admin show_actions", "index.php? %s %s"); ?>[/php:1:d17241520e] zadzaiała a [php:1:d17241520e]<?php $n = sscanf("index.php?/admin/show_actions", "index.php?/%s/%s"); $n = sscanf("index.php?|admin|show_actions", "index.php?|%s|%s"); ?>[/php:1:d17241520e] nie zadziałaja.. dobra ide sapc:) |
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Cytat nie zadziałaja.. wlasnie nie zadziala :/ (zobacz pierwszy post (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ) , ale juz sobie z tym poradzilem wprowadzajac %[^/] . Jednak pojawil sie eszcze jeden problem. Wykorzystujac %1/$[^/] powoduje ze znalezony element jest dodawany na poczatek tablicy potem umieszczam jeszcze drugi ale nastepne elementy chcialbym juz dodawac jak na stos jeden za drugim - niestety narazie jest to niemozliwe
Cytat cannot mix "%" and "%n$" conversion specifiers .
Moze jak nad tym jeszcze posiedze to sie uda jakos to obejsc. Czy naprawde nikt nie zna prostszego sposobu? Update: %1/$[^/] - jest o dupe rozczasc - niby dziala, jak kombinujesz z parametrem to zmienia sie pozycja znalezonego stringa w zwroconej tablicy, ale jak przesuniesz wyrazenie w stringu to tez zmienia pozycje w tablicy grrrr.... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:33 |