CGIでHTMLのTABLEを表示したとき。

[上に] [前に] [次に]
ユミ [E-Mail] 1999/06/10(木) 13:13:27
クッキーのデータをテーブルで表示させたいのですが
1つ目と2つ目のデータの間に空白の<td></td>が入ってしまいます。
どうしてそうなるのかわからないのでどなたかアドバイス頂けませんか?よろしくお願いします。
〜〜*〜〜*〜〜*〜〜*〜〜*〜〜*〜〜*〜〜
print "<html><center><h1>Cookie中身</h1></center><hr><table border='1'><tr>\n";
@pairs = split(/:/,$ENV{'HTTP_COOKIE'});

foreach $value(@pairs){
@s = split(/&/,$value);
#print "@s";
foreach (@s){
($n,$p) = split(/,/);
print "$n,$p";
print "<td>$p</td>";
}
print "</tr><tr>";
}
〜〜*〜〜*〜COOKIEのデータです〜*〜〜*〜〜
hinban,1111&name,ココア&kazu,7&tanka,785:&hinban,2222&name,コーヒー&kazu,5&tanka,365:

ユミ 1999/06/10(木) 13:16:49
すみません。付け足しです。上のプログラムのコメント行とprint "$n,$p";はムシしてください。

たこすけ 1999/06/10(木) 13:40:02
> &hinban,2222
この&が余計じゃないですか?

B-Cus 1999/06/10(木) 13:52:01
こんな感じで毎回質問していては先が思いやられるので、
print文を埋め込んでデバッグする癖をつけましょう。

 foreach $value(@pairs){
  print "[\$value=$value]\n";
  @s = split(/&/,$value);
  foreach (@s){
   print "[\$_=$_]\n";
   ($n,$p) = split(/,/);
   print "<td>$p</td>\n";
  }
  print "</tr><tr>\n";
 }

ユミ 1999/06/10(木) 14:19:04
&でデータをつないでいたんですが、それを","に変えたらなんとなく上手くいきそうです。
たこすけさん、ありがとうございました。
B-Cusさん、一応プリントしてデバッグするようにはしてるんですが、それでも分からなかったからここに書いたんですけど…。初心者な質問してすみませんでした。

ユミ 1999/06/10(木) 14:22:33
[[解決]]
一応、解決ってことで…。
これ押すの忘れてました。

たこすけ 1999/06/10(木) 15:27:38
> &でデータをつないでいたんですが

なんか誤解されてそうだなぁ・・・。
レコードの区切りを":", フィールド区切りを"&",
フィールド名とフィールド値の区切りを","でしてると思ったので
「二回目の"hinban"の前に付いてる"&"のせいで余計にsplitしていませんか?」
と書いたつもりだったのですが・・・

# 誤解でないなら、ごめんなさい。

[上に] [前に] [次に]