• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

got_r00t?

Criar links

7 mensagens neste tópico

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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

humm, também me parece uma boa aproximação, essa de meter o get em array  :P

Obrigado pela resposta, ainda tenho mt a aprender nisto de php ^_^

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ya ya, tinha percebido que era só a ideia, eu também já tinha estado a corrigir o código ^_^

Obrigado  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora