來自 PHP 之外的變量(HTML 表單中的數組、變量名中的點)

摘自php手冊 注意看下一下例子,解釋了爲什麼html中使用數組,以及url中get參數中英文句號.在php中的轉化(get中參數中的英文句號“.”轉化成下劃線“_”)。

當一個表單提交給 PHP 腳本時,表單中的信息會自動在腳本中可用。有很多方法訪問此信息,例如:

Example #1 一個簡單的 HTML 表單

<form action="foo.php" method="POST">
    Name:  <input type="text" name="username"><br />
    Email: <input type="text" name="email"><br />
    <input type="submit" name="submit" value="Submit me!" />
</form>

根據特定的設置和個人的喜好,有很多種方法訪問 HTML 表單中的數據。例如:

Example #2 從一個簡單的 POST HTML 表單訪問數據

<?php
// 自 PHP 4.1.0 起可用
   echo $_POST['username'];
   echo $_REQUEST['username'];
   
   import_request_variables('p', 'p_');
   echo $p_username;

// 自 PHP 5.0.0 起,這些長格式的預定義變量
// 可用 register_long_arrays 指令關閉。

   echo $HTTP_POST_VARS['username'];

// 如果 PHP 指令 register_globals = on 時可用。不過自
// PHP 4.2.0 起默認值爲 register_globals = off。
// 不提倡使用/依賴此種方法。

   echo $username;
?>

使用 GET 表單也類似,只不過要用適當的 GET 預定義變量。GET 也適用於 QUERY_STRING(URL 中在“?”之後的信息)。因此,舉例說,http://www.example.com/test.php?id=3 包含有可用 $_GET['id']

Note:

變量名中的點和空格被轉換成下劃線。例如 <input name="a.b" /> 變成了 $_REQUEST["a_b"]

 

PHP 也懂得表單變量上下文中的數組。例如可以將相關的變量編成組,或者用此特性從多選輸入框中取得值。例如,將一個表單 POST 給自己並在提交時顯示數據:

Example #3 更復雜的表單變量

<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
    echo '<pre>';

    print_r($_POST);
    echo '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';

    echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Name:  <input type="text" name="personal[name]"><br />
    Email: <input type="text" name="personal[email]"><br />
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbr</option>
    </select><br />
    <input type="hidden" name="action" value="submitted" />
    <input type="submit" name="submit" value="submit me!" />
</form>
<?php
}
?>

變量名中的點

通常,PHP 不會改變傳遞給腳本中的變量名。然而應該注意到點(英文句號)不是 PHP 變量名中的合法字符。至於原因,看看:

<?php
$varname.ext;  /* 非法變量名 */
?>

這時,解析器看到是一個名爲 $varname 的變量,後面跟着一個字符串連接運算符,後面跟着一個裸字符串(即沒有加引號的字符串,且不匹配任何已知的健名或保留字)'ext'。很明顯這不是想要的結果。

出於此原因,要注意 PHP 將會自動將變量名中的點替換成下劃線。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章