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

フォームからの項目数の制限

発言者:磯崎
( Date Thursday, May 01, 1997 02:30:23 )


フォームで処理できる項目の制限はあるのですか?
50項目くらいのアンケートをコンパイルしようとすると
「Stack overflow」というエラーメッセージがでてしまうのですが?

磯崎 さんからのコメント
( Thursday, May 01, 1997 02:44:11 )

Stack overflowってなんですか?という質問をされている方がすでにいました。
たぶん同じ状態だと思います。とりあえず大西 恒樹さんが言われているように
スクリプトをitem 15ぐらいずつに区切って試してみます。

磯崎 さんからのコメント
( Thursday, May 01, 1997 11:30:41 )

以前「Stack overflowってなんですか?」という質問に大西さんという方が答えていました。
>私の場合、60余りのフォームを処理させたのですが、set XXX to item n of myMessage
>の部分のスクリプトをitem 15ぐらいずつに区切り、
>set XXX to item 1 &... item 15 of myMassage
>set XXX to XXX & item 16 &...& item 30 of myMassage.....
>と書いてみたら回避できました。
この際「myMassage」はどこで定義するのでしょうか?

磯崎 さんからのコメント
( Thursday, May 01, 1997 12:50:09 )

実は大西さんの言うとおりにスクリプトをitem 15ぐらいずつに区切ったら「Stack overflow」
は回避できたのですが今度は「myMassageという変数は定義されていません。」
というエラーがでてしまいました。

田中求之 さんからのコメント
( Thursday, May 01, 1997 16:13:31 )

myMessage というのは、大西さんがスクリプトの中で定義している変数でしょうから
自分のスクリプトの中でそれが何に相当するのかわからなければ対処できません。

磯崎さんは、具体的には、どのようにスクリプトをかかれたのですか? それが
わからないことには、アドバイスのしようもないのですが。

磯崎 さんからのコメント
( Thursday, May 01, 1997 17:17:14 )

はい、すいません。
内容をご説明しますとフォームからアンケート(項目が52)をとります。
それを後で集計したいのでカンマ区切りのデータとしてテキストに書き込みます。
そしてお礼のメッセージを表示するというものです。
「ページに追加するデータを組み立てる」部分で「Stack overflow」になってしまったので
大西さんの例をそのまま利用したところコンパイルはできたのですが「myMassageという変数は定義されていません。」
と表示されました。
現在の状況のスクリプトの「ページに追加するデータを組み立てる」部分を以下に添付いたします。

    --- post_args のデコード
    set myList to DecodeJArgs post_args
    
    --- 受け取ったメッセージを整理する
    set guest1 to item 1 of myList
    set guest2 to item 2 of myList

途中を省略------------------------------------
    --- 名前とメッセージが空白の場合は記入ミスと見なす
    --- メッセージリストのページへリダイレクト
    if guest1 = "" or guest3 = "" then
      return redirect_header & "msg.html" & crlf & crlf
    end if
    
      --- ページに追加するデータ分割して組み立てる
    set myData to guest1 & "," & guest2 & "," & guest3 & "," & guest4 & "," & guest5 of myList
    set myData to myData & guest6 & "," & guest7 & "," & guest8 & "," & guest9 & "," & guest10 of myList
    set myData to myData & guest11 & "," & guest12 & "," & guest13 & "," & guest14 & "," & guest15 of myList
    set myData to myData & guest16 & "," & guest17 & "," & guest18 & "," & guest19 & "," & guest20 of myList
    set myData to myData & guest21 & "," & guest22 & "," & guest23 & "," & guest24 & "," & guest25 of myList
    set myData to myData & guest26 & "," & guest27 & "," & guest28 & "," & guest29 & "," & guest30 of myList
    set myData to myData & guest31 & "," & guest32 & "," & guest33 & "," & guest34 & "," & guest35 of myList
    set myData to myData & guest36 & "," & guest37 & "," & guest38 & "," & guest39 & "," & guest40 of myList
    set myData to myData & guest41 & "," & guest42 & "," & guest43 & "," & guest44 & "," & guest45 of myList
    set myData to myData & guest46 & "," & guest47 & "," & guest48 & "," & guest49 & "," & guest50 & "," & guest51 & "," & guest52 & return

以上です。
現在この状態でコンパイルしてテストすると「文書データがみあたらない」というエラーがでます。
すいませんアドバイスお願いします。

田中求之 さんからのコメント
( Thursday, May 01, 1997 18:00:17 )

確認ですが、guest1 から guest52 のデータというのは、デコードした myList の
各アイテムをそのまま割り当てたものですか? それとも何らかの加工を行っていますか?

もし単純に myList をカンマ区切りのデータにしたいだけでしたら、text item delimiters
を操作して、一発で変換できますよ。以下のようなスクリプトになります。

set oldDel to AppleScript's text item delimiters --- delimiter の保存

set myList to DecodeJArgs post_args --- デコード

set AppleScript's text item delimiters to {","} --- delimiters をカンマに変更
set myList to (myList as string) & return  --- リストをカンマ区切りの文字列へ変換

set AppleScript's text item delimiters to oldDel --- delimiters を初期値に戻す


というスクリプトで、myList の中身は、デコードした結果をコンマ区切りで
ならべたものになりますよ。ですから、あとは、これをファイルに書き込んで、
最後にメッセージを return すればよいことになります。


磯崎 さんからのコメント
( Thursday, May 01, 1997 22:30:18 )

ありがとうございました。
なんとかできました。2日もかかってしまいました。
「delimiter」にしても「appendToFile」にしてもスクリプトをしらないのでだめなんですね。
(本はもっているのですがなかなか.........)
覚えて一から書けるようになると楽しそうですけど。いつのことやら、当分お世話になります。
よろしくお願いします。

ところで今回はとりあえずできなかったのですが、複数選択のチェックボックスをフォームの中間で
使った場合、データの項目がばらばらになりますが、こういう場合に複数選択の部分をグループ化して
あとから集計しやすくすることはできるのでしょうか?......
それでは失礼します。

田中求之 さんからのコメント
( Friday, May 02, 1997 00:16:01 )

Tanaka's osax を使ってデコードを行う場合、チェックボックスが混じっていると
ちょっと大変なんですよ (^_^;;  フォームの書き方次第では、集計が不可能という
事態すら起こりかねないという欠点があります。

チェックボックスをうまく処理するのでしたら ACME parse args という osax を
使うほうがいいでしょう。ただし、漢字コードのチェック&変換が面倒になりますが。

Tanaka's osax でも、デコード結果のリストを、項目名を含んだものにするよう
に作り替えれば、チェックボックスだろうがなんだろうが怖くなくなるのですが、
どういうわけか(というか、私の力不足で)、うまくいかないんです。

{{項目名, データ}, {項目名, データ}}

というリストの入れ子になったものを osax 内でつくろうとすると、うまくいかずに
行き詰まってます (;_;)  …どこかによいサンプルのソースはないだろうか…


ま、個人的にチェックボックスを使うことがないので、ま、いいかぁ、という気には
なってんるんですけどね (^_^;;

磯崎 さんからのコメント
( Friday, May 02, 1997 11:15:07 )

そうなんですか?
でも「ま、いいかぁ」と言わずに、私たちTanaka's osaxユーザーのためにも是非お願いします。