Jump to content

Criar links


got_r00t?

Recommended Posts

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

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

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

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

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.