質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1783閲覧

PHPメールフォーム:セッションの値が取得できない

akinco

総合スコア17

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/09/21 17:11

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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

確かPHP5.4より前のバージョンでは短縮タグがデフォルトoffになっていたように思います。

PHP 5.4.0 より前のバージョンでは、 このディレクティブは、<? echoと同じ形式の ショートカット<?=も影響を受けます。 このショートカットを使用するには、 short_open_tagをonとする 必要があります。 PHP 5.4.0 以降では、<?= は常に有効となります。

short_open_tagをONにするか、短縮表記を使っているところは全てきちんと echoを書くことで対応可能になると思います。

投稿2018/09/21 22:03

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akinco

2018/09/25 01:26

返信が遅くなり申し訳ありません。 ご教示いただいた通り、short_open_tagのOffが原因でした。 echoでは現象が解消されなかったため、short_open_tagの設定を変更したところ 無事、表記されるようになりました。 誠にありがとうございました。
m.ts10806

2018/09/25 01:30

echoはどう書いたかによります。 短縮タグは基本echoを省略しただけなので。 ひとまず解決したようで何よりです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問