PHP学習中です。
こちらでの質問も不慣れなため、至らない点があるかと思います。
その際はご指摘のほどよろしくお願いいたします。
これまでの環境(Apache2.2.15 PHP5.6.32)では正常に動作していたメールフォームを
新たなホスティングサーバ(Apache2.2.15 PHP5.3.3)に移したところ
セッションの値が取得できなくなってしまいました。
入力画面(contact.html)→プログラム(formmail01.php)→確認画面(confirm.php)
の流れになっており、確認画面に移動した際は、エラーメッセージ、入力したデータが共に表示されませ。
PHPエラーも表示されないため、原因がわかりません。
改善策がありましたらご教示ください。
入力画面(contact.html)
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>問い合わせフォーム</title> </head> <body> <form id="mail_form" name="form" method="post" action="./formmail01.php"> ●会社名<br> <input id="fI_01" name="company" type="text" tabindex="1"> ●ご担当者様<span>必須</span><br> <input id="fI_02" name="name;s" value="" type="text" tabindex="2"> ●e-mail<span>必須</span><br> <input id="fI_03" name="email;s" value="" type="email" tabindex="3"> ●e-mail(確認用)<br> <input id="fI_04" name="emailcheck" value="" type="email" tabindex="4"> ●お問い合わせ内容<span>必須</span> <textarea id="fI_06" name="contents;s" tabindex="6"></textarea> <input type="submit" value="送信内容を確認する" tabindex="9"> </body> </html>
プログラム(formmail01.php)
<?php session_start(); ~変数、メール送信プログラム割愛しています~ $_SESSION = array(); session_unset(); session_destroy(); header('Location: thanks.html'); break; default: // 入力データ処理 session_unset(); foreach ($_POST as $key => $value) { list($name, $option) = explode(";", $key); if ($option == 's' && !$value) { $_SESSION[$name] = '<span class="ERR">項目が未入力です。</span>'; $error = 1; } elseif ($name == 'email' && $value) { if (!preg_match("/^[\w\-.]+\@[\w\-.]+.([a-z]+)$/", $value)) { $_SESSION['email'] = '<span class="ERR">無効なメールアドレスの形式です。</span>'; $error = $email = 1; } else { $_SESSION['email'] = $email = $value; } } elseif ($name == 'emailcheck') { if ($email != 1 && $email != $value) { $_SESSION['email'] = '<span class="ERR">メールアドレスが一致しません。</span>'; $error = 1; } } else { if (is_array($value)) { $value = implode("\t", $value); } if (get_magic_quotes_gpc()) $value = stripslashes($value); $value = mb_convert_encoding($value, $internal_enc, 'AUTO'); $value = mb_convert_kana($value, 'KVa'); $value = htmlspecialchars($value, ENT_QUOTES); $_SESSION[$name] = nl2br($value); } } $_SESSION['inputErr'] = $error; header('Location: confirm.php'); } exit; function Err($err) { // エラー表示用 $internal_enc = $GLOBALS['internal_enc']; echo <<<EOM <html lang="ja"><head> <meta http-equiv="Content-Type" content="text/html; charset={$internal_enc}" /> <title>エラー:$err</title></head> <body style="font-size: 12px; line-height: 1.8em;"> <strong>エラー : </strong>$err<br> <input type="button" value="戻る" onclick="history.back();"> </body></html> EOM; exit; } ?>
確認画面(confirm.php)
<?php session_start(); if (SID) Err('Cookieを有効にして下さい'); if (!$_SESSION) header('Location: thanks.html'); function Err($err) { echo <<< EOM <html lang="ja"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1"> <title>エラー:$err</title></head> <body style="font-size: 12px; line-height: 1.8em;"> <strong>エラー : </strong>$err<br> <input type="button" value="戻る" onclick="history.back();"> </body></html> EOM; exit(); } //ここまで ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>問い合わせフォーム</title> </head> <body> <form id="mail_form" name="form" method="post" action="./formmail01.php"> ●会社名<br> <?$_SESSION['company']?> ●ご担当者様<span>必須</span><br> <?$_SESSION['name']?> ●e-mail<span>必須</span><br> <?$_SESSION['email']?> ●お問い合わせ内容<span>必須</span> <?$_SESSION['conttents']?> <span> <?php //入力項目エラー判定 if($_SESSION['inputErr']){ echo'<input type="button" value="修正する" onclick="history.back()" />'; }else{ echo'<p>入力内容に間違いがないことを確認し、[送信する]ボタンを押してください。</p> <input name="mode" type="hidden" id="mode" value="SEND" /> <input type="button" value="修正する" onclick="history.back()" /> <input type="submit" value="送信する" />'; } ?> </span> </body> </html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/25 01:26
2018/09/25 01:30