PHP kalıcı HTTP GET değişkenleri

5 Cevap php

Diyelim ki, bu gibi bazı kod var diyelim

if(isset($_GET['foo']))
  //do something

if(isset($_GET['bar']))
  //do something else

Bir kullanıcı example.com /? Foo = abc ve bar = xyz ayarlamak için bir linke tıkladığında, ben kolayca example.com /? Foo = abc & bar = xyz yerine example.com / götürmek istiyorsanız at ise ? bar = xyz.

Bunu yapmak için bir kaç çok dağınık yollar düşünebilirsiniz, ama hakkında ben bilmiyorum ki temiz bir şey var eminim ve Google üzerinden izini mümkün olmamıştır.

5 Cevap

İşte tek yolu ....

//get passed params
//(you might do some sanitizing at this point)
$params=$_GET;

//morph the params with new values
$params['bar']='xyz';

//build new query string
$query='';
$sep='?';
foreach($params as $name=>$value)
{
    $query.=$sep.$name.'='.urlencode($value);
    $sep='&';
}

Eğer emin ot gerekir sorgu dizesi güncelliyoruz Eğer böyle bir şey yapmıyoruz

$qs="a=1&b=2";
$href="$qs&b=4";
$href contains "a=1&b=2&b=4"

What you really want to do is overwrite the current key if you need to . You can use a function like this. (disclaimer: Off the top of my head, maybe slightly bugged)

	function getUpdateQS($key,$value)
	{
	   foreach ($_GET as $k => $v)
	   {
			if ($k != $key)
			{
				$qs .= "$k=".urlencode($v)."&"
			}
			else
			{
				$qs .= "$key=".urlencode($value)."&";
			}
		}
		return $qs
	}

    <a href="reports.php?<?getupdateqs('name','byron');?">View report</a>

Sadece ayrıca foo var xyz çubuğu değişiklikleri linki set = foo zaten ayarlı abc eğer.

$link = ($_GET['foo'] == 'abc') ? 'foo=abc&bar=xyz' : 'bar=xyz';
?>
<a href="whatever.php?<?= $link ?>">Click Me</a>

Bunun gerçekleşmesi için uygun URL sorgu dizesi ile bağlantıları render olurdu. Bu sistem kurulum nasıl bağlı olarak ucunda yapmak gerekir bir tasarım kararı.

Ben bu sorunu var bazı siteler var, ve ne yapmam kurulum Geçerli sayfa verilerini sayfa isteği üst ayarlar bir sorgu dizesi global değişkendir.

Ben, sayfa render ettiğimde geçerli sorgu dizesi faydalanmak için gerekiyorsa o zaman ben gibi bir şey yapın:

echo '<a href="myurl.php' . querystring . '&bar=foo';

Bu temiz değil, ama tüm sistem nasıl bağlıdır.

Bazı kod kaydetmek ve dahili kullanabilirsiniz http_build_query. Benim projelerinden birinde bu sarıcı kullanın:

function to_query_string($array) {
    if(is_scalar($array)) $query = trim($array, '? \t\n\r\0\x0B'); // I could split on "&" and "=" do some urlencode-ing here
    else $query = http_build_query($array);
    return '?'.$query;
}

Genellikle kullanılmıyor olsa da, o bir atamanın sol tarafta $ _GET olabilir:

$_GET['overriden_or_new'] = 'new_value';
echo '<a href="'.to_query_string($_GET).'">Yeah!</a>';

Bunun dışında, sadece do what Paul Dixon said.