JavaScriptでフォームの入力制御を行い、POSTされた値をPHPで精査して表示するコードを書いたのですが、下の例の「フード」で「その他」以外を選択するとまったく何も表示されません。ちなみにPHPのdisplay_errorsを.htaccessでOnにしてもエラーは表示されず、またJavaScriptをOFFにすると正常に表示されることから、PHPのコードではなく、JavaScriptのtxt.value="";
の部分に問題があると思われます。ですが、いろいろ調べましたが手詰まりになりました。
PHPとJavaScriptの双方にお詳しい方、どうかご教授くださいますようお願いいたします。
以下、問題のコードです。長くて申し訳ありませんm(_ _)m
<script type="text/javascript">
function zzz(list,txt){
if (list.value == "その他"){
txt.disabled=false;
}else{
txt.value="";
txt.disabled=true;
}
}
</script>
<?php
if(!isset($_POST['pet'])){
?>
<body onload="zzz(document.getElementById('pet'),document.getElementById('petOther')),zzz(document.getElementById('food'),document.getElementById('foodOther'))">
<form method="post" action="test.php">
ペット:
<select name="pet" id="pet" onchange="zzz(this,document.getElementById('petOther'))">
<option value="" selected="selected">↓</option>
<option value="犬">犬</option>
<option value="猫">猫</option>
<option value="その他">その他</option>
</select>
(⇒<input type="text" name="petOther" value="" size="20" id="petOther" />)
<br />
フード:
<select name="food" id="food" onchange="zzz(this,document.getElementById('foodOther'))">
<option value="" selected="selected">↓</option>
<option value="缶詰">缶詰</option>
<option value="ドライフード">ドライフード</option>
<option value="その他">その他</option>
</select>
(⇒<input type="text" name="foodOther" value="" size="20" id="foodOther" />)
<button class="submit" type="submit"><span class="submitBTN">送信内容確認画面へ進む</span></button>
</form>
<?php
}else{
print "<body>\n";
foreach($_POST as $key => $val){
if($key == "pet"){
if($val != "その他"){
$pet = $val;
}
}
if($key == "petOther"){
if(!empty($val)){
$pet = $val;
}
}
if($key == "food"){
if($val != "その他"){
$food = $val;
}
}
if($key == "foodOther"){
if(!empty($val)){
$food = $val;
}
print $pet."に".$food."を与える";
}
}
}
?>
</body>
</html>
No.1ベストアンサー
- 回答日時:
print $pet."に".$food."を与える";
の場所が悪いです。
一番最後の}の手前に移動しましょう。
素早いご返答ありがとうございます。
おっしゃる通り、printを最後に持ってくるとちゃんと表示されました!
JavaScriptをoffにすることで正常に表示されていたので、てっきりJavaScriptに問題があるのかとばかり思っていました。お恥ずかしい限りです。
実際のコードではforeachで回している配列の要素が全部で数十個あるのですが、全部を一度にループさせるのではなく、その中の「まとめたいグループ」ごとにforeachをかければ良いということですね?
今から早速作業に取りかかってみます。本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
追加ボタンを押した際に ok ボ...
-
フォームが空欄の時にフォーム...
-
GASに文字列として関数を入れる...
-
特定の文字列を複数抜き出した...
-
初心者です。gulpでコンパイル...
-
階層別の組織図の自動作成について
-
①入力フォーム→②確認表示画面→③...
-
Q&A掲示板の入力フォームに文字...
-
ボタンを押したあとに画像を表...
-
コードレビューをお願いします。
-
React hooksが値を返して配列変...
-
フロントエンドフレームワーク...
-
画面遷移を行わずに同一ページ...
-
ローディングアニメーションの...
-
jQueryで同じクラス名のものを...
-
ジャバスクリプトについて。
-
プログラムについて。
-
メールフォームの日付入力フォ...
-
二次元配列を使って順位をだす...
-
iOSのみダブルタップが必要
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列を使って順位をだす...
-
プログラムについて。
-
Q&A掲示板の入力フォームに文字...
-
メールフォームの日付入力フォ...
-
iOSのみダブルタップが必要
-
ジャバスクリプトについて。
-
画面遷移を行わずに同一ページ...
-
特定の文字列を複数抜き出した...
-
指定時間になったら、WEBサイト...
-
追加ボタンを押した際に ok ボ...
-
①入力フォーム→②確認表示画面→③...
-
スマホ上で、左右スワイプで次...
-
読み込んだQRコードをフォーム...
-
フロントエンドフレームワーク...
-
React hooksが値を返して配列変...
-
GASでGoogleフォームの自動返信...
-
初心者です。gulpでコンパイル...
-
階層別の組織図の自動作成について
-
HTMLで作った時報アプリが動き...
-
jQueryで同じクラス名のものを...
おすすめ情報