プロが教える店舗&オフィスのセキュリティ対策術

現在ToDoリストを作成しており、最終的に実現させたい動作はタイトルのとおりですが、数点分からないことがありますので質問させてください。


したい事

1、htmlで「No」「タイトル」「内容」「期限」「優先度」と「登録」ボタンで入力するフォームを設置。

2、入力フォームからMySQLのデータベースに登録。

3、「登録確認」画面を表示。

4、「全て」というページに全予定を表示させ、各行頭「済」フィールドにチェックボックスと「完了済」ボタンを1つ配置。

5、完了した項目のチェックボックスにチェックを入れてボタンを押すと、「全て」というページ内で非表示にする。


以上のことをしたいと考えております。
現在、4つ目まではできました。
そこでお詳しい方にお聞きしたいことが以下です。


質問

A、チェックボックスにチェックが入って「いる」「いない」はPHPおよびMySQLはどう判断するのでしょう?

B、データベースの「済」フィールドではデータ型は何がふさわしいのでしょうか?(※今はverchar(1)としています)

C、「完了済みの項目にチェックを入れ、それを非表示にする」という動作はUPDATE文とSELECT文でいいのでしょうか?


疑問点はまだいくつかございますが、この3つが分かれば、あとは入門サイトなどネット上での解説も理解できそうな気がするのです。

以下にコードを貼りますので、おかしな点や修正すべき箇所がございましたらご指摘ください。
また、回答に必要な情報がございましたらすぐに返答させていただきます。

そもそも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/continuit …
<input type="submit" value="戻る">
</a>

</body>
</html>

A 回答 (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
    • good
    • 0
この回答へのお礼

丁寧で分かりやすいご説明ありがとうございます。
参考になりました。

select文のwhereは分かります。

>完了済みの項目を「すべて」で非表示という仕様は珍しいですね。

私の目線に固執していました。「『未完了』の項目だけ表示させたい」と同義です。
指摘されて気づきました。お恥ずかしいです(汗)

>当然ですが、whereがないとダメですのでご注意ください(全部のレコードを更新するなら別ですが、今回は違いますよね)。
そうですね。全て完了なんてそうあることではないですし(^-^)


どうもありがとうございました。感謝いたします。

お礼日時:2011/11/22 21:27

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