質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3500閲覧

HTMLとPHPを組み合わせた時の、<form>内のvalue=""部分のことで質問です。

Hiro-Hiro

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/04/03 05:17

すみません、value の役割で分からない部分があります。

初期値が0の$count変数を用意し、クリックしたボタンに応じて数が増減し、
またその履歴も表示するプログラムを作りました。

<?php $pre = array(0); $count = isset($_GET['count']) ? $_GET['count'] : 0; $click = isset($_GET['click']) ? $_GET['click'] : ""; $log = isset($_GET['log']) ? $_GET['log'] :$pre; //$count = isset($_GET['count']) ? $_GET['count'] : ""; //if (!empty($log)){ //分けて記述せずに、下のifに含めて書けばよい。 // $log[] = $count; //} if (isset($_GET['click'])){ if ($click == '+1'){ $count = $count+1; $log[] = $count; } elseif ($click == '+2'){ $count = $count+2; $log[] = $count; } elseif ($click == '+3'){ $count = $count+3; $log[] = $count; } elseif ($click == '-1'){ $count = $count-1; $log[] = $count; } elseif ($click == '-2'){ $count = $count-2; $log[] = $count; } elseif ($click == '-3'){ $count = $count-3; $log[] = $count; } // if (isset($_GET['log'])){ // $log[] = $count; // } } ?> <form action="" method="get"> <?php foreach ($log as $key): ?> <input type="hidden" name="log[]" value="<?php echo $key ?>" /> <?php endforeach; ?> <input type="hidden" name="count" value="<?php echo $count ?>" /> <button type="submit" name="click" value="+1">+1</button> <button type="submit" name="click" value="-1">-1</button><br/> <button type="submit" name="click" value="+2">+2</button> <button type="submit" name="click" value="-2">-2</button><br/> <button type="submit" name="click" value="+3">+3</button> <button type="submit" name="click" value="-3">-3</button><br/> </form> <?php foreach ($log as $key): ?>
<li> <?php echo $key; ?> </li>
<?php endforeach; ?>

上記のコードですが、<form>内の$keyをechoしない場合、カウントの履歴が反映されず、配列だけ追加されていきます。
$countをechoしない場合、カウンターの数値が毎回0にリセットされてしまいます。
hiddenを持たせないと現状を保持できないということは分かりましたが、なぜechoせずに$keyや$countのみの記述ではいけないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

hiddenを持たせないと現状を保持できないということは分かりましたが、なぜechoせずに$keyや$countのみの記述ではいけないのでしょうか?

そこを削除すると
$count = isset($_GET['count']) ? $_GET['count'] : 0;
のところで現在のカウンター値が取得できなくなるからです。

この部分で何をやっているか理解できてないのでしょうか?

投稿2016/04/03 07:24

YsMana

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hiro-Hiro

2016/04/03 08:01

コメント頂きありがとうございます。 $_GETにcountの値が来ていればその数値を、そうでない場合は0を $countに格納する、 という認識で良いでしょうか? input typeをhiddenにし、且つvalueでechoの記述をしなければ、値が渡せないということですね?
YsMana

2016/04/03 09:11

> $_GETにcountの値が来ていればその数値を、そうでない場合は0を $countに格納する、 > という認識で良いでしょうか? そうです。 > input typeをhiddenにし、且つvalueでechoの記述をしなければ、値が渡せないということですね? そこに値がないと、$_GETに値が来ないと言うことが理解できているならその通りです。 また、submitのたびにphpプログラムはまっさらな状態で一から動作している($count変数の値を自動で保持してくれたりはしない)ということは分かってますよね? なお、hiddenにするかどうかは本質的な問題ではないです。 textとかでも、閲覧者に見えてしまう(し直接書き換えが可能になってしまう)だけで動作はすると思います。 動作原理を理解するために、試しにtype="text"に書き換えて挙動を確認してみても良いかもしれませんね。
Hiro-Hiro

2016/04/03 14:02

お二人ともありがとうございました。 YsManaさんの回答が僕の知りたい内容に沿っていたので、 BAとさせていただきました。
guest

0

なぜechoせずに$keyや$countのみの記述ではいけないのでしょうか?

PHPはサーバーで動作し、HTMLはサーバから送られてきたファイルをブラウザで展開しています。
PHPはHTMLファイルを書き出しているだけなので、変数をHTML側の form からPHPに送らないと変数を引き継ぐことが出来ません。

投稿2016/04/03 07:23

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問