got_r00t? Posted November 12, 2009 at 01:04 PM Report Share #295814 Posted November 12, 2009 at 01:04 PM Boas, Alguém tem alguma função para modificar o que já esta no get ? Por exemplo, estou na pagina: http://localhost/Game/?lang=pt&page=register Agora quero criar um link com por exemplo : http://localhost/Game/?lang=en&page=register PS: ops, só agora é que vi que meti na secção errada, dêem move plz. Link to comment Share on other sites More sharing options...
got_r00t? Posted November 12, 2009 at 01:59 PM Author Report Share #295826 Posted November 12, 2009 at 01:59 PM bem, criei uma função para me fazer o que quero... mas cm ainda so mt novo nisto de php, não sei se há maneiras mais fáceis de o fazer... <?php function build_url($var, $str) { $string = $_SERVER["REQUEST_URI"]; if(isset($_GET["$var"])){ $var_first_pos = strpos($string, $var); //Find the first position of the $var. $str_first = $var_first_pos + strlen($var) + 1; //Define where the $var will end, add +1 for the "=" in the link. $str_last = strpos($string, "&", $str_first); //Gets the last position. The position returned from the "&", is the first one. if ($str_last == 0){ $str_last = strlen($string); //If the $str is in the last position then use the length of all url. } $url = substr_replace($string, $str, $str_first, ($str_last - $str_first)); //Replace the old content return $url; }else{ $url_is_filled = strpos($string, "?"); if ($url_is_filled == 0){ $url = "?" . $var . "=" . $str; return $url; }else{ $url = $string . "&" . $var . "=" . $str; return $url; } } } ?> <a href="<?php echo build_url("lang","en"); ?>">EN</a> sugestões ? Link to comment Share on other sites More sharing options...
got_r00t? Posted November 16, 2009 at 03:48 AM Author Report Share #296431 Posted November 16, 2009 at 03:48 AM epaa, isto sem respostas é difícil de saber se há outras possibilidades para isto ou não xD sem ideias melhores continuei a desenvolver a função anterior, que ainda tinha muitos erros... Pois bem, a seguinte função tenta criar links válidos, e preserva os valores que já la estão... ah, caso haja mais que 1 variável igual a pedida ela apaga-a. <?php function build_url($var, $str) { $string = $_SERVER["REQUEST_URI"]; if(isset($_GET[$var])){ $var_first = strpos($string, $var); //Find the position of the $var. $str_first = $var_first + strlen($var); //Define where the $var will end. $str_last = strpos($string, "&", $str_first); //Gets the position of the next element, if exists. if ($str_last === false){ $url = substr_replace($string, "=" . $str, $str_first); //Dont exist other element, replace and exit. }else{ $url = substr_replace($string, "=" . $str, $str_first, ($str_last - $str_first)); //Replace the content, and start filtering possible copys ahead. $filter_del = strlen($var); //Define the deleating length. $filter_start = $str_last; //Start searching from the end of the replace, just rename the variable. $i = 0; while ($i == 0){ $filter_search = strpos($url, $var, $filter_start); //Search the position of any other $var. if ($filter_search !== false){ //If false means there is no more copys to delete. $url = substr_replace($url, "", $filter_search, $filter_del); //Detele the copy of $var. }else{ $i = 1; //Exit while. } } } return $url; }else{ //Build url if still empty. $url_is_filled = strpos($string, "?"); if ($url_is_filled === false){ $url = "?" . $var . "=" . $str; return $url; }else{ $url = $string . "&" . $var . "=" . $str; return $url; } } } ?> Exemplo: Link: <a href="<?php echo build_url("lang","en"); ?>">EN</a> Na Url: http://localhost/Game/?lang&page=register〈=pt〈=en&var1=1&var2=2 Link criado: http://localhost/Game/?lang=en&page=register&=pt&=en&var1=1&var2=2 Se souberem de outras alternativas, apitem ai. Cumprimentos Link to comment Share on other sites More sharing options...
softklin Posted November 16, 2009 at 09:22 AM Report Share #296435 Posted November 16, 2009 at 09:22 AM Tenta lá isto: <?php // função para gerar o texto de uma query string function queryToString($theQS) { if (empty($theQS)) return ""; $finalqs = "?"; foreach ($theQS as $k=>$v) { $finalqs .= "$k=$v&"; } // remover o & final xD $finalqs = substr($finalqs, 0, -1); return $finalqs; } // função para modificar ou adicionar parâmetros de um URL function build_url($k, $v) { // obter a query string corrente (parâmetros no endereço depois do ? ) $qs = $_GET; $curPage = $_SERVER['PHP_SELF']; // actualizar o valor da query string $qs[$k] = $v; // construir o endereço e devolvê-lo $finalURL = $curPage . queryToString($qs); return $finalURL; } echo build_url("chave", "valor"); ?> Para chamar, basta fazer como fazias com a tua função: <a href="<?php echo build_url("lang", "en"); ?>">link</a> Não tive oportunidade de a testar, mas a lógica é aproveitar o array GET e editar/adicionar directamente a entrada que queres no array. A função queryToString, como o nome indica, encarrega-se de passar o array para string. Ideia adaptada de http://www.rotsystems.com/articles/php/how-to-get-query-string-in-php Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
got_r00t? Posted November 16, 2009 at 04:37 PM Author Report Share #296498 Posted November 16, 2009 at 04:37 PM humm, também me parece uma boa aproximação, essa de meter o get em array 😛 Obrigado pela resposta, ainda tenho mt a aprender nisto de php ^_^ Link to comment Share on other sites More sharing options...
softklin Posted November 16, 2009 at 05:14 PM Report Share #296503 Posted November 16, 2009 at 05:14 PM Atenção que o meu código que tinha colocado tem lá bastantes faltas de atenção, nomeadamente na concatenação de strings, e não faz nada do que é pedido... Corrigi, e testei com sucesso o código realizado. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
got_r00t? Posted November 16, 2009 at 06:56 PM Author Report Share #296516 Posted November 16, 2009 at 06:56 PM ya ya, tinha percebido que era só a ideia, eu também já tinha estado a corrigir o código ^_^ Obrigado 😛 Link to comment Share on other sites More sharing options...
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