このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

guestMail is not defined

発言者:やまね
( Date Thursday, July 31, 1997 03:51:17 )


ここ3〜4日、会議室を片っ端から探したのですが、ヒントになりそうな過去のログが
もつからないので、あまりに初歩的で気がひけるのですが、質問させてください。

guestMail(NE版)を試しているのですが、guestMailの1.2ともに
The variable guestMail is not defined. 
とエラーが返ってきます。
心あたりは、
・送信先アドレスが異なるサーバーにあること
・フォーム入力HTMLにテキスト入力だけでなく、チェック・ボックス
 による選択肢も入っている
・ファイルの名前をform.html、form.acgiと変えている(スクリプトや
 htmlファイルの該当する部分は名前の変更に従って書き換えているつも
 りです)
のどれかかな、と思っているのですが、まず
・メールの受け取りはcgiを置いているサーバーにないアカウントでも
 良いのでしょうか?
・チェック・ボックス入のフォームを使っても構わないでしょうか?
・「ありがとうございます」と表示する代わりに他のページを
 表示させることはできますか?
・メッセージ書き込みようhtmlは<html>などのタグを入れては
 いけないのでしょうか?(見本になかったもので)

サーバーはquadra800でAIMSとWebStar1.3.2を使っており、
guestmsgを少し変更したacgiは無事に動いております(田中様ありがとうございます)

本当に初歩的で恐縮ですが、どなたか教えて頂ければと思っております。
よろしくお願い致します。

田中求之 さんからのコメント
( Thursday, July 31, 1997 12:23:46 )

>The variable guestMail is not defined. 
>とエラーが返ってきます

スクリプトのエラーであることは確実なようです。

変更なさった内容は、どれも問題になるようなことではありませんので、変更に際して
スクリプトにミスが混じってしまったと考えられます。

念のため確認ですが、変更を加えない guestMail はちゃんと動きましたか?

やまね さんからのコメント
( Thursday, July 31, 1997 22:52:28 )

早速のコメント、ありがとうございます。
変更を加えないguestMail2では、無事、送れます。

長くなって恐縮なのですが、変更を加えた部分を見て頂いてもよろしいでしょうか?

スクリプトの変更部分
---- ここからが CGI 処理の本番

on ヌevent WWWスsdocネ path_args ツ
  given ヌclass kforネ:http_search_args, ヌclass postネ:post_args
  try
    --- post_args のデコード
    set myList to DecodeJArgs post_args
    
    set guestName to item 1 of myList
    set guestAddress to item 2 of myList
    set guestFavorites to item 3 of myList
    set guestAgain to item 4 of myList
    set myBody to item 5 of myList
    
    if guestName = "" or myBody = "" then
      --- 記入ミス
      return & redirect_header & "form.html" & crlf & crlf
    end if
    
    if guestMail = "" then
      set guestAddress to "(記入なし)"
    end if
    
    --- メッセージの改行コードの統一
    set myBody to xReturner myBody
    
    --- 受け取ったメッセージを整理する
    set myData to "アクセスした人からメッセージが届きました" & return & return ツ
      & "日時: " & ((current date) as string) & return & return ツ
      & "名前: " & guestName & return ツ
      & "メールアドレス: " & guestAddress & return ツ
      & "お気に入り: " & guestFavorites & return ツ
      & "再見: " & guestAgain & return ツ
      & "メッセージ:" & return & myBody
    
    --- メール送信
これ以外は、自分のアドレスを設定した以外、無変更でも、同様のエラーが戻ってきます。
アプリケーション名はform.acgiにしています。

記入用htmlの方は、以下のようになっています。

<TITLE>ご感想をどうぞ</TITLE>
<body bgcolor="#eeeeee" text="#1822cd" link="#18605a" vlink="#dc54ad" alink="#8154d1">
<CENTER><H2>ご感想記入フォーム</H2>
<P><IMG SRC="bar.gif"><P>

<FORM method=POST action="form.acgi">
<INPUT TYPE="HIDDEN" NAME="sendAddress" VALUE="onehchan@tnp.com">
<B>お名前:</B><INPUT TYPE="text" NAME="name" SIZE="20">
<P>
<B>メールアドレス:</B><INPUT TYPE="text" NAME="address" SIZE="30">
<P>
<B>どのコーナーが面白かったですか?:</B><P>
<INPUT TYPE="checkbox" NAME="favorites" VALUE="same">全部、同じくらい
<INPUT TYPE="checkbox" NAME="favorites" VALUE="essay">エッセー
<INPUT TYPE="checkbox" NAME="favorites" VALUE="photo">写真館
<INPUT TYPE="checkbox" NAME="favorites" VALUE="movie">映画関連
<INPUT TYPE="checkbox" NAME="favorites" VALUE="town">街の風景
<INPUT TYPE="checkbox" NAME="favorites" VALUE="drive">大陸横断紀
<INPUT TYPE="checkbox" NAME="favorites" VALUE="nothing">特にない
<P>
<B>また来て頂けますか?:</B>
<INPUT TYPE="radio" NAME="again" VALUE="maybe" CHECKED>わからない
<INPUT TYPE="radio" NAME="again" VALUE="yes">来る
<INPUT TYPE="radio" NAME="again" VALUE="no">来ない
<P>
<B>ご自由に・・・</B>
<TEXTAREA NAME="kansou" ROWS=10 COLS=80></TEXTAREA>
<P>
<INPUT type="submit" value="送信">   <input type="reset" value="取り消し"><p>
</FORM>
<IMG SRC="bar.gif"><P>
</CENTER>
<LI><A HREF="http://www.tnp.com/~onehchan/comment.html">前のページ</A>に戻る
<LI><A HREF="http://www.tnp.com/~onehchan/top.html">トップ</A>に戻る

見本にならって<HTML>といったタグは入れないで実験しております。
きっととても初歩的なミスかとは思いますが、自分では発見できずにおります。
どうぞよろしくお願い致します。

やまね さんからのコメント
( Friday, August 01, 1997 11:49:22 )

いろいろとお世話になります。

その後、変更を最小限にしてテストしていたら、表示には最初と同様のエラーが
出るのですが、ナント、送ったはずのフォームのデータが掲示板(guestMsgを
元にしたもの)の方に書き込まれる、という怪現象が起きてしまいました。
同じディレクトリに置いているのが悪いのでしょうか?
WebStarのフォルダ内なら、acgiをさらに深い階層に置いても大丈夫でしょうか?

田中求之 さんからのコメント
( Friday, August 01, 1997 12:19:07 )

スクリプトに関して、以下の点が間違っています。

    if guestMail = "" then
      set guestAddress to "(記入なし)"
    end if

エラーメッセージの言うとおり、guestMail という変数が定義されていないために
エラーになります。ここは

    if guestAddress = "" then
      set guestAddress to "(記入なし)"
    end if

にならないといけません。


田中求之 さんからのコメント
( Friday, August 01, 1997 12:21:07 )

>WebStarのフォルダ内なら、acgiをさらに深い階層に置いても大丈夫でしょうか?

CGI の名前や、FORM タグでのリンクのしかたに注意すれば、好きな階層に
おいてもらって結構ですが、場合によってはスクリプトを変更する必要が出てくる
かもしれません。


やまね さんからのコメント
( Friday, August 01, 1997 23:57:31 )

田中様、コメントをどうもありがとうございましたm(_ _)m
全く、基本的なミスでお恥ずかしい限りです。
おかげ様で、無事、送信してくれるようになりました。

> The variable guestMail is not defined. 
というのは、正にguestMailという言葉をさしていたのですね。
エラーの読み方の勉強になりました。

お忙しいところ、親切に教えて頂きまして、本当にどうもありがとうございました。

田中求之 さんからのコメント
( Saturday, August 02, 1997 00:40:13 )

無事に動いて何よりです。

エラーメッセージで間違いの個所が見当がつくまでには、色々と間違いを積み重ねる
必要がありますので (^_^;; 最初のうちは、なかなかわからないものなんですよね。