※フォームの処理は必ず読むこと
追記してほしい情報は既に書きましたし、いつか追記されるものとして可能性だけ
- HTTPでアクセスしていない
- PHPタグで囲ってない
- フォーム送信ではなく直にsample.phpにアクセスしている
1:
入力フォームの時点でhttpでアクセスしてなければaction属性の設定値からそのままhttpじゃない状態で送信するのでPHPは動作しません。
書いたコードそのまま画面に出てたらおそらくこれ。
入力フォームの時点からhttpアクセスするか、action属性の設定値をhttp://localhost/sample.php
など、httpから始まるURLにしてください。
2:
提示されたコードそのままだとPHPタグで囲まれていません。
PHPマニュアルにある通り、PHPコードはPHPタグ内のものを解析して実行します。
httpアクセスしてるけど画面にそのままコードが出ている場合はこれ
これは送信ボタンを押した瞬間に.phpの$_POST["data"]にvalueが格納されるというイメージであっていますか?
正確な表現を覚えた方が良いと思います。
送信ボタンを押す
→送信ボタンが所属しているform内の入力コントロール(input,select,textarea)の情報をaction属性の設定値に対して「リクエスト」として送信する
その時のリクエストは各入力コントロールのname属性の属性値を「キー」
value属性の属性値(その時、入力・選択された情報)を「値」とした連想配列形式になっています。
PHPはそれを「リクエスト」として受け取ります。
$_POSTかどうかは「リクエストメソッド」によります。
その「リクエストメソッド」を決めるのがformタグのmethod属性の属性値です。
postなら$_POSTで受け取るし、getもしくは設定なしなら$_GETで受け取ります。
PHP側はリクエストが何で送られたかは知らないのでサーバーに送られた情報を参照できる$_SERVERが保持している中で確認します。
なお、formタグによるリクエスト送信は同期的に行われるので、
「ボタン押した後に自分でURLを直に確認」ではリクエストとして別になるので送信されていません。これが3:の懸念です。
つまり、
httpでアクセスしていて、PHPタグで囲われているPHPに対して送信し、送られたリクエストメソッドのスーパーグローバル変数にname属性の設定値で正しく連想配列を参照するようにコードを書けば「入力した値が渡される」と言えます。