HTML フォーム (GET および POST)
フォームが PHP スクリプトに送信されると、フォーム内の情報がスクリプトで自動的に利用可能になります。この情報にアクセスするには、次のような方法があります。
例 #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 フォーム内のデータにアクセスするには、特定の設定や個人的な好みに応じて、さまざまな方法があります。例:
例 #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'] でアクセスできる GET データが含まれています。 $_REQUEST および import_request_variables() を参照してください。
注:
$_POST や $_GET などのスーパーグローバル配列は、PHP 4.1.0 以降で使用できます。
注:
変数名のドットとスペースはアンダースコアに変換されます。たとえば、 は $_REQUEST["a_b"] になります。
上記のように、PHP 4.2.0 より前の register_globals のデフォルト値は on です。 PHP コミュニティは、このディレクティブに依存しないよう奨励しており、ディレクティブがオフであることを前提としてコーディングすることを推奨しています。
注:
magic_quotes_gpc 設定ディレクティブは、Get、Post、Cookie の値に影響します。オンの場合、値 (It's "PHP!") は自動的に (It's "PHP!") に変換されます。 10 年以上前、データベースの挿入にはこのようなエスケープが必要でしたが、現在は廃止されているため、オフにする必要があります。 「addslashes()」、「stripslashes()」、および「magic_quotes_sybase」を参照してください。
PHP は、フォーム変数のコンテキストで配列も理解します (関連する FAQ を参照)。たとえば、関連する変数をグループ化したり、この機能を使用して複数選択の入力ボックスから値を取得したりできます。たとえば、フォームを自分に POST し、送信時にデータを表示します。
例 #3 より複雑なフォーム変数
<?php if (isset( $_POST [ 'action' ]) && $_POST [ 'action' ] == 'submitted' ) { echo '<pre class="brush:php;toolbar:false">' ; print_r ( $_POST ); echo '<a href="' . $_SERVER [ 'PHP_SELF' ] . '">Please try again</a>' ; echo '' ; } else { ?>
IMAGE SUBMIT 変数名
フォームを送信するとき、標準の送信ボタンの代わりに画像を使用できます。次のようなタグを使用します:
<input type="image" src="image.gif" name="sub" />
ユーザーが画像内のどこかをクリックすると、対応するフォームがサーバーに送信され、2 つの変数 sub_x と sub_y が追加されます。これらには、ユーザーがクリックした画像の座標が含まれています。経験豊富なユーザーは、ブラウザーから送信される実際の変数名にアンダースコアの代わりにドットが含まれていることに気づくかもしれません (つまり、sub.x と sub.y)。しかし、PHP は自動的にドットをアンダースコアに変換します。
HTTP Cookies
PHP は、RFC 6265 で定義されているように » HTTP Cookie を透過的にサポートします。 Cookie は、リモート ブラウザにデータを保存し、再度訪問するユーザーを追跡または識別できるメカニズムです。 Cookie は setcookie() 関数を使用して設定できます。 Cookie は HTTP ヘッダーの一部であるため、出力がブラウザーに送信される前に SetCookie 関数を呼び出す必要があります。同じ制限が header() 関数にも適用されます。 Cookie データは、 $_COOKIE 、 $HTTP_COOKIE_VARS 、 $_REQUEST などの、対応する Cookie データ配列で使用できます。詳細と例については、setcookie() のマニュアル ページを参照してください。
Cookie 変数に複数の値を割り当てたい場合は、それを配列に割り当てる必要があります。例:
<?php setcookie ( "MyCookie[foo]" , 'Testing 1' , time ()+ 3600 ); setcookie ( "MyCookie[bar]" , 'Testing 2' , time ()+ 3600 ); ?>
これにより、MyCookie がスクリプト内の単一の配列であっても、2 つの別々の Cookie が作成されます。 1 つの Cookie に複数の値を設定したい場合は、最初に値に対して Serialize() または Explore() を使用することを検討してください。
パスまたはドメインが異なる場合を除き、Cookie はブラウザ内の同じ名前を持つ以前の Cookie を置き換えることに注意してください。したがって、ショッピング カート プログラムはカウンターを保持し、それを一緒に渡すことができます。例:
例 #4 setcookie() の例
<?php if (isset( $_COOKIE [ 'count' ])) { $count = $_COOKIE [ 'count' ] + 1 ; } else { $count = 1 ; } setcookie ( 'count' , $count , time ()+ 3600 ); setcookie ( "Cart[ $count ]" , $item , time ()+ 3600 ); ?>
变量名中的点
通常,PHP 不会改变传递给脚本中的变量名。然而应该注意到点(句号)不是 PHP 变量名中的合法字符。至于原因,看看:
<?php $varname . ext ; ?>
这时,解析器看到是一个名为 $varname 的变量,后面跟着一个字符串连接运算符,后面跟着一个裸字符串(即没有加引号的字符串,且不匹配任何已知的健名或保留字)'ext'。很明显这不是想要的结果。
出于此原因,要注意 PHP 将会自动将变量名中的点替换成下划线。
确定变量类型
因为 PHP 会判断变量类型并在需要时进行转换(通常情况下),因此在某一时刻给定的变量是何种类型并不明显。PHP 包括几个函数可以判断变量的类型,例如: gettype() , is_array() , is_float() , is_int() , is_object()和 is_string()
以上がPHPの外部からの変数とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。