seltix 0 Posted April 4, 2011 Report Share Posted April 4, 2011 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. Link to post Share on other sites
yoda 126 Posted April 4, 2011 Report Share Posted April 4, 2011 Explica bem o que pretendes, com exemplos. As expressões que estás a usar não me parecem coerentes, e não estão bem estruturadas. before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to post Share on other sites
seltix 0 Posted April 5, 2011 Author Report Share Posted April 5, 2011 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 Link to post Share on other sites
ruimcosta 0 Posted April 5, 2011 Report Share Posted April 5, 2011 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 Link to post Share on other sites
brunoais 65 Posted April 5, 2011 Report Share Posted April 5, 2011 @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%. Link to post Share on other sites
seltix 0 Posted April 5, 2011 Author Report Share Posted April 5, 2011 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 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... Link to post Share on other sites
brunoais 65 Posted April 5, 2011 Report Share Posted April 5, 2011 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%. Link to post Share on other sites
seltix 0 Posted April 5, 2011 Author Report Share Posted April 5, 2011 queria ajuda no regex indicado para o replace lol Link to post Share on other sites
brunoais 65 Posted April 6, 2011 Report Share Posted April 6, 2011 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%. Link to post Share on other sites
seltix 0 Posted April 7, 2011 Author Report Share Posted April 7, 2011 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. Link to post Share on other sites
yoda 126 Posted April 7, 2011 Report Share Posted April 7, 2011 Podes reconstruir o url à tua maneira, usando explode por exemplo, e substr. Provavelmente mais fáceis before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to post Share on other sites
seltix 0 Posted April 7, 2011 Author Report Share Posted April 7, 2011 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 Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now