名前: < br / >"/> 名前: < br / >">

PHPの外部からの変数

伊谢尔伦
伊谢尔伦オリジナル
2016-11-24 13:43:26969ブラウズ

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[&#39;username&#39;];echo $_REQUEST[&#39;username&#39;];
import_request_variables(&#39;p&#39;, &#39;p_&#39;);echo $p_username;
// 自 PHP 5.0.0 起,这些长格式的预定义变量可用 register_long_arrays 指令关闭。
echo $HTTP_POST_VARS[&#39;username&#39;];
// 如果 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 以降で使用できます。

注:

変数名のドットとスペースはアンダースコアに変換されます。たとえば、66df9299ffe54b5001d938858b4213b8 は $_REQUEST["a_b"] になります。

上記のように、PHP 4.2.0 より前の register_globals のデフォルト値は on です。 PHP コミュニティは、このディレクティブに依存しないよう奨励しており、ディレクティブがオフであることを前提としてコーディングすることを推奨しています。

注:

magic_quotes_gpc 設定ディレクティブは、Get、Post、Cookie の値に影響します。オンの場合、値 (It's "PHP!") は自動的に (It's "PHP!") に変換されます。 10 年以上前、データベースの挿入にはこのようなエスケープが必要でしたが、現在は廃止されているため、オフにする必要があります。

PHP はフォーム変数のコンテキストで配列も理解します。たとえば、関連する変数をグループ化したり、この機能を使用して複数選択の入力ボックスから値を取得したりできます。たとえば、フォームを自分に POST し、送信時にデータを表示します。

例 #3 より複雑なフォーム変数

<?php
if (isset($_POST[&#39;action&#39;]) && $_POST[&#39;action&#39;] == &#39;submitted&#39;) {
   echo &#39;<pre class="brush:php;toolbar:false">&#39;;
   print_r($_POST);
   echo &#39;<a href="&#39;. $_SERVER[&#39;PHP_SELF&#39;] .&#39;">Please try again</a>&#39;;
   echo &#39;
'; } else { ?>
Name:
Email:
Beer:

IMAGE SUBMIT 変数名

フォームを送信するとき、標準の送信ボタンの代わりに画像を使用できます。次のようなマークアップ:

6c1a602b0aa6d408023c4dd21a62a130

ユーザーが画像内のどこかをクリックすると、対応するフォームがサーバーに送信され、 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 データ配列で使用できます。

Cookie 変数に複数の値を割り当てたい場合は、それを配列に割り当てる必要があります。例:

<?php
 setcookie("MyCookie[foo]", &#39;Testing 1&#39;, time()+3600);
 setcookie("MyCookie[bar]", &#39;Testing 2&#39;, time()+3600);
?>

これにより、MyCookie がスクリプト内の単一の配列であっても、2 つの別々の Cookie が作成されます。 1 つの Cookie に複数の値を設定したい場合は、最初に値に対して Serialize() または Explore() を使用することを検討してください。

パスまたはドメインが異なる場合を除き、ブラウザの Cookie は以前の Cookie を同じ名前に置き換えることに注意してください。したがって、ショッピング カート プログラムの場合は、次のようにカウンターを保持して渡すことができます:

例 #4 setcookie() の例

<?php
if (isset($_COOKIE[&#39;count&#39;])) {
   $count = $_COOKIE[&#39;count&#39;] + 1;
} else {
   $count = 1;
}
setcookie(&#39;count&#39;, $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() など、変数の型を決定できる関数がいくつか含まれています。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。