いつも参考にさせていただいています。
早速ですが、クッキーのことで質問させてください。
<input type=checkbox name=address value=****@***.ne.jp>
<input type=checkbox name=address value=****@***.ne.jp>
<input type=checkbox name=address value=****@***.ne.jp>
という感じで、HTMLを作成してあります。
ボックスでONにしたもののvalueをクッキーファイル内で、
address:****@***.ne.jp,****@***.ne.jpという感じで、
一つの項目として保存したいです。
現在は、ボックスを複数選択しても、
address:****@***.ne.jpで一つしか保存されません。
参考・ヒントをいただけると大変助かります。
よろしくお願いします。
(初心者なので、できればソースなど具体的な回答が助かります)
No.2ベストアンサー
- 回答日時:
少し情報が足りないので、おそらく、cgi-lib.plを利用されてると思われますが…
一つは値が取得できているようなので、その後の書き出しの部分までの処理に問題があると考えられます。
cgi-lib.plを利用しているのであれば、steel_grayさんもおっしゃっていますが、nameが全て同じaddressという値なので、
$address = $FORM_DATA{"address"};
とした時点で、$addressにチェックした箇所のvalue値がnull文字で区切られて入っていると思われます。
よって、値の取得からクッキーデータ作成までは、
$address = $FORM_DATA{"address"}; #値の取得
&jcode'convert(*address,"sjis"); #文字コードの変換
$address =~s/\0/,/g; #区切り文字全てをnullから「,」に変更
$c_line="cookietest=address:$address; expires=Sat,26-February-2005 00:00:00 GMT";
とすれば、$c_lineに必要な値が入ると思われます。
変数名等は適宜変更してください。
また、蛇足ではありますが、join関数の第二引数に$c_addressという変数を利用されていますが、
join関数の第二引数は配列です。
join関数は第二引数で指定された配列の要素を第一引数を区切り文字として連結する関数です。
この回答への補足
回答ありがとうございます。
スクリプトを書き直したのですが、
クッキーファイルには、
cookietest・address・ のように何も保存されていない状態になります。
バカ正直にそのまま書き直すだけではダメなのでしょうか?
遅くなりましたが、cgi-lib.plを使用しています。
use CGI qw(:standard);
require "jcode.pl";
$CgiURL="mail.cgi";
$address = $FORM_DATA{"address"};
&jcode'convert(*address,"sjis");
$address=~ s/\0/,/g;
$c_line="cookietest=address:$address; expires=Sat,26-February-2005 00:00:00 GMT";
No.3
- 回答日時:
一点気になる点があるのですが…
「現状のスクリプト」として書き込んでいただいたものがありますよね?
このスクリプトは1つのファイルに記述されているのでしょうか?
$CgiURL="mail.cgi";
<form action="$CgiURL" method"post">
という記述から、SUBMITボタンを押したときにフォームのデータはPOSTでmail.cgiというファイルに渡されることが分かります。
よって、クッキー作成から出力まではこちらのファイルに記述する必要があります。
こちらのファイルでもcgi-lib.plをインポートするのを忘れないようにしてください。
あと、methodと"post"の間に=を入れてください。
お礼の投稿が遅くなり大変申し訳ありませんでした。
色々試した結果、
スマートではありませんが、
正しい結果は得られました。
ありがとうございました。
また、わからないときは助力をお願いします。
No.1
- 回答日時:
同じnameを持つ項目をどのように扱っていいかは、
CGIにpostされたフォームデータの解析をしている部分の作り方によります。
現在どのように・・・
CGI.pmやcgi_lib.plなどを使っているのか、
それとも自前のデコードルーチンを使っているのか、
を具体的に教えてください。
また、現在cookieへ保存している部分も具体的に教えてください。
また、そのスクリプトがどこかで配布しているクリプトを母体にした改造版ならば元のスクリプトの素性もわかると回答に役立つかも。
具体的な回答をするには具体的な現状説明が必要です。
一応ヒントだけを書いておくと、CGI.pmやcgi-lib.plを使っているならば、同じnameの項目は1つの変数にnullで区切られて格納されているので、
@address = split /\0/,$q->param('address');
みたいな感じで配列に格納しなおして処理します。
この回答への補足
回答ありがとうございました。
下記が現状のスクリプトです。
スクリプトの母体は、手元にある「perl/CGI逆引き大全 555の極意」秀和システム出版の本です。
(スキルがないので、ほどんど改造していない状態です)
よろしくお願いします。
#!/perl/bin/perl
use CGI qw(:standard);
require "jcode.pl";
$CgiURL="mail.cgi";
$address = $FORM_DATA{"address"};
&jcode'convert(*address,"sjis");
$c_address="address=$address";
$c_line=join(",",$c_address);
$c_line=~ s/=/:/g;
$c_line=~ s/・/br/g;
$c_line="cookietest=$c_line\; expires=Sat,26-February-2005 00:00:00 GMT";
#=============================================
#HTML表示
#=============================================
print <<"EOL";
Content-Type:text/html
Set-Cookie:$c_line
<html>
<head>
<title>メールアドレス</title>
<META http-equiv=content-type content="text/html;charset=shift_jis">
</head>
<body>
<form action="$CgiURL" method"post">
<a name="head">
<table border=1 align=center>
<tr>
<th colspan=4>本 社</th>
</tr>
<tr>
<td><input type=checkbox name=address value=*****></td>
<td>1</td><td>A太郎</td><td>***@****.ne.jp</td>
</tr>
<tr>
<td><input type=checkbox name=address value=*****></td>
<td>12</td><td>B太郎</td><td>***@****.ne.jp</td>
</tr>
<tr>
<td><input type=checkbox name=address value=*****></td>
<td>15</td><td>C太郎</td><td>***@****.ne.jp</td>
</tr>
<tr>
<td colspan=4 align=right><input type="submit" value="クッキーをセット"></td>
</tr>
</table>
</form>
</body>
</html>
EOL
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlでCGIを試みたのですが・・・
-
Location: で cgi → c...
-
自CGIのURLのパス部分を取得す...
-
jcode.plが読み込めない
-
週2回のペースって だいたい何...
-
アンケートなどの1日1回の投...
-
エクセルで相対パスの書き方を...
-
月の第一週とは
-
よくある 『 第○(1・2・3・4・...
-
[Excel] ある日の曜日が当月の"...
-
エクセルで毎月第2週日の水曜日...
-
毎○曜日って、使いますか?
-
リストコントロールの列幅を固...
-
DBを10件毎に表示ページング...
-
Excelで第一〇曜日を求める方法...
-
ユーザー定義の(aaa)
-
今月は1日が日曜日で、31まであ...
-
社外からのアクセスかどうか判...
-
#include<stdio.h>
-
[C#]ListView一覧表示時の幅設...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jcode.plが読み込めない
-
cgiとplとpm
-
環境変数に任意の文字列をセッ...
-
require文が実行できない
-
Perlソースを2つのファイルに分...
-
Quantifier follows nothing in...
-
携帯用のページに perl で post
-
CGIの中にinclude
-
Location: で cgi → c...
-
PDFJが動作しない
-
バイナリファイルのアップロード
-
gifcat.pl:助言お願い致します
-
ファイル書込時にPermission de...
-
HTML化によるホームページの高...
-
apacheの mod_rewite の設定方...
-
use CGI
-
cgiからcgiをコールする。
-
htmlからテキストを返すperlを...
-
imgタグのクエリストリングを取...
-
win32::mediaplayerについて
おすすめ情報