みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

チェックボックスの値のデータベースへの挿入方法

すみませんが、どなたか教えていただけないでしょうか。

ブラウザ上に2つチェックボックスがあり、チェックしたら1、チェックしなかったら0(または空白)をMySQLのデータベースのテーブルに挿入したいと思っています。
これを最初のブラウザのページをhtml、チェック後にそれを処理してデータベースとの処理をするのをphpで書いています。

また、データベースは下記のように作成し、testtbテーブルはt1, t2という名の2つのcolumnで出来ています。
・MySQL データベース名:testdb
・MySQL テーブル名:testtb

下記のようにプログラムを書いたところ、無事挿入までは出来たのですが、MySQLでテーブルの中身を確認したところ毎回2つ分rowに値が挿入されていたり、2つ目のチェックボックスがチェックされているのにも関わらずt1に値が入ってしまったりしています...。

期待している動作は、下記のようになります。
・チェックボックス1だけにチェックが入った場合
 >t1に1が入り、t2は0(または空欄)が入る
・チェックボックス2だけにチェックが入った場合
 >t2に1が入り、t1は0(または空欄)が入る
・チェックボックス1と2の両方にチェックが入った場合
 >t1とt2両方に1が入る
・チェックボックス1と2の両方ともチェックが入らなかった場合
 >t1とt2両方とも0(または空欄)が入る

チェックボックスの2次元配列(?)を理解出来ていないのが一因かと思われるのですが、どう書けば良いか教えていただけませんでしょうか。
宜しくお願いします。

---------------------
<!DOCTYPE html>

<html>
<head>
<title>test</title>
</head>

<body>
<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
<form method = "POST" action = "test.php">

A&emsp;&emsp;
<input type="checkbox" name="t[]" value="1"><br>
B&emsp;&emsp;
<input type="checkbox" name="t[]" value="1" checked><br>
<input type = "submit" name = "btn1" value = "send">

</form>
</body>

</html>

----------ここまでがhtml

----------ここからがphp
<!DOCTYPE html>

<html>
<head>
<title>test</title>
</head>

<body>
<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
<?php

$idata1 = $_POST["t"];

print $idata1;

$link = mysql_connect('localhost', 'root', 'パスワード');
if (!$link){
die('接続失敗です。'.mysql_error());
}

print('<p>接続に成功しました。</p>');

$db_selected = mysql_select_db('testdb', $link);
if (!$db_selected){
die('データベース選択失敗です。'.mysql_error());
}

print('<o>testdbデータベースを選択しました。</p>');

mysql_set_charset('utf8');

$result = mysql_query('SELECT t1, t2 FROM testtb');
if (!$result){
die('SELECTクエリーが失敗しました。'.mysql_error());
}

print('<p>テーブル選択成功</p>');

while ($row = mysql_fetch_assoc($result)){
print('<p>');
print('t[]='.$row['t[]']);
print('</p>');
}

print('<p>データを追加します。</p>');

$sql = 'INSERT INTO testtb (t1, t2) VALUES ("'.$idata1.'")';
$result_flag = mysql_query($sql);

if (!$result_flag){
die('INSERTクエリーが失敗しました。'.mysql_error());
}

print('<p>追加後のデータを取得します。</p>');

$result = mysql_query('SELECT * FROM testtb');
if (!$result) {
die('SELECTクエリーが失敗しました。'.mysql_error());
}

while ($row = mysql_fetch_assoc($result)){
print('<p>');
print('t[]='.$row['t[]']);
print('</p>');
}

$close_flag = mysql_close($link);

if ($close_flag) {
print('<p>切断に成功しました。</p>');
}

?>

</body>

</html>

投稿日時 - 2015-05-09 13:12:20

QNo.8971853

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>$idata1 = $_POST["t"];
>
>print $idata1;

printの時点でエラー(Notice: Array to string conversion)になると思うのですけどね。

>A&emsp;&emsp;
><input type="checkbox" name="t[]" value="1"><br>
>B&emsp;&emsp;
><input type="checkbox" name="t[]" value="1" checked><br>

チェックされたものしかPOSTされない(空文字列がPOSTされるわけではない)ので、name属性が同じだと見分けることが出来ません。配列にするとしても添え字を付けないとダメです。

A&emsp;&emsp;
<input type="checkbox" name="t[1]" value="1"><br>
B&emsp;&emsp;
<input type="checkbox" name="t[2]" value="1" checked><br>

$idata1 = array();
for ($i = 1; $i <=2; $i++) {
$idata1[$i] = isset($_POST['t'][$i])&&$_POST['t'][$i] === '1' ? 1 : 0;
}

// t1, t2 がintegerと仮定すれば
$sql = 'INSERT INTO testtb (t1, t2) VALUES (' . $idata1[1] . ',' . $idata1[2] . ')';


(テストしたスクリプト)
<form method = "POST" action = "test.php">

A&emsp;&emsp;
<input type="checkbox" name="t[1]" value="1"><br>
B&emsp;&emsp;
<input type="checkbox" name="t[2]" value="1" checked><br>
<input type = "submit" name = "btn1" value = "send">

</form>
<?php
if (!$_POST) { exit; }
$idata1 = array();
for ($i = 1; $i <=2; $i++) {
$idata1[$i] = isset($_POST['t'][$i])&&$_POST['t'][$i] === '1' ? 1 : 0;
}
$sql = 'INSERT INTO testtb (t1, t2) VALUES (' . $idata1[1] . ',' . $idata1[2] . ')';
print $sql;



なおネイティブなMySQL関数はすでに非推奨です。

http://php.net/manual/ja/mysqlinfo.api.choosing.php

早急にPDOで書き直してください。疑問符プレースホルダを使うなら$idata1が配列のままexecuteに引き渡せます。

投稿日時 - 2015-05-09 18:29:24

お礼

早速コメントいただきありがとうございます!name属性を変えないといけなかったんですね。PDO...がんばります。

投稿日時 - 2015-05-10 13:22:59

あなたにオススメの質問