2014-02-22 20 views
3

我在PHP初學者,目前,張貼在URI地址變量我使用(添加或在必要時):變量追加到URI在一個通用的方法

echo "<form method='POST' action='".$_SERVER['REQUEST_URI']."&myvar=".$myvar."'>"; 

,但它不工作時因爲沒有參數(在主地址之後沒有?),所以URI就像wwww.mysite.com/index一樣。那麼如何以通用的方式在地址中傳遞php參數呢?

+0

使用?而不是&第一個參數 – Fabio

+0

整個問題是,我希望這是通用的(當我添加一些東西,我不知道它是第1還是第1834個參數...) – Vincent

+0

您可能想要設置一個函數來計數參數並將添加?對第一個和其他人投擲一個循環。如果uri已經有參數,則需要解析它並添加函數 – Fabio

回答

3

您可以使用parse_urlparse_str組合,並http_build_query

// build URL with query 
function q($url, array $params) { 
    return parse_url($url, PHP_URL_PATH) . '?' . http_build_query($params); 
} 

// build URL and expand query 
function qe($url, array $new_params, $overwrite = true) { 
    parse_str(parse_url($url, PHP_URL_QUERY), $params); 
    if ($overwrite) { 
     $new_params = $new_params + $params; 
    } else { 
     $new_params = $params + $new_params; 
    } 
    return q($url, $new_params); 
} 

$url = qe($_SERVER['REQUEST_URI'], array('myvar' => $myvar)); 
echo "<form method='POST' action='".htmlspecialchars($url, ENT_QUOTES)."'>"; 
1

只要先檢查是否存在任何字符。例如。

$link = $_SERVER['REQUEST_URI']; 
if (substr_count($link, '?') == 0) { 
    $link .= '?'; 
} 
echo "<form method='POST' action='".$link."&myvar=".$myvar."'>"; 
+0

實際上,'?'是不是最後一個字符 – Vincent

+0

我發佈了錯誤的函數後才意識到 - 用'substr_count'替換。 –

+0

如果URI不包含查詢字符串,則您的代碼工作不正確。例如。對於'REQUEST_URI =「mysite.com/index」'它返回''mysite.com/index?&myvar=$myvar「' – hindmost