アプリ版:「スタンプのみでお礼する」機能のリリースについて

新規アンケートを登録した場合に新規の物がdata内に『num=0』で保存され以前にアンケートをしたものが『num=1』に上書きされてしまいますがこれを、
以前にアンケートしたものを『num=0』で保存し新規でアンケートを登録した場合に『num=1』となるようにしたいのですが可能でしょうか?

########## アンケート個別表示 ########################################

my ($num) = @_;

if ($num eq '') { $num = 0; }

@THIS = split ('<>', $DATA[$num]);

$anc_cnt = $THIS[1] + $THIS[2];

if ($THIS[1] == 0) {
$p_yes = 0;
$w_yes = 0;
} else {
$p_yes = int (($THIS[1] / $anc_cnt) * 10000) / 100;
$w_yes = int $p_yes;
if ($w_yes == 0) {
$w_yes = 1;
}
}

if ($THIS[2] == 0) {
$p_no = 0;
$w_no = 0;
} else {
$p_no = int (($THIS[2] / $anc_cnt) * 10000) / 100;
$w_no = int $p_no;
if ($w_no == 0) {
$w_no = 1;
}
}

if ($THIS[1] == $THIS[2]) {
$w_yes = 49;
$w_no = 49;
}

if ($num == 0 and $look_mode == 1) {
$form_hed = "<form name=\"input\" method=\"post\"

action=\"$myname\" onsubmit=\"return check_input

();\">\n<input type=\"hidden\" name=\"mode\"

value=\"answer\" />";
$form_yes = '<input type="radio" name="answer"

value="yes" />';
$form_no = '<input type="radio" name="answer"

value="no" />';
$form_answer = "<br clear=all />\n<font size=\"-2\">

感想(絵文字は使用不可\能\で\す)</font><br><input

type=\"text\" name=\"com\" size=\"30\" maxlength=\"150\"

/><br>
<font size=\"-2\" color=\"#555555\">実際にサイトを利用した方

のみ、ご投稿下さい。<br>
同ユーザーによる複数投稿、誹謗中傷を含む発言は\予\告なく削除

いたします。</font><br>
<input type=\"submit\" value=\"同意して投稿する\"

/></form>";

} else {
$form_hed = '';
$form_yes = '';
$form_no = '';
$form_answer = '';
}

if ($form{'type'} eq 'i') {
print <<"EOF";
<div id="anc" align="left">
<font color="red">■</font>$THIS[0] [<a

href="$myname?type=i&mode=com&num=$num">コメント</a>]<hr />

$form_hed
<font size="-2">$form_yes Yes : $THIS[1] ($p_yes%)

</font>
<hr size="$hr_w" color="$yes_color" width="$w_yes%"

/>
<font size="-2">$form_no No : $THIS[2] ($p_no%)

</font>
<hr size="$hr_w" color="$no_color" width="$w_no%" />
$form_answer
</div>
<hr />
EOF

} else {
my$w = $hr_w . 'px';
print <<"EOF";
<div class="anc">
<h2><font size="-2">「$THIS[0]」の感想レビュー投稿

</font></h2>

<a href="$myname?mode=com&num=$num" target="anc_win"

onclick="return win_open('$myname?mode=com&num=$num');"></a>
$form_hed
<div align="left">
$form_yes <em><font size="-1"><img src="/img/au1.gif"

width="15" height="14" border="0">良い…</em>$THIS[1]票

($p_yes%)</font><br>
$form_no <em><font size="-1"><img src="/img/au2.gif"

width="15" height="14" border="0">悪い…</em>$THIS[2]票

($p_no%)</font><br>

</div>

$form_answer
<br>
<a href="$myname?mode=com&num=$num" target="anc_win"

onclick="return win_open('$myname?

mode=com&num=$num');"><font size="-1">投稿一覧</font></a>
</div>
EOF

}

}

また、このようになっている場合にどのようにすればよいのでしょうか?

A 回答 (2件)

※ 回答ではありませんが。



> 新規アンケートを登録した場合に新規の物がdata内に『num=0』で保存され
> 以前にアンケートをしたものが『num=1』に上書きされてしまいますがこれを、
> 以前にアンケートしたものを『num=0』で保存し新規でアンケートを登録した
> 場合に『num=1』となるようにしたいのですが可能でしょうか?

それは前回までのデータをどのように保存して管理しているかだと思われます。
二回目以降の投稿があった場合に、その投稿が「初回から起算して何回目となるか
というを管理をしている部分」になんらかの問題があるのではないでしょうか?

また、表示部分だけのコードをご提示なされても意味がわかりません。
このコードを見る限り次のようなことしかわかりません。
(私の読解力とスキルが低過ぎるのかもしれませんが)

> my ($num) = @_;

この前の行に sub functionX となっている箇所があると思われます。
(名前が不明ですので仮に sub functionX とさせて頂きます)
そして、呼び出している部分[&funtionX(args) 等と記述している箇所]で引数として
args(仮称) があると思われます。

> if ($num eq '') { $num = 0; }

functionX の引数が空の文字列('')の場合には $num = 0 となるのは動作
としては当然なのではないでしょうか?

> $DATA[$num]

$DATA にもどのような値が入っているのかも不明です。

もしかすると HTML 部分の POST メソッドの部分で URL の QUERY_STRING に
格納される num の指定から投稿データの $num が決定されるということなら
悪戯が容易に出来てしまえる脆弱な実装かと思われます。(あくまで憶測です)

というように、これだけの情報(コードの行だけは多いのですが)では「仮定」や
「憶測」でしか言えないのです。

ご自身でお書きになられているコードであれば、各部の動作とかを整理して
ご質問して頂けると助かります。
余計なことばかり申し上げましたが、よろしくお願い申し上げます。

# これは、どこかでダウンロードされたスクリプトの改造をなさっておられるのでしょうか?
# それの出所の URL と改造部分だけを提示されるほうが問題の解決に繋がると思われます。

この回答への補足

x415f484fさま、お返事ありがとうございます。
また、解り難い質問をしてしまいましてすみませんでした。
># これは、どこかでダウンロードされたスクリプトの改造をなさっておられるのでしょうか?
># それの出所の URL と改造部分だけを提示されるほうが問題の解決に繋がると思われます。

コチラのサイトさまよりダウンロードをさせていただきましたアンケートCGIです。
http://hary.cocolog-nifty.com/text/cat8172918/in …

すみませんが宜しくお願いします。

補足日時:2008/03/22 09:12
    • good
    • 0

> コチラのサイトさまよりダウンロードをさせていただきましたアンケートCGIです。



# 最初からそのように仰って頂けたら、とても良かったのではないかと思います。

本来の動作の確認に配布されている「アンケート CGI」の設置をしてみました。
管理者がアンケートを開設すると、Yes/No の投票と一行程度のコメントが残せる
もので、アンケートひとつについてしか投票は行えず、更に新しいアンケートを
追加すると今までのアンケートには投票もコメントも出来なくなるものでした。
これが元の動作で間違いないでしょうか?

そして、あなたが改造なされたのが表示処理の箇所だけのみであればデータが上書きされ
てしまうことはないと思われます。

# と、ここまで調べてやっとなんとなくわかりました。

結局、あなたがなさりたいことは「表示する時の番号の振り方が古いものと新しいものが
逆になってしまい気持ちが悪いから順序を変えたい」と仰っておられるのでしょうか?

# スクリプトのコードの全てを確認していないので絶対とは言えませんけれど……。
POST メソッドの URL の部分に使っている $num 等は一切変えずに HTML の表示部分に
別の変数を使って投票や管理等の処理に影響が出ないようにすれば、可能ではないかと思わ
れます。また、保存や読み出している箇所に一工夫するのも方法のひとつでしょう。

できれば、次回からは改造された部分を差分として提示されて、例えば「 682 行目の
□□部分を○○に変更しました」というような感じにお書きになって頂けないでしょうか?

# さすがに回答に CGI の設置と、ここに貼られたコードの差分まで調べて動作の確認
# は荷が重い……、という理由で他の方々からの回答は得られてないのかと思います。
# こんな余計な意見ばかり申し上げて申し訳ないのですが……。
# では、がんばってみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!