- ベストアンサー
ToDoリストの「完了済」を非表示にしたい
- ToDoリストの「完了済」を非表示にする方法について質問があります。
- 具体的には、以下の項目についてお聞きしたいです。 A、チェックボックスにチェックが入っているかどうかをPHPおよびMySQLでどう判断するのか B、データベースの「済」フィールドの適切なデータ型は何か C、「完了済みの項目にチェックを入れ、非表示にする」という動作にはUPDATE文とSELECT文が適しているか
- 上記の質問に答えていただければ、PHPやMySQLの基礎の理解が進むと思います。 以下は現在のコードですので、おかしな点や修正すべき箇所があれば指摘してください。 なお、回答に必要な情報があればすぐに返答いたします。 <html> <head> <title>ToDoリスト</title> </head> <body> <?php echo("No"); ?> <br> <?php echo(htmlspecialchars($_REQUEST["No"])); ?> <br><br> <?php echo("タイトル"); ?> <br> <?php echo(htmlspecialchars($_REQUEST["タイトル"])); ?> <br><br> <?php echo("期限"); ?> <br> <?php echo(htmlspecialchars($_REQUEST["期限"])); ?> <br><br> <?php echo("優先度"); ?> <br> <?php echo(htmlspecialchars($_REQUEST["優先度"])); ?> <br><br> <?php echo("内容"); ?> <br> <?php echo(htmlspecialchars($_REQUEST["内容"])); ?> <br><br> <?php if( isset($_REQUEST["済"]) != "" ) { $conn = mysql_connect( "localhost", "root", "○○○" ); if( $conn == false ) { die("MySQL 接続エラー"); } mysql_set_charset( "sjis" ); mysql_select_db( "todo" ); $sql = " UPDATE todo SET 済="※ここにどんな値を入れたらよいか分かりません。" ; $sql = $sql . " VALUES( "; $sql = $sql . "'" . $_REQUEST["済"] ."' , "; $sql = $sql . "'" . $_REQUEST["No"] ."' , "; $sql = $sql . "'" . $_REQUEST["タイトル"] ."' , "; $sql = $sql . "'" . $_REQUEST["期限"] ."' , "; $sql = $sql . "'" . $_REQUEST["優先度"] ."' , "; $sql = $sql . "'" . $_REQUEST["内容"] ."' ) "; $todo_list = mysql_query( $sql ); if( $todo_list == false ) { echo("エラーが発生しました。"); } else { echo("正常に更新されました。"); } mysql_close(); } ?> <br><br> <a href="http://localhost/continuity_is_power01/continuity_is_power.htm"> <input type="submit" value="戻る"> </a> </body> </html>
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
どういうform要素になっているか書かれていないので、詳細には言及できませんが(汗 >A、チェックボックスにチェックが入って「いる」「いない」はPHPおよびMySQLはどう判断するのでしょう? phpではPOSTされた内容(つまりチェックボックスのname属性とその値)で確認して、update文を発行します。 >B、データベースの「済」フィールドではデータ型は何がふさわしいのでしょうか?(※今はverchar(1)としています) お好みで。真偽値でもいいですが拡張性がないので、integerかcharでしょうね。個人的にはcharですかね(varcharはあまり使わないです)。。 >C、「完了済みの項目にチェックを入れ、それを非表示にする」という動作はUPDATE文とSELECT文でいいのでしょうか? 「完了済みの項目にチェックを入れ」はユーザーの行為ですね。phpは(前述のとおり)POSTされた内容に従ってupdate文を発行するだけです。あとは表示のためのselectにwhereを追加です(これはわkりますよね)。 (蛇足) 完了済みの項目を「すべて」で非表示という仕様は珍しいですね。普通は「未完了分」というケースでselect文にwhereを追加します(「すべて」は完了分も含ませることが多い)。 なお、update文は「update テーブル名 set 列名=値(, 列名=値・・・)」だけで完結です。insert文と違ってvaluesなどはありません(セットしない列の値は変わらない)。当然ですが、whereがないとダメですのでご注意ください(全部のレコードを更新するなら別ですが、今回は違いますよね)。 http://dev.mysql.com/doc/refman/4.1/ja/update.html
お礼
丁寧で分かりやすいご説明ありがとうございます。 参考になりました。 select文のwhereは分かります。 >完了済みの項目を「すべて」で非表示という仕様は珍しいですね。 私の目線に固執していました。「『未完了』の項目だけ表示させたい」と同義です。 指摘されて気づきました。お恥ずかしいです(汗) >当然ですが、whereがないとダメですのでご注意ください(全部のレコードを更新するなら別ですが、今回は違いますよね)。 そうですね。全て完了なんてそうあることではないですし(^-^) どうもありがとうございました。感謝いたします。