アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPの初心者です。現在チェックボックスのデータ引き継ぎで困っています。
簡単に言うと、資料請求一覧ページみたいなものがHTMLであり各箇所にチェックボックスがあります。そして複数をチェックして資料請求ボタンをクリックすると登録フォームに遷移し、尚且つチェックボックスがオンのVALUEは名前が、表示されている状態で、PHPを使い登録メールフォームを作るといった感じです。現在は入力フォームの状態で表示されるまでは辿り着いたのですが、確認画面に遷移すると、チェック項目が全て表示されなくなりました。
現状の入力フォームにあるPHPは
<?php
/* フォーム変数が存在する場合 */
if($_POST["color"] != ""){
$color = implode ("," , $_POST["color"]);
print ($color);
/* フォーム変数が存在しない場合 */
}else{
print ("選択されていません。");
}
?>
<?php
}
?>
と言った感じです。確認画面でどういう風にPHPで記述したら良いのか判らないのが今の問題です。間違いはたくさんあると思いますが、恐れ入りますがPHPに詳しい方がいらっしゃいましたら是非ご教授頂きたいと思っております。どうぞ宜しくお願い致します。

A 回答 (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;
?>
    • good
    • 0
この回答へのお礼

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

本当にご協力有難う御座います。
かなり勉強になりました。

お礼日時:2010/01/18 19:40

画面の遷移が、


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で記述したようなチェック処理は必ず行ってください。

この回答への補足

本当に詳しく記述してくださって感謝しております。実際試して見ましたがここ2~3日全く同じ状態です。これをしたいというHPを見つけましたのでぜひコチラを拝見してコメントを頂けたら本当に嬉しいです。そのURLは下記です↓
http://www.okiden.co.jp/corporate/brochure/index …

こちらはCGIでうごかしているようですが、やりたいことは全く同じ事で、資料をチェックして、フォーム画面へ移動したら、そこに先ほどチェックした項目名が表示されており、さらにフォーム入力確認画面でも、内容が受け継がれているという点です。

私はPHPでしようとしています。色々調べた結果、javaを使いそのチェックボックスのデータをPOSTとして送信確認画面まで、チェックした内容のデータを引き継ぎ出来るようなことまでは分かったのですが、お手上げ状態です。
もしフリーで同じようなものがご存知でしたら教えて頂けたら嬉しいです。
本当に無知で申し訳ございませんが、最後まで付き合って頂けたらと思い再度投稿しました。この質問を見た方で、何か良いアドバイスを頂ける方、ぜひ宜しくお願い申し上げます。

補足日時:2010/01/16 02:02
    • good
    • 0

はじめまして。



自分自身かなり自己流で人に教える事のできる立場ではありませんが、
やりたい事は 多分 以下のような感じだと思いましたので、
ゴミプログラム書いてみました。

見ての通り、かなり おかしげな記述の仕方ですので、
動きの参考程度にしてください。

<?
$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;
?>

自分の環境での動作確認はしてますので、
コピペして動かしてもらえればいいかと思います。

この回答への補足

ご回答有難うございました。
実際試して見ましたがここ2~3日全く同じ状態です。これをしたいというHPを見つけましたのでぜひコチラを拝見してコメントを頂けたら本当に嬉しいです。
そのURLは下記です↓
http://www.okiden.co.jp/corporate/brochure/index …

こちらはCGIでうごかしているようですが、やりたいことは全く同じ事で、資料をチェックして、フォーム画面へ移動したら、そこに先ほどチェックした項目名が表示されており、さらにフォーム入力確認画面でも、内容が受け継がれているという点です。

私はPHPでしようとしています。色々調べた結果、javaを使いそのチェックボックスのデータをPOSTとして送信確認画面まで、チェックした内容のデータを引き継ぎ出来るようなことまでは分かったのですが、お手上げ状態です。
もしフリーで同じようなものがご存知でしたら教えて頂けたら嬉しいです。

補足日時:2010/01/16 02:05
    • good
    • 0

>入力フォームの状態で表示されるまでは辿り着いたのですが、


>確認画面に遷移すると、チェック項目が全て表示されなくなりました。
う~ん・・・。
いまいちどういう状態から何がやりたいのか分からないんだけど、
登録用のPHPで取得した内容を別の確認用のPHPへ送りたいってことでしょうか?
それなら確認用PHPへPOSTしたほうがはやいのでは?

それとも、単純に配列として表示したいのでしょうか?
$color = implode ("," , $_POST["color"]);
$array = explode("," , $color);
print_r($array);
としては?
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/16 01:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!