2009-08-08 48 views
2

如何在URL中傳輸變量(如ask_question),以便通過給定規則更改index.php的外觀?在URL中傳輸數據

,我有以下鏈接在我index.php

<a href="index.php?ask_question">Ask question</a> 

然而這並沒有工作,因爲我不知道你怎麼能指ask_question在URL -variable。如果我知道這一點,我可以閱讀它,然後根據URL中的名稱自定義我的index.php。

我也可以創建以下鏈接,但這會導致我有大量重複的數據,例如login-form的PHP代碼。

<a href="ask_question.php">Ask question</a> 

我ask_question.php - 形式

<form method="post" action="handlers/handler_question.php"> 
    <p>Title: 
     <input name="title" type="text" cols="92" /> 
    </p> 
    <p>Question: 
     <div id="wmd-container" class="resizable-textarea"> 
       <textarea id="input" class="textarea" tabindex="101" rows="15" cols="92" name="body" /></textarea>                      
     </div> 
    </p> 

    <p>Tags: 
     <input name="tags" type="text" cols="92" /> 
    </p> 

    <input type="submit" value="OK" /> 
</form> 
+2

關於重複數據,可以存儲的東西像你的登錄表單在一個單獨的文件,然後將它們放置在任何文件使用include() – 2009-08-08 15:02:08

+0

謝謝你的回答! – 2009-08-08 15:34:17

回答

3
if(isset($_GET['ask_question')) { 
...do something... 

} 

更妙的是,因爲$ _GET超全局是一個數組:

if(array_key_exists('ask_question',$_GET)) { 
    ...do something... 
} 

此外,手冊上說這對使用array_key_existsisset的:

對於數組 鍵,isset()不返回TRUE,對應於NULL值, whi le rray_key_exists()呢。

但是,你不能傳遞一個空值,它只會在PHP中顯示爲空字符串,這樣既issetarray_key_exists在這種情況下做同樣的事情。

閱讀預定義變量:

http://www.php.net/variables.predefined

並查找功能issetarray_key_exists

+1

爲什麼'array_key_exists'比'isset'更好。我只看到一個區別,它似乎與'$ _GET'數組無關。 – SilentGhost 2009-08-08 15:07:19

+1

@SilentGhost - 因爲GET是一個數組,所以使用一個明確地爲特定的鍵測試它的函數會更清楚 - 儘管可以說兩者都爲此目的做了同樣的事情。 – karim79 2009-08-08 15:12:25

+1

@SilentGhost - 請參閱我的編輯。 – karim79 2009-08-08 15:17:11

1

所有GET變量(那些在URL)陣列中的最終叫$ _GET。隨着isset()你然後可以檢查一個特定的變量是否在URL中傳遞。

if (isset($_GET['ask_question'])) { 
    // go... 
} 
1

查詢參數保存到$ _GET對象。你可以使用isset測試參數的存在:

if(isset($_GET['ask_question'])){ 
} 

如果你想傳遞變量爲TE自由GET或POST,則可以使用$ _REQUEST超全局:

if(isset($_REQUEST['ask_question'])){ 
} 
1

您可以訪問與$ _GET超全球。

在這種情況下(因爲你沒有定義ask_question的值),你可以這樣做:

if (array_key_exists('ask_question', $_GET) === true) 
{ 
    // do stuff 
} 
+1

isset()仍然適用於此用途,儘管它對知道所有數組函數非常有用。 – 2009-08-08 15:01:08

1

使用isset($_GET['NAME_IN_URL'])。這將返回truefalse,您可以使用簡單的if語句進行評估。

例子:

if (isset($_GET['ask_question']) { 
    //Echo your form... 
    } 
else { 
    //Echo the normal index.php 
    } 

還要注意的是鏈接到查詢字符串的時候,你可以做,這樣,如果該文件被重命名它仍然有效。

1

爲什麼不這樣做

<a href="index.php?query= ask_question"/> 

在HTML代碼?

然後在你的index.php腳本,你可以檢查query是否是ask_question使用下面的命令:

if($_GET['query']=='ask_question') 
    // change the layout as you wish 
else 
    // proceed with not changing the layout