[PHP-users 6405] href でのチェックボックスの反映(注:長いです)

吉塚 陽子 php-users@php.gr.jp
Fri, 22 Mar 2002 11:34:25 +0900


初めてMLに投稿させていただきます、吉塚と申します。
PHPもHTMLも初心者なので、基本を勉強しなさいと怒られてしまうかもしれませんが、
他に解決できそうなところがないのでお願いします。
Web公開されている文献(PHP4徹底攻略等)は調べているのですが、
手元に参考書も少ないので行き詰まってしまいました。

屋比久さんの「PHP4で簡単WebDB構築ガイド」を使って勉強しています。
本に添付されているCDROMを使用して、本に記載されているとおりにインストールし
ました。

環境:RedHat6.2J+Apache1.3.14+PHP4.0.3+PostgreSQL7.0.3+PHPLIB7.2C

勉強に使っているサンプルプログラムは、第6章の「PHPLIBを利用したアプリケーシ
ョン構築」で、
ToDoリストのサンプルです。プログラム自体はやはりCDROMからコピーしています。
これをいろいろカスタマイズしながら勉強させてもらっています。

本来のToDoリストでは、選択されたリストがLIST.IHTMLで1ページにすべて表示され
ていますが、
元プログラムにLIST.INCの15〜22およびLIST.IHTMLの35〜46までを付け足して、
4項目ごとに表示し、[前の 4 件に戻る][次の 4 件に続く]で、前後にデータ表示を
変更できるようにしました。
各リストには[完了]のチェックボックスがあり、ここをチェックし「COMPLETE」ボタ
ンをクリックすることで、
DBのデータの更新および表示への反映がされます。
ここまではよかったのですが、以下のような現象に行き詰まってしまいました。
LIST.IHTMLファイルに以下の部分をつけたして(LIST.IHTMLの32行目)、
[完了]の href を選択しても上記のようなことができないかと試して見ました。
ところが新規にチェックボックスにチェックした部分の変更が反映されず、
元からチェックボックスにチェックされている項目のみが表示されてしまうのです。
当然DB内のデータも書き換わっていません。

href で、チェックボックスの情報を反映させることはできないのでしょうか?
ご教授よろしくお願いします。

以下にプログラムの流れとソース(抜粋)を記載します。

ファイルの流れ:LIST.INC→LIST.IHTML→INDEX.PHP→ENDED.INC→LIST.INC→
LIST.IHTML(→…)
ファイルの役割:INDEX.PHP	→IHTMLファイルで選択されたBTN変数によって処理を仕
分ける
        *.INC		→各種SQL処理させ、IHTMLテンプレートの呼び出し
        LIST.IHTML	→LIST.INCでのSQLの結果をブラウザ表示させる(BTN
変数への入力)

ソース
LIST.INC
 1 <?php
 2 $maxl = 4 ;
 3 $usersql = "" ;
 4
 5 $db = new DB_Example;
 6
 7 $sql  = "select t.todo_id, t.todo_name, t.end_time, p.priority_name,";
 8 $sql .= " t.memo,t.ended,t.priority_code ";
 9 $sql .= " from todo t, priority p ";
10 $sql .= " where t.uname = '" . $auth->auth["uname"] . "' ";
11 $sql .= " and p.priority_code = t.priority_code ";
12 $sql .= " order by t.priority_code desc,t.ended,t.end_time ";
13
14 ----------------------ここから付けたし部分------------------------
15 $usersql = $sql ;
16 if( !isset($direction) ) $offset = 0 ;
17 else
18 {
19   if ( $direction == "next" ) $offset += $maxl ;
20   else    $offset -= $maxl ;
21 }
22 $sql = $usersql . " LIMIT $maxl OFFSET $offset" ;
23 ----------------------ここまで---------------------------------------
24 $db->query($sql) ;
25 include("list.ihtml");
26 ?>

LIST.IHTML
 1 <html>
 2 <head><title>ToDoリスト</title>
 3 </head>
 4 <body bgcolor="#FFFFFF">
 5 <h2>ToDoリスト</h2>
 6 <form action=<?php $sess->purl("index.php"); ?> method="POST">
 7 <table width="100%" border=0 cellspacing=0 cellpadding=1>
 8 ..............(省略)...................
 9 <?php
10 while($db->next_record())
11 {
12    if ($db->f("ended")==1) $sel ="CHECKED";
13    else$sel = "";
14
15    if ($db->f("priority_code") >= 20 && $db->f("priority_code") <=
30)$fnt_color = "#FF0000";
16    else if ($db->f("priority_code") >=40 ) $fnt_color = "#0000FF" ;
17    else $fnt_color = "#000000";
18 ?>
19   <td align="center">
20    <input type="checkbox" name="on[]" value="<?php print
$db->f("todo_id"); ?>" <?php print $sel; ?>>
21   </td>
22 ..............(省略)...................
23 <?php
24 }
25 ?>
26  <tr><td colspan=6><hr size=1></td></tr>
27  <tr><td colspan=6><input type="submit" name="btn" value="complete">
28<font color="<?php print $fnt_color; ?>">
29 ----------------------ここから付けたし部分------------------------
30 <?php
31 print( "<br>" ) ;
32 print( "<a href=\"index.php?btn=complete\">[完了]</a>" ) ;
33 print( "<a
 href=\"index.php?btn=resetcomplete&maxl=$maxl&offset=$offset\">[完了取り消
し]</a>" ) ;
34 print( "<br>" ) ;
35 if ( $offset  > 0 )
36 {
37    print( "<a href=\"index.php?direction=prev&offset=$offset\">[前の
 $maxl 件に戻る]</a>" ) ;
38 }
39 $num = $offset + $maxl ;
40 $lsql = $usersql . " LIMIT $maxl OFFSET $num" ;
41 $db->query($lsql) ;
42 $n = $db->num_rows() ;
43 if ( $n > 0 )
44 {
45    print( "<a href=\"index.php?direction=next&offset=$offset\">[次の $n 
件に続く]</a>" ) ;
46 }
47 ?>
48 ----------------------ここまで---------------------------------------
49 </table>
50 </form>
51 </body>
52 </html>

INDEX.PHP
 1 <?php
 2 switch ($btn) {
 3 ..............(省略)...................
 4
 5  case "complete":
 6   include("ended.inc");
 7   break;
 8
 9 ..............(省略)...................
10 }
11 ?>

ENDED.INC
1 <?php
2 $db = new DB_Example;
3 if (is_array($on))
4 {
5 print( "todo_id = $todo_id" ) ;
6   $sql  = " update todo set ended = 1 ";
7   $sql .= " where uname = '" . $auth->auth["uname"] . "' ";
8   $sql .= " and todo_id in (" . join(",",$on) . ") ";
9   $db->query($sql);
10 }
11 include("list.inc");
12 ?>



☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

  (株)ニコン 
	カンパニーサポートセンター 光学技術開発部  吉塚 陽子

  〒140-8601
    東京都品川区西大井1-6-3
       TEL:03-3773-3252(ダイヤルイン)	EX)7312-3666
       FAX:03-3775-5934			EX)7312-4073
       E-mail:yoshizuka.wakaba@nikon.co.jp
	      Yoshizuka.Yoko@nikonoa.net
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆