• ベストアンサー

クッキーについて

いつも参考にさせていただいています。 早速ですが、クッキーのことで質問させてください。 <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で一つしか保存されません。 参考・ヒントをいただけると大変助かります。 よろしくお願いします。 (初心者なので、できればソースなど具体的な回答が助かります)

  • Perl
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • tune222
  • ベストアンサー率50% (2/4)
回答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関数は第二引数で指定された配列の要素を第一引数を区切り文字として連結する関数です。

aimi7010
質問者

補足

回答ありがとうございます。 スクリプトを書き直したのですが、 クッキーファイルには、 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";

その他の回答 (2)

  • tune222
  • ベストアンサー率50% (2/4)
回答No.3

一点気になる点があるのですが… 「現状のスクリプト」として書き込んでいただいたものがありますよね? このスクリプトは1つのファイルに記述されているのでしょうか? $CgiURL="mail.cgi"; <form action="$CgiURL" method"post"> という記述から、SUBMITボタンを押したときにフォームのデータはPOSTでmail.cgiというファイルに渡されることが分かります。 よって、クッキー作成から出力まではこちらのファイルに記述する必要があります。 こちらのファイルでもcgi-lib.plをインポートするのを忘れないようにしてください。 あと、methodと"post"の間に=を入れてください。

aimi7010
質問者

お礼

お礼の投稿が遅くなり大変申し訳ありませんでした。 色々試した結果、 スマートではありませんが、 正しい結果は得られました。 ありがとうございました。 また、わからないときは助力をお願いします。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答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'); みたいな感じで配列に格納しなおして処理します。

aimi7010
質問者

補足

回答ありがとうございました。 下記が現状のスクリプトです。 スクリプトの母体は、手元にある「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

  • クッキーでこういうことできる?

    クッキーでこういうことできますか? チェックを入れたものをクッキーで保存しておく。 ページをリロードしても、チェックを入れたものは当日限りチェックが入ったまま。 日課管理用です。 今日のお仕事 <INPUT TYPE="CHECKBOX" NAME="mytask" VALUE="玄関掃除">玄関掃除<BR> <INPUT TYPE="CHECKBOX" NAME="mytask" VALUE="トイレ掃除">トイレ掃除<BR> <INPUT TYPE="CHECKBOX" NAME="mytask" VALUE="草取り">草取り<BR> <INPUT TYPE="CHECKBOX" NAME="mytask" VALUE="お茶だし">お茶だし<BR> #CGIなど使わず、javascriptのみで可能か。

  • 【mysql : HTML】チェックボックスの処理

    チェックボックスで、複数の項目をフラグとして扱うにあたって ビット演算を使いたいと思っています。 この時、チェックボックスを作成するフォームの値は <input type="checkbox" name="category[]" value="1" />ライフ <input type="checkbox" name="category[]" value="2" />デジタルライフ <input type="checkbox" name="category[]" value="4" />趣味 <input type="checkbox" name="category[]" value="8" />エンターテイメント . . . と、valueの値をべき乗づつ増やしてくもしくは、あるいは value の値を1234としてやってあとでx2するかして それらの合計(例えばチェック状態が00101 なら 5)を DBに保存してやるというロジックでいいのでしょうか? 他のポータルサイトのソースをみても、そんなやり方してるサイトをみかけないので はたしてこれで合ってるのか不安になってきて質問させて頂きました。

    • ベストアンサー
    • MySQL
  • チェックボックスの全選択

    <input type="checkbox" name="chk" value=1> <input type="checkbox" name="chk" value=2> <input type="checkbox" name="chk" value=3> <input type="checkbox" name="chk" value=4> <input type="checkbox" name="chk" value=5> このように同一名称のチェックボックスに対して ボタンを押下された時全てのチェックボックスを チェックするJavaScriptの 書き方を教えて貰えないでしょうか

  • チェックボックスをクリックした際、自動的に他の値も

    ■チェックボックスをクリックした際、自動的に他の値も追加したい 下記のようなチェックボックスがあった際に、 <input type="checkbox" name="hoge[]" value="1" />ホゲ  <input type="checkbox" name="piyo[]" value="1" />ピヨ  <input type="checkbox" name="puyo[]" value="1" />プヨ  ホゲをクリックしたら、value="1"になるかと思うのですが、 このvalue部分を動的に生成することはできるでしょうか? 例えば、ホゲをクリックしたら(ホゲをクリックした時だけ)、 自動的に、 <input type="checkbox" name="hoge[]" value="1" /> <input type="checkbox" name="hoge[]" value="2" /> <input type="checkbox" name="hoge[]" value="3" /> <input type="checkbox" name="hoge[]" value="4" /> <input type="checkbox" name="hoge[]" value="5" /> <input type="checkbox" name="hoge[]" value="6" /> <input type="checkbox" name="hoge[]" value="7" /> <input type="checkbox" name="hoge[]" value="8" /> <input type="checkbox" name="hoge[]" value="9" /> をクリックしたのと同じ処理が走るよう、スクリプトで書くには、 どうすればよいでしょうか?

  • チェックボックス連結

    MySQLで、perlを使ってチェックボックスでデータを送信するのですが、 カラムを分けずに、チェックボックスで複数選択されたデータを、;などの仕切りで同一フィールドへ記録したいのですが、やり方がわかりません。 <input type = checkbox name = col1 value="1"> <input type = checkbox name = col1 value="2"> <input type = checkbox name = col1 value="3"> <input type = checkbox name = col1 value="4"> 結果 col1 |col2 | +-------------- 1;2;3;4| | のような感じです。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • クッキー認証>クッキー削除ができない!!

    今回は、クッキー認証画面を作成している際、 エラーが出てしまって先に進めず投稿しました。 下記にプログラム記載 ----H_01.html---------------------------------- <html> <head> <title>クッキー認証</title> </head> <body> <center> <form method="POST" action="H_02.php"> 名前<input type="text" name="name"> パスワード<input type="Password" name="pass"> cookieを記録する<input type="checkbox" name="chk"> <input type="submit" value="送信"> <input type="reset" value="リセット"> </form> </center> </body> </html> ------------------------------------------------ -----H_02.php---------------------------------- <?php $name = $_COOKIE['name']; $pass = $_COOKIE['pass']; $cnt = $_COOKIE['chk']; if ($cnt == True) { $lim = time()+7*24*60*60; //有効期限1週間 setcookie('name',$name,$lim); setcookie('pass',$pass,$lim); } else { setcookie('name'); setcookie('pass'); } ?> ------------------------------------------------ else文内の、setcookie二行にエラーが出ます。 htmlでチェックボックスにチェックが施されていない場合、クッキーを削除。 調べてみたのですが、どうしたらよいのかわからず 投稿しました。よろしくお願いします。

    • ベストアンサー
    • PHP
  • クッキーの初歩的質問

    クッキーに下記のような内容を書き込む方法を教えて下さい。上から順にクリックしていったときに、alert(★)の部分を「1,2,3」という結果にしたいのですが。 <SCRIPT language=JavaScript> function memoryCookie(num){ expires = new Date() expires.setTime(expires.getTime() + 24*60*60*1000) document.cookie = "mydata=" + num + ";expires=" + expires.toGMTString() alert(★) } </SCRIPT> <form name="myform"> <INPUT TYPE="CHECKBOX" NAME="test" VALUE="1" onclick="memoryCookie(this.value)">1<BR> <INPUT TYPE="CHECKBOX" NAME="test" VALUE="2" onclick="memoryCookie(this.value)">2<BR> <INPUT TYPE="CHECKBOX" NAME="test" VALUE="3" onclick="memoryCookie(this.value)">3<BR>

  • CHECKBOXとTEXTBOXのnameが同じ場合

    下記のようにチェックボックス名とテキストボックス名が同じ場合、エラーになりますが、これをjavascriptのみでうまく処理できる方法はないでしょうか。 #nameは同じまま。 #cgiを経由せず。 #下記と同じことをやりたいわけではありません。単に簡単にしたサンプルです。 <form name="main"> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="東京">東京<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="大阪">大阪<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="その他" onclick="document.main.address.value = 'その他だよ'">その他<BR> <INPUT TYPE="text" NAME="address" SIZE="20"> </form>

  • JAVAのチェックボックスの扱いについて

    HTMLから選択された情報をJSPで表示するプログラムを作っているのですがチェックボックスが選択されてるかどうかのプログラムの書き方がわかりません。 とりあえず出来ているところまでのソースを見せます。 ・HTML <input type="checkbox" name="aa" value="aa"> <input type="checkbox" name="aa" value="bb"> <input type="checkbox" name="aa" value="cc"> <input type="checkbox" name="aa" value="dd"> <select name="abc"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> ・JSP //情報をもらう String abc = request.getParameter("abc"); String[] aa = request.getParameterValues("aa"); for(int i=0;i<aa.length;i++){ aa[i]; } 上のようにチェックボックスは情報を取り出しているんですが 選択されていないときはエラーになってしまいます。 for文の前に値が入っているかどうかのチェックをしなくてはいけないのですがどのように書いていいかわかりません。 誰か教えてください。

    • ベストアンサー
    • Java
  • チェックボックス選択で(3つ)まで

    チェックボックス選択で(3つ)まで <input type="checkbox" name="fhobby" value="animation">アニメ <input type="checkbox" name="fhobby" value="game">ゲーム <input type="checkbox" name="fhobby" value="reading">読書 <input type="checkbox" name="fhobby" value="amusement">娯楽 <input type="checkbox" name="fhobby" value="comics">漫画 <input type="checkbox" name="fhobby" value="jogging">ジョギング<br> <input type="checkbox" name="fhobby" value="cycling">サイクリング <input type="checkbox" name="fhobby" value="shopping">ショッピング <input type="checkbox" name="fhobby" value="picture">絵画 <input type="checkbox" name="fhobby" value="travel">旅行 <input type="checkbox" name="fhobby" value="others">その他

    • ベストアンサー
    • HTML

専門家に質問してみよう