Jump to content
seltix

Regex para alterar os $REQUESTs

Recommended Posts

seltix

viva,

criei uma função "changeRequest" que me vai permitir alterar o valor de uma variavel $REQUEST existente no endereço e retorna como string para depois utilizar como link.

poderia simplesmente percorrer o array $REQUEST e reconstruir o endereço na totalidade, no entanto, isto limitaria o uso da função apenas para o endereço da pagina actual.

como solução pretendo utilizar o preg_replace mas estou com algumas dificuldades em construir o regex como deve de ser.

neste momento estou a fazer o seguinte :

$url = preg_replace('/(\?|&|&)'.$var.'=(.*)[^&|&]&/i', '$1',$url, -1);

$url = preg_replace('/(\?|&|&)'.$var.'=(.*)[^&|&]/i', '',$url, -1);

No entanto se tiver por exemplo o seguinte endereço :

http://demos.braldesign.com/happygroup/bdmanager/include/user/Panel.htm?pag=1&n=10&o1=&o2=ASC

E tentar alterar "pag" para 2, o resultado está erra :

http://demos.braldesign.com/happygroup/bdmanager/include/user/Panel.htm?o2=ASC&pag=2

Em vez de :

http://demos.braldesign.com/happygroup/bdmanager/include/user/Panel.htm?n=10&o1=&o2=ASC&pag=2

As regras são:

1º - O match começa com "?" ou "&"

2º - "nome_da_variavel="

3º - Grupo de caracteres vazio ou não, cujo a unica excepção é nenhum deles ser igual a &

4º - Terminará ou não com &

Foi por causa do 4º ponto que utilizo dois preg_replace.

Desde já um grande obrigado.

Share this post


Link to post
Share on other sites
seltix

viva,

pois acredito q esteja, daí nao estar a dar o resultado que quero ;)

é muito simples, o php utiliza as variáveis de endereço ($_REQUEST), a ideia é pegar no endereço que é uma string e substituir o valor da variavel ou apaga-lo. a sintax das $_REQUEST é

dominio.com/pagina.php?nome_var1=valor1&nome_var2=valor2&nome_var3=valor3

a sequencia do meu programa é, apagar a variavel caso exista (1º passo) e adicionar o novo valor caso indicado (2º passo), daí no meu exemplo a varivel "pag" ser apagada do inicio e aparecer depois no fim. O problema ali é que o preg_replace esta a substituir mais do que devia :S

Share this post


Link to post
Share on other sites
ruimcosta

Só uma questão (não relacionada com o regex):

Não utilizes o $_REQUEST, pois este obtem resultados por exemplo do $_GET e/ou $_POST. Sê específico e restrito para evitares entradas indesejadas.


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
brunoais

@seltix

Estás a trocar demasiada coisa!

O $REQUEST o $GET e o $POST NÃO SÃO STRINGS

Isso está bem claro no manual de instruções do PHP.

Vê se o q queres é uma coisa do género:

$link = 'http://demos.braldesign.com/happygroup/bdmanager/include/user/Panel.htm?pag=' . $GET['pag'] . '&n=' . $GET['n'] . '&o1=' . $GET['o1'] . '&o2=' . $GET['o2'];


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
seltix

Só uma questão (não relacionada com o regex):

Não utilizes o $_REQUEST, pois este obtem resultados por exemplo do $_GET e/ou $_POST. Sê específico e restrito para evitares entradas indesejadas.

entao qual é o especifico para as variaveis de endereço? o GET? pensei que o _REQUEST era so para essas... ;)

sim eu sei, so estou a utilizar isso para a escolha de pagina e afins, tudo variáveis de apresentação que nao alteram nada.

@seltix

Estás a trocar demasiada coisa!

O $REQUEST o $GET e o $POST NÃO SÃO STRINGS

Isso está bem claro no manual de instruções do PHP.

Vê se o q queres é uma coisa do género:

$link = 'http://demos.braldesign.com/happygroup/bdmanager/include/user/Panel.htm?pag=' . $GET['pag'] . '&n=' . $GET['n'] . '&o1=' . $GET['o1'] . '&o2=' . $GET['o2'];

pois, eu ja tinha pensado nessa solução, mas foi como disse, teria de estar na propria pagina para fazer isso.

eu sei q nao sao strings lol :P mas o preg_replace utiliza uma string, por isso basta me usar o $_SERVER['REQUEST_URI'] (no caso de estar na pagina em questão) para manter o estado actual do url fazendo apenas as alteraçoes necessarias...

Share this post


Link to post
Share on other sites
brunoais

Então explica o q queres. Ainda não percebi o teu problema.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
brunoais

Podes contextualizar melhor o problema? É que parece-me que existem soluções melhores para o teu problema e, provavelmente, mais fáceis de implementar.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
seltix

quero simplesmente pegar num endereço, e poder alterar o valor de uma das variaveis. como o endereço é uma string a unica possibilidade que vejo será o replace por regex.

Share this post


Link to post
Share on other sites
seltix

sim, era uma possivel solução, mas n sei ate que ponto um regex n seria mais facil ...

o regex que fiz so ta mesmo a darr problema no "(.*)" e nao sei o suficiente para perceber porque.... :S

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.