• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPの初心者です。現在チェックボックスのデータ引き継ぎで困っています)

PHP初心者がチェックボックスのデータ引き継ぎで困っています

このQ&Aのポイント
  • PHP初心者がチェックボックスのデータ引き継ぎで困っています。現在、入力フォームの状態で表示されるまでは辿り着けましたが、確認画面でチェック項目が表示されなくなりました。どうすればよいでしょうか?
  • 質問者はPHP初心者であり、チェックボックスのデータ引き継ぎについて困っています。入力フォームではチェック項目が表示されますが、確認画面に遷移するとチェック項目が表示されなくなってしまいます。
  • PHP初心者がチェックボックスのデータ引き継ぎで問題が発生しています。入力フォームではチェック項目が正しく表示されますが、確認画面でチェック項目が表示されないため、どのように修正すれば良いかわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.4

二度目まして。 沖縄電力のページは途中までしかやってないのですが、 動きとしては一般的なWEBフォームと思いましたので、 沖縄電力のと同じような動きにして作り直してみました。 ちなみに、この沖電のページは入力チェックしてないですね。 電話番号に半角英語入れても お構いなし。 ま、それは、さておき。 > javaを使いそのチェックボックスのデータをPOSTとして送信確認画面まで、 > チェックした内容のデータを引き継ぎ出来るようなことまでは分かったのですが、 まず、細かい一点にツッコみを入れておくと、 javaと javaScriptは 全くの別物なので、混同して使わないほうが良いですよ。っと。 大抵の人は 前後関係から どっちかに脳内変換して読んでくれますけどね。 ちなみに、JavaScriptもJavaも データの引継ぎには使ってないと思います。 そのページのソースを見て、「hidden」でテキスト検索すると、いいものが見つかります。 PHPの問題じゃなくて、HTMLの問題じゃないかな~?と思ったのは、 俺の見当違いかもしれませんが、 一応、以下のゴミプロで 動きは再現できてると思うので、試してみてくださいな。 <? $me = $_SERVER[PHP_SELF]; $Message = $out = ""; $act = $_POST[act]; $DimCheckbox = array (1 => "沖縄電力" , 2 => "アニュアルレポート" , 3 => "地域共生活動への取り組み" , 4 => "当社の地域共生活動について" , 5 => "環境行動レポート" , 6 => "沖電グループ"); //------------------------------------------------------------------------------ // 初期画面 if (!$act) { if ($Message) { $out.= "$Message<hr>"; } $out.= "※請求希望の冊子名の左側にあるチェックボックスをクリックし、ページ下部の「資料を請求する」ボタンをクリックしてください。<hr>"; $out.= "<form action=$me method=post>\n"; foreach($DimCheckbox as $Num => $Name) { $out.= "<input type=checkbox name=Data[$Num] value=on>$Name<br>\n"; } $out.= "<input type=hidden name=act value='next'>\n"; $out.= "<input type=submit name=submit value='資料を請求する'>\n</form>"; } //------------------------------------------------------------------------------ // 次の画面 if ($act == "next") { $out.= "選択したのは 以下の通り<hr>\n"; $out.= "<form action=$me method=post>\n"; $out.= "お名前 : <input type=text name=Name value=''><hr>\n"; foreach($_POST[Data] as $Num => $on) { $out.= $DimCheckbox[$Num] . "<br>\n"; $out.= "<input type=hidden name=Data[$Num]t value='on'>\n"; } $out.= "<hr><input type=hidden name=act value='send'>\n"; $out.= "<input type=submit name=submit value='送信'>\n</form>"; } //------------------------------------------------------------------------------ // 最後の画面 if ($act == "send") { $out.= "送信された内容は 以下の通り<hr>\n"; $out.= "○お名前 : " . $_POST[Name] . "<hr>"; $out.= "○請求資料<hr>\n"; foreach($_POST[Data] as $Num => $on) { $out.= $DimCheckbox[$Num] . "<br>\n"; } } //------------------------------------------------------------------------------ print $out; ?>

nonnon0099
質問者

お礼

何度もご迷惑かけて申し訳御座いませんでした。 さすがにPHPの配列は難しいですね。 一応希望通りには出来上がりましたけど、メールの本文には配列が縦に並んでしまっているのと、出来れば配列を「,」で区切りたかったのですが、それだけが出来ませんでした。 本当にご協力有難う御座います。 かなり勉強になりました。

その他の回答 (3)

回答No.3

画面の遷移が、 1.チェックボックスで請求する資料を選択するフォームのHTML ↓ 2.チェックされた請求資料の確認画面(PHP) ↓ 3.メールを送るフォーム(PHP) ということでよいですか? それであれば、2のところで<input type="hidden">で値を渡してやるのがもっとも簡単です。 -----confirm.php-------------- <?php //このプログラムのバージョン情報なんかを定数で設定しておく。 define('FORM_PROG_VER', '1.0.0'); //STEP1.PHPファイルにPOSTメソッドでアクセスされたかを判断します。 if(strtoupper($_SERVER['REQUEST_METHOD']) == 'POST'){ //STEP2.必要なデータが渡されているかチェックします。 //'color'が定義されていてかつ、'color'は配列で渡されているか。 if(isset($_POST['color']) && is_array($_POST['color'])){ //STEP3.入力された値は、自分が入力されていると予定されているものがちゃんと入っているか //確認します。 //とりあえず入っていてほしいものの一覧を配列で定義します。 $colors = array('資料1', '資料2', '資料3'); //で、チェック $valid = true; foreach($_POST['color'] as $clr){ if(!in_array($clr, $colors)){ //もし入力(チェック)された値が一覧にない値だったらエラーとしてループから抜けます。 $valid = false; break; } } if($valid){ //STEP4.確認用HTMLを表示します。 //ですが、このPHP中に書くとごちゃごちゃになるので、 //別のファイルで読み出します。 require_once 'confirm.template.php'; }else{ //STEP4-1.選択されていなかったり、変な値が入っていた場合はに遷移。 require_once 'error.template.php'; } }else{ //ここも「STEP4-1」と同様に。 require_once 'error.template.php'; } } ?> -----confirm.template.php------ <?php //バージョン情報定数が定義されていなかったらプログラムを実行しない if(!defined('FORM_PROG_VER')) exit(); ?><html> <head> </head> <body> ご請求の資料は下記でよろしいですか。的な文章を書いてやって、 メール送信用フォームのPHPファイルを送信先にしたformタグを作る。 <form action="next.php" method="POST"> <ul> <?php foreach($_POST['color'] as $clr):?> <li><?php echo $clr?><input type="hidden" name="color[]" value="<?php echo $clr?>" /></li> <?php endforeach;?> </ul> <input type="submit" value="お申し込み" /> </form> </body> </html> 以上です。 ちなみに、3のメールを送信するプログラム側でも、STEP3で記述したようなチェック処理は必ず行ってください。

nonnon0099
質問者

補足

本当に詳しく記述してくださって感謝しております。実際試して見ましたがここ2~3日全く同じ状態です。これをしたいというHPを見つけましたのでぜひコチラを拝見してコメントを頂けたら本当に嬉しいです。そのURLは下記です↓ http://www.okiden.co.jp/corporate/brochure/index.html こちらはCGIでうごかしているようですが、やりたいことは全く同じ事で、資料をチェックして、フォーム画面へ移動したら、そこに先ほどチェックした項目名が表示されており、さらにフォーム入力確認画面でも、内容が受け継がれているという点です。 私はPHPでしようとしています。色々調べた結果、javaを使いそのチェックボックスのデータをPOSTとして送信確認画面まで、チェックした内容のデータを引き継ぎ出来るようなことまでは分かったのですが、お手上げ状態です。 もしフリーで同じようなものがご存知でしたら教えて頂けたら嬉しいです。 本当に無知で申し訳ございませんが、最後まで付き合って頂けたらと思い再度投稿しました。この質問を見た方で、何か良いアドバイスを頂ける方、ぜひ宜しくお願い申し上げます。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

はじめまして。 自分自身かなり自己流で人に教える事のできる立場ではありませんが、 やりたい事は 多分 以下のような感じだと思いましたので、 ゴミプログラム書いてみました。 見ての通り、かなり おかしげな記述の仕方ですので、 動きの参考程度にしてください。 <? $me = $_SERVER[PHP_SELF]; $out = ""; $DimCheckbox = array (1 => "資料請求その1" , 2 => "資料請求その2" , 3 => "資料請求その3"); if (!$_REQUEST) { $out.= "<form action=$me method=post>\n"; foreach($DimCheckbox as $Num => $Name) { $out.= "<input type=checkbox name=Hoge[$Num] value=on>$Name<br>\n"; } $out.= "<input type=submit name=submit value='送信'>\n</form>"; } else { $out.= "選択したのは 以下の通り<hr>\n"; foreach($_POST[Hoge] as $i => $on) { $out.= $DimCheckbox[$i] . "<br>\n"; } } print $out; ?> 自分の環境での動作確認はしてますので、 コピペして動かしてもらえればいいかと思います。

nonnon0099
質問者

補足

ご回答有難うございました。 実際試して見ましたがここ2~3日全く同じ状態です。これをしたいというHPを見つけましたのでぜひコチラを拝見してコメントを頂けたら本当に嬉しいです。 そのURLは下記です↓ http://www.okiden.co.jp/corporate/brochure/index.html こちらはCGIでうごかしているようですが、やりたいことは全く同じ事で、資料をチェックして、フォーム画面へ移動したら、そこに先ほどチェックした項目名が表示されており、さらにフォーム入力確認画面でも、内容が受け継がれているという点です。 私はPHPでしようとしています。色々調べた結果、javaを使いそのチェックボックスのデータをPOSTとして送信確認画面まで、チェックした内容のデータを引き継ぎ出来るようなことまでは分かったのですが、お手上げ状態です。 もしフリーで同じようなものがご存知でしたら教えて頂けたら嬉しいです。

  • Sylar
  • ベストアンサー率71% (10/14)
回答No.1

>入力フォームの状態で表示されるまでは辿り着いたのですが、 >確認画面に遷移すると、チェック項目が全て表示されなくなりました。 う~ん・・・。 いまいちどういう状態から何がやりたいのか分からないんだけど、 登録用のPHPで取得した内容を別の確認用のPHPへ送りたいってことでしょうか? それなら確認用PHPへPOSTしたほうがはやいのでは? それとも、単純に配列として表示したいのでしょうか? $color = implode ("," , $_POST["color"]); $array = explode("," , $color); print_r($array); としては?

nonnon0099
質問者

お礼

早速のコメント有難うございます。 この方法は試したのですが確認画面で表示されなかったので、だめでした。 ご親切に有難う御座います。

関連するQ&A

専門家に質問してみよう