CGI-BBS > SO−HO > ショッピングバスケット > Cargo6.0を使用 確認画面に「X」「Y」という項目が・・・


カレッヂ
カレッヂ


質問者 まさ  投稿日 1/9(水) 15:30:05
確認画面やCSV、メールの最後に「X」「Y」という項目がついてしまいます。
<input type=image> を使用しているので発生しているというのを前回の書き込み
でわかりました。
現在Cargo6.0を使用しているのですが、表示させないようにする為にはどのように
したらいいのでしょうか?
回答者 呑兵衛@大阪  [削除]  投稿日 1/10(木) 01:31:14
form 内の画像をクリックしたら、クリック点の座標(x,y)がスクリプトに渡されます。
そのデータには、 name.x=x-value と name.y=y-value があり、その"name"は name属性の値で、
x-value と y-value がそれぞれxy座標の値です。
それぞれ、 .x .y (大文字小文字いずれか)になっていると思いますが、取り去るには、

cart.cgi 30 行目あたり

else {
  if ($key !~ /^_/) { push(@in,"$key\t$val"); } # なお、ラベル名の頭が_の場合はコマンド
  if ($key eq ".") {

    $l = $val;
    $orders .= "," if (defined($orders));
    $orders .= $l;

    push(@in,".$t$val");
  }
#-----追加ライン------
  elsif ($key =~ /\.(x|y)$/i) { next; } # 大小文字に対応
#-----ここまで--------
  $in{$key} = $val;
}

で試してみてください。
もし表示される項目欄の x や y に . が付いていなければ \. を取り去ってみてください。
質問者 まさ  [削除]  投稿日 1/10(木) 14:42:44
呑兵衛@大阪  様

アドバイスありがとうございました。
早速追加をして動作をさせてみましたが、やはり消えませんでした。
Cargo6.0ではオーダーフォームを別のファイルから呼び出していますが
少々変更をしてしまいCGIの中に直接HTMLを記入してますが、
これが問題なのでしょうか?

知識がないながらにいろいろトライして見ましたが・・・・難しいですね。
他にいい方法があればぜひアドバイスいただけないでしょうか?

よろしくお願いいたします。
回答者 呑兵衛@大阪  [削除]  投稿日 1/10(木) 22:41:16
<input type=submit> のかわりに
<input type="image" src="./button.gif"> だけなら、
デフォルトの商品ファイルを使う限り、 x y 座標値は cgi に送られても表示はされません。

さて、商品ファイルを表示するHTMLのボタン部分、および、そのデータをデコードする perl スクリプト部分は
どのようになっているか表示していただけますか?
回答者 呑兵衛@大阪  [削除]  投稿日 1/12(土) 02:59:21
関連する項目は、新たに質問項目を立てないで同じリードの下でしてください。
また、ブラウザにより挙動が違う場合もあります。使用環境などを添えてくだされば、
より詳しい回答も得られるかもしれません。
新規の項目を消して、こちらに新たに、回答に対しての結果のご報告と、
新たな質問を廻送してくださればありがたいです。
質問者 まさ  [削除]  投稿日 1/12(土) 10:37:47
ご連絡が遅くなりました。アドバイスありがとうございます。
昨日オーダーフォームを別ファイルにて作成し呼び出すようにしました。
・・・が直りませんでした。無駄な作業だったかもしれません・・・。
データをデコードしている部分というのがよくわかりませんので前回教えていただ
きました一番初めの部分を記述します。
--------------------------------------------------------------------
foreach $pair (@pairs) {

        ($key,$val) = split(/=/,$pair);
        $key =~ tr/+/ /;
        $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
        $val =~ tr/+/ /;
        $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

        &jcode'convert(*val,'sjis');
        $val =~ s/<!--(.|\n)*-->//g;

        $val =~ s/&/&amp;/g;
        $val =~ s/"/&quot;/g;
        $val =~ s/</&lt;/g;
        $val =~ s/>/&gt;/g;

        $val =~ s/\t//g;
        $val =~ s/\r\n/ /g;
        $val =~ s/\n/ /g;
        $val =~ s/\r/ /g;

        if ($key =~ /^#(\d+)#$/) { $delete_gcode = $1; }
        else {
                if ($key !~ /^_/) { push(@in,"$key\t$val"); } # なお、ラベル名の頭が_の場合はコマンド
                if ($key eq ".") {

                        $l = $val;
                        $orders .= "," if (defined($orders));
                        $orders .= $l;

                        push(@in,".$t$val");
                }
                
        #-----追加ライン------
        elsif ($key =~ /\.(x|y)$/i) { next; } # 大小文字に対応
        #-----ここまで--------

                $in{$key} = $val;
        }
}

@pairs = split(/;/,$ENV{'HTTP_COOKIE'});
foreach $pair (@pairs) {

        ($key,$val) = split(/=/,$pair,2);
        $key =~ s/ //g;

        if ($key eq "$ENV{'SCRIPT_NAME'}:0" || $key eq "$ENV{'SCRIPT_NAME'}:1") {

                @pairs2 = split(/,/,$val);
                foreach $pair (@pairs2) {

                        ($key,$val) = split(/:/,$pair,2);

                        $val =~ tr/+/ /;
                        $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

                        $COOKIE{$key} = $val;
                }
        }
}
------------------------------------------------------------------------
ボタンの部分ですが
---------------- 以下
}

foreach (@form) { print; }

print <<"EOF";
<table width=100% cellpadding=4><tr><td bgcolor=#cea857 align=center><font size=2 color=$cart_color>お申\込み者のメールアドレス <input type=text name="_email" size=40></font></td></tr></table>
<p>
<center>
<input type=image src="image/back.gif" value="1つ前にへ戻る" onClick="Back()">
<img src="image/spece.gif" width=30>
<input type=image src="image/go.gif" value="確認して次へ" onClick="Ok()">
$ca
</center>
</td></tr></table>
</form>
</body>
</html>
-------------------------
このように記述しています。
ひとつ疑問があるのですが、別のファイルからオーダーフォームを呼び出す場合
そのオーダーフォームに<html><meta><body>などは記述しない方がいいのでしょうか?



質問者 まさ  [削除]  投稿日 1/12(土) 10:40:38
もう1つ!
デコードというのはこの部分でしょうか?

------------------
sub cfm {

local (@msg) = @_;

if ($in{'_area'} !~ /(.*):(\d+)$/) { &error("入力が確認できませんでした","カートの確認画面へ戻って、選択し直してください。"); }
unless ($in{'_email'} =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/) { &error('!未記入があります','お申込み者のメールアドレスは半角で正しくご記入ください.'); }
if ($in{'_email'} =~ /\,| /) { &error('!未記入があります','お申込み者のメールアドレスは半角で1つのみ正しくご記入ください.'); }

$all = $del = 0;
@CARGO = ();

if (open(ORDER,"$tmp$COOKIE{'CART'}\.bk6")) { # かごの中身を読みこむ

        while (<ORDER>) {

                s/\n//g;
                if (/^#|^$/) { next; }
                if (/^\*(\d+)/) { $DELETED{$1} = 1; $del ++; }
                else { push(@CARGO,$_); }
        }
        close(ORDER);
}

$all = @CARGO;
if ($all - $del == 0) { &error("現在、保留中の<br>ご注文はありません。"); }

opendir(DIR,$tmp); # 掃除
@list = readdir(DIR);
close(DIR);

foreach $file (@list) {

        next if $file eq '.';
        next if $file eq '..';
        next if -d $file;

        $mod = -M "$tmp$file";
        if ($mod > 1) { unlink "$tmp$file"; }
------------------------------------------------

もし違うようであればアドバイスいただけますでしょうか?
よろしくお願いいたします。
回答者 呑兵衛@大阪  [削除]  投稿日 1/12(土) 14:16:48
ボタンの部分で

> <input type=image src="image/back.gif" value="1つ前にへ戻る" onClick="Back()">
> <img src="image/spece.gif" width=30>
> <input type=image src="image/go.gif" value="確認して次へ" onClick="Ok()">

2行目は必要ありません。
また、value 値を設定されていますが、ここでは意味がありません。
どうしてもテキストを表示して画像でボタン表示したいのなら、
直接、画像にテキストを書くか、table で囲ってセルの中で画像ボタンとテキストの位置を
調整するようにしましょう。

フォームのデコード部分とは、上の方の投稿分を言います。
なお、直されたら、elsif の部分は要らなくなるはずです。
質問者 まさ  [削除]  投稿日 1/18(金) 22:56:34
ご連絡が遅くなりました。
アドバイスありがとうございます。

アドバイスいただいた通り修正してみましたがやはり消えてくれません。
<img src="image/spece.gif" width="5" height="1">
というものをCGI、オーダーフォームからすべて取り除き、デコードの部分
のelsif の部分も付け加えたり取り除いたりしたのですがうまくいきません。
なにか他に方法はあるでしょうか?
回答者 呑兵衛@大阪  [削除]  投稿日 1/19(土) 01:00:23
挿入する場所を間違えました。

cart.cgi のデコード部分(スクリプト初段)の
foreach $pair (@pairs) {

なんやかんや

if ($key =~ /^#(\d+)#$/) { $delete_gcode = $1; }
else {
#ここに下記一行を挿入
if ($key eq 'x' || $key eq 'y') { next; }
#続ける
if ($key !~ /^_/) { push(@in,"$key\t$val"); } # なお、ラベル名の頭が_の場合はコマンド
if ($key eq ".") {
質問者 まさ  [削除]  投稿日 1/28(月) 23:14:40
呑兵衛@大阪  様

またまたご連絡遅くなりました。
アドバイスいただいた通り追加したらばっちりです。
今回の件でどの部分でどういう処理をしているというのが
少しずつわかってきました。でも1から作るのは・・・
勉強が必要ですね。
本当にありがとうございました。




返信(回答)する


Web裏技