2016-01-20 103 views
0

我做了一個使用$ _GET方法的搜索框。我搜索類別和大小。我怎樣才能替換一個字符串在PHP網址

當類別搜索提交我的網址變爲:

index.php?category=1 

通過:

<li class=""><a href="index.php?category=<?php echo $category['id']; ?>"><?php echo $category['name']; ?></a></li> 

當大小提交我的網址是:

index.php?category=1&size=1 

通過:

<li id=""> 
<a href="<?php echo $_SERVER['REQUEST_URI'].'&size='; ?><?php echo $size['id']; ?>"><?php echo $size['name']; ?></a> 
</li> 

當我尋找其他尺寸我有:

index.php?category=1&size=1&size=2 

我怎麼只需更換大小,而不是在我的網址重新添加呢?改用的

<?php echo $_SERVER['REQUEST_URI'];?> 

REQUEST_URI

+0

可能的重複[如何在PHP中的get查詢中替換一個變量?](http://stackoverflow.com/questions/1331015/how-can-i-replace-a-variable-in-a-得到的查詢功能於PHP) –

回答

0

您必須使用http_build_query函數從關聯數組參數中構建您的URL。並儘量避免直接在模板中進行。將此代碼至少移到控制器級別。

// Somewhere at the controller 
$category = ...; 
$size = ...; 
$searchParams = array(); 
if (!empty($category)) { 
    $name = $category['name']; 
    $searchParams['category'] = $category['id']; 
} 
if (!empty($size)) { 
    $name = $size['name']; 
    $searchParams['size'] = $size['id']; 
} 
$searchQuery = http_build_query($searchParams); 

// Somehow pass it to the template 
$this->addViewVar('searchUrl', $_SERVER['REQUEST_URI'] . $searchQuery); 
$this->addViewVar('searchName', $name); 

而且在模板中只使用searchUrl變量:

<li class=""><a href="<?php echo $searchUrl; ?>"></a><?php echo $searchName; ?></li> 

另一種方式來完成這個任務,如果你沒有一個單獨的控制器的水平,這是創造的特殊功能build_search_url()search_name()

function build_search_url($path, $category = null, $size = null) { 
    $searchParams = array(); 
    if (!empty($category)) { 
     $searchParams['category'] = $category['id']; 
    } 
    if (!empty($size)) {   
     $searchParams['size'] = $size['id'];  
    }   
    $searchQuery = http_build_query($searchParams); 
    return $path . $searchQuery; 
} 

,然後用它是這樣的:

<li class=""> 
    <a href="<?php echo build_search_url($_SERVER['REQUEST_URI'], $category, $size); ?>"> 
     <?php echo search_name($category, $size); ?> 
    </a> 
</li> 
0

<?php echo $_SERVER['PHP_SELF'];?> 

是增加查詢字符串您的要求。

其中PHP_SELF給出純文件名例如index.php

0

最簡單的方式恕我直言:

設置在$ _GET索引的新值(或副本,如果你不想操縱原始數組) - 然後用http_build_query創建新的查詢字符串。

0

你應該在你的「href」標籤中調用一個函數。 裏面,使用http_build_query($array)重建陣列。

$data = array('category' => $_GET['category']); 
$data['size'] = $_GET['size'] ? $_GET['size'] : NEW_SIZE; 

function getQuery($data) { 
    return http_build_query($data); 
} 

您還可以使用$ _ SERVER [「REQUEST_URI」],但我不知道該功能將取代您的項目值,而不是將其添加到查詢的結束。

相關問題