重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

プルダウンメニューを使用して、フォーム→確認→送信と順々に値を受け取りたいのですが、form.phpではプルダウンメニューは表示されますが、form.phpで選択したプルダウンメニューがconfirm.phpでは表示されません。
confirm.phpでも表示されてなおかつ送信をしたら受け取れるようにしたいのです。
初心者なので、いろいろと勉強をしながら、本を読んだり、調べたのですが、まったくわからずです。どなたかご教授お願いします。

form.php
<form method="post" action="confirm.php">
<table cellpadding="0" cellspacing="0" border="0"><tr><td>項目</td><td>入力欄</td><td>記入例</td></tr>
<tr><td><label for="name">名前</label></td><td><input type="text" size="50" name="name" id="name" value="<?php print h(@$_SESSION['name']); ?>" /></td><td>例:goo 太郎</td></tr>
<tr><td><label for="mail">生年月日</label></td><td>
<select name="year[]"><option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option><option value="1974">1974</option></select>年
<select name="month[]"><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option></select>月
<select name="day[]"><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option></select>日
</td><td>例:1990年01月01日</td></tr>
<tr><td colspan="3" style="text-align:center;"><input type="hidden" name="aaa" value="<?php print h($aaa); ?>" /><input type="submit" value="確認" /></td></tr>
</table></form>

confirm.php

session_start();
$_POST = checkInput($_POST);
if (isset($_POST['aaa']) && isset($_SESSION['aaa'])) {
$aaa = $_POST['aaa'];
if (!in_array($aaa, $_SESSION['aaa'])) {
die('不正アクセスの疑いがあります。');
}
} else {
die('不正アクセスの疑いがあります。');
}
$name = isset($_POST['name']) ? $_POST['name'] : NULL;
$kana = isset($_POST['kana']) ? $_POST['kana'] : NULL;
$mail = isset($_POST['mail']) ? $_POST['mail'] : NULL;
$comment = isset($_POST['comment']) ? $_POST['comment'] : NULL;
$error = array();
★★★各項目のチェック★★★
$_SESSION['name'] = $name;
$_SESSION['kana'] = $kana;
$_SESSION['mail'] = $mail;
$_SESSION['comment'] = $comment;
$_SESSION['error'] = $error;


<table class="form" cellpadding="0" cellspacing="0" border="0">
<tr><td>項目</td><td>入力欄</td><td class="title_color" style="border-left:1px solid #ffffff;">記入例</td></tr>
<tr><td>名前</td><td class="title_back2"><?php print h($name);?></td><td>例:goo 太郎</td></tr>
<tr><td>生年月日</td><td>★★★★★ここにform.phpからのプルダウンメニューを受け取りたい★★★★★</td><td>例:1990年01月01日</td></tr>
</table>

<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td><form action="form.php" method="post"><input type="submit" value="戻る" /></form></td>
<td><form action="send.php" method="post"><input type="hidden" name="aaa" value="<?php print h($aaa);?>" /><input type="submit" value="送信" /></form></td>
</tr></table>

A 回答 (4件)

混乱を避けるために、配列指定をはずすことを #1 でお勧めしたのです、



> multipul を指定してるわけでもないようなので [] はいらなくないですか?
> name="year[]" → name="year"

とすれば

$year = isset( $_POST[ 'year' ] ) ? $_POST[ 'year' ] : null;

で済みます。

--------------------------------------------------------------

$year = isset( $_POST[ 'year' ] ) ? $_POST[ 'year' ][ 0 ] : null;

この時点で、$year には '1971' などの文字列が格納されています。
(もちろん何も選択されていなければ null になります。)
ですので、

<?php print h($year[0]) ;?>年

とすると、一文字目だけの表示 "1年" とならないですか?

この回答への補足

でました。
ですが、このform.phpで1971年01月01日と選択した場合confirm.phpの確認画面でも1971年01月01日と表示させたいのですが、記述はどのようになるでしょうか?
また、この場合
// POSTされたデータとエラーメッセージをセッション変数に保存
$_SESSION['year'] = $year[0];
$_SESSION['month'] = $month[0];
$_SESSION['day'] = $day[0];
$_SESSION['error'] = $error;
はこのままでよろしいのでしょうか?
本当に初心者なのもので、なにもわからないためお願いします。

補足日時:2009/10/04 01:00
    • good
    • 0

mail の件は撤回しますが、回答は同じです。



$year = is_array( $_POST[ 'year' ] ) ? $_POST[ 'year' ][ 0 ] : null;
$month = is_array( $_POST[ 'month' ] ) ? $_POST[ 'month' ][ 0 ] : null;
$day = is_array( $_POST[ 'day' ] ) ? $_POST[ 'day' ][ 0 ] : null;

$birthday = "{$year}年{$month}月{$day}日";

<tr><td>生年月日</td><td><?= $birthday ?></td><td>例:1990年01月01日< /td></tr>

それとも、プルダウンそのものを取得したいという意味ですか?

この回答への補足

お忙しい中有難う御座います。
もし参考サイト等を知っているならば教えていただけないでしょうか?
下記がsend.phpになります。

<?php
$mailTo = '****@****.com';

$subject = 'お問合せ';

$returnMail = '****@*****';

function checkInput($var) {
if (is_array($var)) {
return array_map('checkInput', $var);
} else {
if (get_magic_quotes_gpc()) { // magic_quotes_gpc対策
$var = stripslashes($var);
}
if (preg_match('/\0/', $var)) { // NULLバイト攻撃対策
die('不正な入力です。');
}
if (!mb_check_encoding($var, 'shift-jis')) { // 文字エンコードの確認
die('不正な入力です。');
}
return $var;
}
}

session_start();

$_POST = checkInput($_POST);

if (isset($_POST['aaaa']) && isset($_SESSION['aaaa'])) {
$aaaa = $_POST['aaaa'];
if (!in_array($aaaa, $_SESSION['aaaa'])) {
die('不正アクセスの疑いがあります。');
}
} else {
die('不正アクセスの疑いがあります。');
}

$name = $_SESSION['name'];
$kana = $_SESSION['kana'];
$mail = $_SESSION['mail'];
$year = $_SESSION['year'][0];
$month = $_SESSION['month'][0];
$day = $_SESSION['day'][0];
$comment = $_SESSION['comment'];

mb_language('ja');
mb_internal_encoding('shift-jis');

$header = 'From: ' . mb_encode_mimeheader($name) . ' <' . $mail . '>';

$message = '';

$comment = "差出人:" .$_SESSION['name']."\n". "メール:" .$_SESSION['mail']."\n\n\n". "->フリガナ:\n" .$_SESSION['kana']."\n\n". "->お問合せ内容:\n" .$_SESSION['comment'];

if (ini_get('safe_mode')) {
$result = mb_send_mail($mailTo, $mailBCC, $subject, $comment, $header);
} else {
$result = mb_send_mail($mailTo, $mailBCC, $subject, $comment, $header, '-f' . $returnMail);
}

if ($result) {
$message = '送信完了いたしました。<br />担当者よりご連絡をお待ちくださいませ。';

$_SESSION = array();
session_destroy();
} else {
$message = '送信失敗';
}
?>

補足日時:2009/10/03 22:39
    • good
    • 0

mail の件だけ撤回しますが、回答は同じです。



$year = is_array( $_POST[ 'year' ] ) ? $_POST[ 'year' ][ 0 ] : null;
$month = is_array( $_POST[ 'month' ] ) ? $_POST[ 'month' ][ 0 ] : null;
$day = is_array( $_POST[ 'day' ] ) ? $_POST[ 'day' ][ 0 ] : null;

<tr><td>生年月日</td><td>$year年$month月$day日</td><td>例:1990年01月01日< /td></tr>

それとも、プルダウンそのものを取得したいという意味ですか?

この回答への補足

有難う御座います。
試させていただいたのですが、受け取りができませんでした。
年月日だけしか表示されませんでした。
confirm.phpは下記のようになります。
<?php
// 変数にPOSTされたデータを代入
$name = isset($_POST['name']) ? $_POST['name'] : NULL;
$kana = isset($_POST['kana']) ? $_POST['kana'] : NULL;
$mail = isset($_POST['mail']) ? $_POST['mail'] : NULL;
$year = is_array($_POST['year']) ? $_POST['year'][0] : NULL;
$month = is_array($_POST['month']) ? $_POST['month'][0] : NULL;
$day = is_array($_POST['day']) ? $_POST['day'][0] : NULL;
$comment = isset($_POST['comment']) ? $_POST['comment'] : NULL;

// POSTされたデータとエラーメッセージをセッション変数に保存します。
$_SESSION['name'] = $name;
$_SESSION['kana'] = $kana;
$_SESSION['mail'] = $mail;
$_SESSION['year'] = $year[0];
$_SESSION['month'] = $month[0];
$_SESSION['day'] = $day[0];
$_SESSION['comment'] = $comment;
$_SESSION['error'] = $error;

?>
<table cellpadding="0" cellspacing="0" border="0">
<tr><td>項目</td><td>入力欄</td><td>記入例</td></tr>
<tr><td>名前</td><td><?php print h($name);?></td><td>例:ORENZZE 太郎</td></tr>
<tr><td>フリガナ</td><td><?php print h($kana);?></td><td>例:オレンツェ タロウ</td></tr>
<tr><td>メール</td><td><?php print h($mail);?></td><td>例:mail@orenzze.com</td></tr>
<tr><td>生年月日</td><td><?php print h($year[0]) ;?>年<?php print h($mont[0]) ;?>月<?php print h($day[0]) ;?>日</td><td>例:1980年01月01日</td></tr>
<tr><td>お問合せ内容</td><td><?php print nl2br(h($comment));?></td><td>例:お気軽にご質問下さい</td></tr>
</table>

<table class="form" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><form action="form.php" method="post"><input type="submit" value="戻る" /></form></td>
<td><form action="send.php" method="post"><input type="hidden" name="aaaa" value="<?php print h($aaaa);?>" /><input type="submit" value="送信" /></form></td>
</tr>
</table>

補足日時:2009/10/03 22:34
    • good
    • 0

mail に紐付けされたフォーム部品がないから。

年月日の取得は$_POST[ 'year' ] ,$_POST[ 'month' ], $_POST[ 'day' ] では?

ちなみに、配列指定してるから、$_POST[ 'year' ][ 0 ] としなければいけない。

multipul を指定してるわけでもないようなので [] はいらなくないですか?
name="year[]" → name="year"

余計なことだけど、メールでもないのに名前が mail だと紛らわしくないですか?

option のどれかひとつに selected を指定したほうがいいですよ。

この回答への補足

ご回答有難う御座います。
文字数制限のため、かなり省略させていただきました。
<?php
session_start();
$aaaa = md5(uniqid(mt_rand(), TRUE));
$_SESSION['aaaa'][] = $aaaa;
?>
<form method="post" action="confirm.php">
<table cellpadding="0" cellspacing="0" border="0">
<tr><td>項目</td><td>入力欄</td><td>記入例</td></tr>
<tr><td><label for="name">名前</label></td><td><input type="text" size="50" name="name" id="name" value="<?php print h(@$_SESSION['name']); ?>" /></td><td>例:goo 太郎</td></tr>
<tr><td><label for="kana">フリガナ</label></td><td><input type="text" size="50" name="kana" id="kana" value="<?php print h(@$_SESSION['kana']); ?>" /></td><td>例:グー タロウ</td></tr>
<tr><td><label for="mail">メール</label></td><td><input type="text" size="50" name="mail" id="mail" value="<?php print h(@$_SESSION['mail']); ?>" /></td><td>例:***@***.com</td></tr>
<tr><td><label for="birthday">生年月日</label></td>
<td>
<select name="year" id="year">
<option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option>
<option value="1974">1974</option><option value="1975">1975</option><option value="1976">1976</option><option value="1977">1977</option>
<option value="1978">1978</option><option value="1979">1979</option><option value="1980">1980</option><option value="1980">1981</option>
<option value="1982">1982</option><option value="1983">1983</option><option value="1984">1984</option><option value="1985">1985</option>
<option value="1986">1986</option><option value="1987">1987</option><option value="1988">1988</option><option value="1989">1989</option>
<option value="1990">1990</option><option value="1991">1991</option><option value="1992">1992</option><option value="1993">1993</option>
</select>年
<select name="month" id="month">
<option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option>
<option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option>
<option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option>
</select>月
<select name="day" id="day">
<option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option>
<option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option>
<option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option>
<option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option>
<option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option>
<option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option>
<option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option>
<option value="29">29</option><option value="30">30</option><option value="31">31</option>
</select>日
</td>
<td>例:1980年01月01日</td>
</tr>
<tr><td><label for="comment">お問合せ内容</label></td><td><textarea name="comment" id="comment" /><?php print h(@$_SESSION['comment']); ?></textarea></td><td >例:お気軽にご質問下さい</td></tr>
<tr><td colspan="3" style="text-align:center;"><input type="hidden" name="aaaa" value="<?php print h($aaaa); ?>" /><input type="submit" value="確認" alt="確認" /> </td></tr>
</table></form>
これがform.phpです。

補足日時:2009/10/03 15:30
    • good
    • 0

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