質問致します。文字制限があるので適所のみの抜粋ですがよろしくお願いします。
ある某PHPの参考書の付録CD-ROMにフォームメールのファイルが収められていたのですが、以下は入力フォームのformmail.html
とエラー処理を表す部分のformmail.phpの抜粋です。
./formmail.htmlにすべて入力してもエラーが出てしまいます。formmail.phpの必須項目のチェックおよびエラー時の処理のスクリプト文でおかしいところはあるでしょうか?市販されている参考書のCD-ROMをそのままコピーしたものなので動作しない事自体驚いています。どうぞよろしくお願い致します。
*formmail.html(簡潔に要約してあります)
<FORM method="post" action="./formmail.php">
名前(必須):<INPUT type="text" name="namae" size="20">
電話番号:<INPUT type="text" name="tel" size="20">
E-mail(必須)<INPUT type="text" name="email" size="20">
</FORM>
*formmail.php(必要箇所を抜粋)
// 必須項目のチェック
if (empty($namae)||empty($email)){
$err_message = "未入力の必須項目があります。<BR>\n";
}
// エラー時の処理
if (!empty($err_message)){
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=EUC-JP\">\n";
echo "<TITLE>エラー</TITLE>\n";
echo "</HEAD>\n";
echo "<BODY>\n";
echo "<H1>エラー</H1>\n";
echo $err_message;
echo "ブラウザの戻るボタンで戻り正しく入力して下さい\n";
echo "</BODY>\n";
echo "</HTML>";
exit;
}
// メール Body(本文)の設定
$mail_body = "
名前 - $namae
電話番号 - $tel
E-mail - $email
";
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
formmail_lib.php の内容がわからないので推測です。
// 初期設定終了
の次あたりに、以下の三行を加えたら動きませんか?
$namae = $_POST['namae'];
$tel = $_POST['tel'];
$namae = $_POST['namae'];
もし上記を追加して動くのであれば、参考書が前提としているphpの設定と、php1234さんの設定が異なるためだと思います。詳しいことは省きますが、register_globalsというphpの設定項目があって、PHP4.2以降ではこれがデフォルトでOff(それ以前はデフォルトOnだった)になったことが関係しています。上記の三行を追加する代わりに、php.iniファイルのregister_globals設定をOnに変えてもよいです。
なお、少し古い入門書の多くは、register_globals=Onの設定を前提にしていると思いますが、この設定はセキュリティ上の理由からOffにするのが推奨されています。セキュリティ対策が必要であれば、今の参考書で勉強した後に、書籍やサイトで勉強することをお勧めします。
>動作しない事自体驚いています。
phpに限らず、その言語を初めて学習する際には、参考書と同じバージョン・同じ設定の環境を作った方が、余計なことで悩まなくてすみますよ。ちょっとぐらいバージョンが違っても動くだろう、と安易に考えて失敗することは、私もやっちゃうんですけどね。
No.1
- 回答日時:
どういうエラーが出るのでしょう?
PHPは正常に動いていますか?
<?php
phpinfo();
?>
sendmail、Postfix等のメールサーバは動いてますか?
メールを送信するには送信メールサーバ(MTA)が動いている必要があります。
サーバ環境、エラー内容等が具体的でないと想像もつきません。
この回答への補足
taketan_mydns_jp様、ご返信ありがとうございます。文字制限が怖くて必要事項を書き忘れ申し訳ございません。以下が情報です。
(1)どういうエラーが出るのでしょう?
未入力の必須項目があります。ブラウザの戻るボタンで戻り正しく入力して下さい
というエラーが出ます。(しっかり3箇所入力されています)
(2)サーバー環境
PHP Version 4.3.11
Apache Version:Apache/1.3.37 (Unix) PHP/4.3.11 mod_ssl/2.8.28 OpenSSL/0.9.7d
sendmail、Postfix等のメールサーバも動いています。
また*formmail.phpの全ソースは以下のとおりです
<?php
/*******************************************************/
/* */
/* フォームメール */
/* */
/* 準備 */
/* formmail_lib.php を同じディレクトリに設置 */
/* */
/*******************************************************/
// 初期設定
// PHP のバージョン(日本語処理方法)により以下の値を設定
// 1 = PHP4.0.6 以降
// 2 = PHP3i18n(PHP3国際化版)
// 3 = nkf 使用
// 4 = jcode.php 使用
// 5 = その他
$version = 1;
// nkf を使用する場合、nkf のパスを指定
$nkf_path = "/usr/local/bin/nkf";
// jcode.php を使用する場合、jcode.php のファイル名を指定
$jcode_file = "jcode.php";
// メールの送信先のメールアドレスを設定
$mail_to = "xxxxxxxx";
// 送信メールの Subject(件名)を設定
$mail_subject = "xxxxxxx";
// 初期設定終了
// ファイルの呼び出し
include ('./formmail_lib.php');
// 必須項目のチェック
if (empty($namae)||empty($email)){
$err_message = "未入力の必須項目があります。<BR>\n";
}
// エラー時の処理
if (!empty($err_message)){
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=EUC-JP\">\n";
echo "<TITLE>エラー</TITLE>\n";
echo "</HEAD>\n";
echo "<BODY>\n";
echo "<H1>エラー</H1>\n";
echo $err_message;
echo "ブラウザの戻るボタンで戻り正しく入力して下さい\n";
echo "</BODY>\n";
echo "</HTML>";
exit;
}
// メール Body(本文)の設定
$mail_body = "
名前 - $namae
電話番号 - $tel
E-mail - $email
";
$mail_body .= "
-------------------------------------------------------
REMOTE_HOST $REMOTE_HOST
REMOTE_ADDR $REMOTE_ADDR
HTTP_USER_AGENT $HTTP_USER_AGENT";
// メール Header(ヘッダ)の設定
$mail_header = "From: $email\r\nErrors-To: $mail_to";
// メール送信処理
jmail($mail_to,$mail_subject,$mail_body,$mail_header);
// 送信完了画面表示
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=EUC-JP\">\n";
echo "<TITLE>送信完了</TITLE>\n";
echo "</HEAD>\n";
echo "<BODY>\n";
echo "<H1>送信完了</H1>\n";
echo "$mail_to 宛に送信されました\n";
echo "</BODY>\n";
echo "</HTML>";
exit;
?>
もちろんこのファイル以外にformmail_lib.php とjcode.phpも同じディレクトリにアップロードしてあります。
また必要な情報がございましたら補足致しますのでよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのPDOの導入
-
PHPでSMTPを使ってメール送信で...
-
フォントの色を変えるには?
-
最小公倍数をPHPで求めるには
-
CFileDialogの最初のディレクト...
-
GDへ値を渡す方法は?
-
onedrive にexcelファイルをア...
-
データ送信をボタンを押さずに...
-
10MB以内のJPG画像
-
PHPパーミッションについて
-
youtubeに音声のみのmp4ファイ...
-
.phpファイルが、表示されない
-
画像リストを作りたい
-
PHPから別なPHPへ移動(?)する方法
-
PHPでメールを受信するには?
-
セッションのクッキー有効期間...
-
SEO 動的・静的ページの説明に...
-
【PHP】フレームワークを習得す...
-
違法アップロードについて
-
ssiをhtmlで動作させる為、htac...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの色を変えるには?
-
PHP8を使うと、大量のWarningが...
-
トランザクションが原因?DBに...
-
「@$変数」の「@の意味は?」
-
パースエラーとは?
-
PHPで、エラーがない場合のみ画...
-
error_reporting(0);にも関わら...
-
SELECTの値を保持する
-
PHPにて外部サイト内容が取得不...
-
PHPでネットワークドライブのop...
-
fsockopenの例外について
-
PHPでfatal errorが出ても無視...
-
PHP、unpack関数でのエラー
-
Localeクラスについて
-
iframeからのアクセスか、ブラ...
-
bindValueエラー
-
PHPでSMTPを使ってメール送信で...
-
PHPでのPASSWORD一致確認処理に...
-
ASPをPHPに移植したいですが、...
-
これは例外処理でしょうか?
おすすめ情報