dポイントプレゼントキャンペーン実施中!

HTMLのチェックボックスから、データベースにデータ入力する仕組みを検討しております。
HTMLページでチェックされたものは、keywordカラムに入力されるようにしたいと考えております。

1) HTMLページ
<?
require('../include/init.inc');
$email = $_POST{'email'};
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />

<FORM name="myFORM">
<INPUT type="checkbox" name="name[]" onclick="chg()" value="aaa">:aaa
<INPUT type="checkbox" name="name[]" onclick="chg()" value="bbb">:bbb
<INPUT type="checkbox" name="name[]" onclick="chg()" value="ccc">:ccc
<INPUT type="checkbox" name="name[]" onclick="chg()" value="ddd">:ddd
<INPUT type="checkbox" name="name[]" onclick="chg()" value="eee">:eee
<INPUT type="checkbox" name="name[]" onclick="chg()" value="fff">:fff
</body>
</FORM>

<form action="Test1.php" method="post">
<input type=submit value='選択'>
 → ここで配列のデータを変数に入れる処置が必要?

2) Test1.php
<?
require('../include/init.inc');
$email = $_POST{'email'};
$name = $_POST{'name'};
var_dump($HTTP_POST_VARS);
$sql = "BEGIN;
update mailing_list_sentaku set keyword = '$name' where mailing_list_name = '$email';
COMMIT;";
pg_query("$sql");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
</head>
<body>


・データベース
 - postgresql 8.1.9
 - PHP 5.2.1

postgres=# \d mailing_list_sentaku
 ・mailing_list_name : character varying(40)
 ・keyword : character varying(200)

現状は、Test1.phpにもデータが渡っておらず、原因がつかめていない状況です。ご協力よろしくお願いいたします。

A 回答 (3件)

以下でざっくりは動くと思いますが、SQLインジェクションなどの対応がまったくできていません。



ローカルでお試しになられるのはいいかと思いますが、公開されるのはどうかと思います。

前の方が言っておられるようにHTMLの勉強はもちろん、Webアプリ(この場合PHPとPostgreSQL)の勉強をされたほうがいいと思います。
何か一冊本を買うことをお勧めします。


----

1) HTMLページ
<?
require('../include/init.inc');
$email = $_POST['email'];
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
</head>

<body>
<form action="Test1.php" method="post" name="myFORM">
<INPUT type="checkbox" name="name[]" onclick="chg()" value="aaa">:aaa
<INPUT type="checkbox" name="name[]" onclick="chg()" value="bbb">:bbb
<INPUT type="checkbox" name="name[]" onclick="chg()" value="ccc">:ccc
<INPUT type="checkbox" name="name[]" onclick="chg()" value="ddd">:ddd
<INPUT type="checkbox" name="name[]" onclick="chg()" value="eee">:eee
<INPUT type="checkbox" name="name[]" onclick="chg()" value="fff">:fff
<INPUT type="hidden" name="email" value="<?php echo htmlspecialchars($email); ?>">

<input type=submit value='選択'>
</form>

</body>
</html>

> → ここで配列のデータを変数に入れる処置が必要?
ここというか、次のPHPで必要になります。

2) Test1.php
<?
require('../include/init.inc');
$email = $_POST['email'];
$name = $_POST['name'];
// このままですと $name は配列です
// 登録先(keyword)のデータ型はキャラクタなので
// 文字列ないし、シリアライズする必要があるでしょ。
// これは、使用ほうほうによって決めるべきです。

// 文字列にする場合(項目をカンマ切りで)
// $name = implode(",", $_POST['name']);
// シリアライズする場合
// $name = serialize($_POST['name']);

// 今回はとりあえず文字列にする
// 文字の長さなどチェックが必要
$name = implode(",", $_POST['name']);

$sql = "BEGIN;
update mailing_list_sentaku set keyword = '" . $name . "' where mailing_list_name = '" . $email . "';
COMMIT;";

pg_query("$sql");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
<body>

SQLを確認<br />
<?php echo htmlspecialchars($sql); ?>

</body>
</head>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご教授いただいた方法で試してみることにします。

SQLインジェクションに関しては、対応方法について勉強しておきます。

お手数お掛けいたしました。。。

お礼日時:2007/06/26 14:34

<form action="Test1.php" method="post">


を<FORM name="myFORM">のところに入れないとそのデータは送信できないよ。
その上</body>はなんで、</form>の前にあるの?
html構文をじっくり勉強し直して下さい。
    • good
    • 0

なんでformが2つに分かれているのかな?


一緒に送りたいデータなら同じformに入れるべきです。
    • good
    • 0
この回答へのお礼

投稿ありがとうございます。

FORMが分かれているとは、どういう意味でしょうか。
<FORM name="myFORM">
で1つということではないのでしょうか。

お礼日時:2007/06/19 09:37

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