【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

質問致します。文字制限があるので適所のみの抜粋ですがよろしくお願いします。
ある某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件)

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に限らず、その言語を初めて学習する際には、参考書と同じバージョン・同じ設定の環境を作った方が、余計なことで悩まなくてすみますよ。ちょっとぐらいバージョンが違っても動くだろう、と安易に考えて失敗することは、私もやっちゃうんですけどね。
    • good
    • 0

どういうエラーが出るのでしょう?


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も同じディレクトリにアップロードしてあります。
また必要な情報がございましたら補足致しますのでよろしくお願い致します。

補足日時:2006/12/04 23:25
    • good
    • 0

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