(現在 過去ログ6 を表示中)

HOME HELP 新着記事 トピック表示 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■8393 / inTopicNo.1)  チェックボックスの値を出力するには?
  
□投稿者/ hiro -(2004/01/11(Sun) 18:26:03)
    こんにちは、hiroです。
    また、お世話になります。

    CGI/Perl(v.5)の記述で
    配列で指定した値を、チェックボックスで複数選択してファイルに出力しようとしても1つの値しか書き込めません。
    また、同様に管理画面で同じチェックボックスで入力された値を修正して、複数選択したものを登録しても1つの値しか出力されません。
    マニュアル等を見ていろいろ試してみても解決できません。
    どなたか教えていただける方がいれば幸いです。
    当該部分の記述を以下に示しました。よろしくお願いします。

    ファイルに書き込むソース(チェックボックスの部分を抽出)は次のようにしています。
    @parts = ('data1','data2','data3','data4','data5');
    print "<form action=\"$script\" method=\"POST\">\n";
    foreach (0 .. $#parts) {
    print "<input type=\"checkbox\" name=p value=\"$_\">$parts[$_]\n";}
    print "<input type=submit value='登録'><input type=reset value='リセット'></form>\n";


    ファイルを読み込んで修正するソース(同部分)は次のように記述。
    foreach (0 .. $#parts) {if ($p == $_) {
    print "<input type=\"checkbox\" name=p value=\"$_\" checked>$parts[$_]\n";}
    else{print "<input type=\"checkbox\" name=p value=\"$_\">$parts[$_]\n";}}




引用返信 [メール受信/OFF] 削除キー/
■8399 / inTopicNo.2)  Re[1]: チェックボックスの値を出力するには?
□投稿者/ りゅういち -(2004/01/11(Sun) 22:14:30)
http://www.cj-c.com/
    No8393に返信(hiroさんの記事)
    > 配列で指定した値を、チェックボックスで複数選択してファイルに出力しようとしても1つの値しか書き込めません。
    > また、同様に管理画面で同じチェックボックスで入力された値を修正して、複数選択したものを登録しても1つの値しか出力されません。

    複数ある場合は、CGIで標準入力を受け取る際に普通配列に入れます。
    if($name eq "p"){push(@p,$value);}
    そうしないと、最後の一つだけが $FORM{"p"} にはいってしまいます。
引用返信 [メール受信/OFF] 削除キー/
■8410 / inTopicNo.3)  Re[2]: チェックボックスの値を出力するには?
□投稿者/ hiro -(2004/01/12(Mon) 16:16:53)
    No8399に返信(りゅういちさんの記事)
    > 複数ある場合は、CGIで標準入力を受け取る際に普通配列に入れます。
    > if($name eq "p"){push(@p,$value);}
    > そうしないと、最後の一つだけが $FORM{"p"} にはいってしまいます。

    教えていただきありがとうございます。
    アドバイス通りの記述をいろいろ試してみたのですが、うまくいきません。
    (pはソースにあわせて替えて記述しています)
    どこにどのように書けばいいのでしょうか。
    これでは、手取り足取りですね。構文を理解していないのですね。
    情けない状態ですが、よろしくお願いします。
    ソースのurlは次の通りです。
    http://homepage3.nifty.com/vernalwood/henshu.txt
    チェックボックスの記述個所は、F書き込み処理の配列3とG登録内容のメンテ処理の配列3です。
    hiro
引用返信 [メール受信/OFF] 削除キー/
■8417 / inTopicNo.4)  Re[3]: チェックボックスの値を出力するには?
□投稿者/ りゅういち -(2004/01/12(Mon) 23:21:55)
http://www.cj-c.com/
    No8410に返信(hiroさんの記事)
    > アドバイス通りの記述をいろいろ試してみたのですが、うまくいきません。
    > (pはソースにあわせて替えて記述しています)
    > どこにどのように書けばいいのでしょうか。

    うーん、前回のことをソースに当てはめると、
    $in{$key} = $val; の下に
    if($key eq "P3"){push(@P3,$val);}
    という風に入れれば、@P3 のなかに配列で選択されたものが入っています。
    それをうまく使って、ログに保存し、参照する際も配列にして参照してみてください。
引用返信 [メール受信/OFF] 削除キー/
■8423 / inTopicNo.5)  Re[4]: チェックボックスの値を出力するには?
□投稿者/ hiro -(2004/01/13(Tue) 00:21:45)
    No8417に返信(りゅういちさんの記事)

    > $in{$key} = $val; の下に
    > if($key eq "P3"){push(@P3,$val);}

    こんなところに置くとは思いつきもしませんでした。
    さっそく記述してみましたが、やはり、最後の1つだけしかログに書き込めません。
    なんと難しいのでしょう。解決の方法はありますか。
引用返信 [メール受信/OFF] 削除キー/
■8429 / inTopicNo.6)  Re[5]: チェックボックスの値を出力するには?
□投稿者/ りゅういち -(2004/01/14(Wed) 00:07:56)
http://www.cj-c.com/
    No8423に返信(hiroさんの記事)
    > >>$in{$key} = $val; の下に
    >>if($key eq "P3"){push(@P3,$val);}
    > > こんなところに置くとは思いつきもしませんでした。
    > さっそく記述してみましたが、やはり、最後の1つだけしかログに書き込めません。

    書き換えたソース前回と同じようにをアップしてください。
    ログに書き込む際に $in{"P3"} のままでは同じですので、そこを
    @P3 にしてしまう等考えられます。
引用返信 [メール受信/OFF] 削除キー/
■8435 / inTopicNo.7)  Re[6]: チェックボックスの値を出力するには?
□投稿者/ hiro -(2004/01/14(Wed) 19:53:10)
    No8429に返信(りゅういちさんの記事)
    >
    > 書き換えたソース前回と同じようにをアップしてください。
    > ログに書き込む際に $in{"P3"} のままでは同じですので、そこを
    > @P3 にしてしまう等考えられます。

    いろいろとアドバイスいただけて感謝しています。
    ログに書き込む時のソースと、ログを読んで修正する部分と書き換えた部分のソースを抽出して、
    次のurlに置きました。
    http://homepage3.nifty.com/vernalwood/henshu1.txt
    よろしくお願いします。
    あるいは、ソース全体をアップした方がいいでしょうか。
引用返信 [メール受信/OFF] 削除キー/
■8442 / inTopicNo.8)  Re[7]: チェックボックスの値を出力するには?
□投稿者/ りゅういち -(2004/01/16(Fri) 01:10:09)
http://www.cj-c.com/
    No8435に返信(hiroさんの記事)
    > ログに書き込む時のソースと、ログを読んで修正する部分と書き換えた部分のソースを抽出して、
    > あるいは、ソース全体をアップした方がいいでしょうか。

    print OUT "$no<>...<>$in{'P3'}<>$in{'S2'}<>$in{'S3'}<>\n";

    print OUT "$no<>...<>@P3<>$in{'S2'}<>$in{'S3'}<>\n";
    としてしまうとか、@ が "〜" のなかに使えない場合は
    foreach (@P3){$P3.="$_ ";} として $P3 をログに保存します。

    参照する場合は
    ($dat,...,$p2,@P3,$s2,$s3) = split(/<>/);
    としてそれを foreach などで処理します。
引用返信 [メール受信/OFF] 削除キー/
■8453 / inTopicNo.9)  Re[8]: チェックボックスの値を出力するには?
□投稿者/ hiro -(2004/01/17(Sat) 22:31:31)
    No8442に返信(りゅういちさんの記事)
    >
    > print OUT "$no<>...<>$in{'P3'}<>$in{'S2'}<>$in{'S3'}<>\n";
    > ↓
    > print OUT "$no<>...<>@P3<>$in{'S2'}<>$in{'S3'}<>\n";
    > としてしまうとか、@ が "〜" のなかに使えない場合は
    > foreach (@P3){$P3.="$_ ";} として $P3 をログに保存します。

    ログに書き込む方は次のようにすることで、複数のデータを渡すことができるようになりました。
    open(OUT,">>$logfile") || &error("Write Error : $logfile");
    foreach (@P3){$P3="$_ ";}
    print OUT "$no<>...<>@P3<>$in{'S2'}<>$in{'S3'}<>\n";
    close(OUT);

    > 参照する場合は
    > ($dat,...,$p2,@P3,$s2,$s3) = split(/<>/);
    > としてそれを foreach などで処理します。

    ログを読み込む方は、いろいろ試していますが、今のところうまくいきません。
    自分の力量では手に余る感じがします。
    $p3を@p3に変えればすむというものでもないのですね。
引用返信 [メール受信/OFF] 削除キー/
■8456 / inTopicNo.10)  Re[9]: チェックボックスの値を出力するには?
□投稿者/ りゅういち -(2004/01/17(Sat) 23:30:35)
http://www.cj-c.com/
    No8453に返信(hiroさんの記事)
    > open(OUT,">>$logfile") || &error("Write Error : $logfile");
    > foreach (@P3){$P3="$_ ";}
    > print OUT "$no<>...<>@P3<>$in{'S2'}<>$in{'S3'}<>\n";
    > close(OUT);

    上記で可能な場合は foreach (@P3){$P3="$_ ";} は不要だと思います。
    削除してかまいません。

    > > ログを読み込む方は、いろいろ試していますが、今のところうまくいきません。
    > 自分の力量では手に余る感じがします。
    > $p3を@p3に変えればすむというものでもないのですね。

    いえ、そういう風に変更して
    foreach $p3 (@p3){print"$p3";}
    で表示可能だと思いますよ。
引用返信 [メール受信/OFF] 削除キー/
■8458 / inTopicNo.11)  Re[10]: チェックボックスの値を出力するには?
□投稿者/ hiro -(2004/01/18(Sun) 18:31:46)
    No8456に返信(りゅういちさんの記事)
    > 上記で可能な場合は foreach (@P3){$P3="$_ ";} は不要だと思います。
    > 削除してかまいません。

    foreach (@P3){$P3="$_ ";}を入れないと、hp上で実行したときにエラーが出てしまいます。

    > いえ、そういう風に変更して
    > foreach $p3 (@p3){print"$p3";}
    > で表示可能だと思いますよ。

    このように書いて実行すると、p3の配列の選択された複数の要素(ログに書き込まれたもの)の添え字が出力できるようになりました。
    ただ、同時にp3より後の配列(p3,s2,s3)の要素の添え字も出力されてしまいます。どうしてでしょうか。
    ともかく、複数の要素が読み出せて、少しずつ進展しているようです。
    この添え字を各配列の要素に返せば、その表示ができるのですね。 


引用返信 [メール受信/OFF] 削除キー/
■8462 / inTopicNo.12)  Re[11]: チェックボックスの値を出力するには?
□投稿者/ りゅういち -(2004/01/18(Sun) 22:45:49)
http://www.cj-c.com/
    No8458に返信(hiroさんの記事)
    > > このように書いて実行すると、p3の配列の選択された複数の要素(ログに書き込まれたもの)の添え字が出力できるようになりました。
    > ただ、同時にp3より後の配列(p3,s2,s3)の要素の添え字も出力されてしまいます。どうしてでしょうか。

    では $p3 のままにして、そのあとに @p3=split(/ /, $p3); として
    foreach(...){...} でどうでしょうか?
    (ちなみに今までもそうですが、... は省略という意味です)
引用返信 [メール受信/OFF] 削除キー/
■8472 / inTopicNo.13)  Re[12]: チェックボックスの値を出力するには?
□投稿者/ hiro -(2004/01/23(Fri) 14:31:14)
    2004/01/23(Fri) 14:34:10 編集(投稿者)

    No8462に返信(りゅういちさんの記事)


    > では $p3 のままにして、そのあとに @p3=split(/ /, $p3); として
    > foreach(...){...} でどうでしょうか?
    > (ちなみに今までもそうですが、... は省略という意味です)

    遅くなりましたが、ようやく次のようにしたら、
    ログから配列の要素を取り出して表示できるようになりました。
    @p3=split(/ /, $p3);
    foreach $p3(@p3){print "$part3[$p3]";}

    そしてまたつまずきです。なかなかブレイクスルーできません。
    ログに登録されたものを、管理モードで修正するとき、チェックリストを表示させたいのです。ところが、チェックされたものをチェックされた形で表示できないのです。
    次のようにしてみましたが、やはりだめです。
    まず、ログを読み込んで、修正するデータの配列をそのデータにふったナンバーで取り出しています。そして、
    @p3=split(/ /, $p3);
    foreach (0 .. $#part3) {if ($p3 == $_) {
    foreach $p3(@p3){print "<input type=\"checkbox\" name=P3 value=\"$_\" checked>$part3[$_]\n";}
    } else {print "<input type=\"checkbox\" name=P3 value=\"$_\">$part3[$_]\n";}}
    です。
    方向が違いますか。解決できるでしょうか。
引用返信 [メール受信/OFF] 削除キー/
■8475 / inTopicNo.14)  Re[13]: チェックボックスの値を出力するには?
□投稿者/ りゅういち -(2004/01/24(Sat) 04:53:12)
http://www.cj-c.com/
    No8472に返信(hiroさんの記事)
    @p3=split(/ /, $p3); my($Check)=0;
    foreach (0 .. $#part3) {
      foreach $p3(@p3){
       #記録した配列のなかに@part3の中にあるものがある場合$Check=1;
       if($p3 == $_){$Check=1; last;}else{$Check=0;}
     }
     if($Check){print"チェックされている処理";}
     else{print"チェックされてない処理";}
    }
    
    でどうでしょうか?
    
    

引用返信 [メール受信/OFF] 削除キー/
■8480 / inTopicNo.15)  Re[14]: チェックボックスの値を出力するには?
□投稿者/ hiro -(2004/01/25(Sun) 16:47:58)
    No8475に返信(りゅういちさんの記事)

    解決しました!
    丁寧に教えていただき、ありがとうございました。
    本当に助かりました。

    ついでですが、
    チェックボックスの値をアンド検索をすることは自力で到達できました。
    これも、りゅういちさんのお陰と感謝しています。hiro
解決済み!
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新着記事 トピック表示 検索 過去ログ

- Child Tree -