• 締切済み

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

すみませんが、どなたか教えていただけないでしょうか。 ブラウザ上に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>

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.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に引き渡せます。

rondo33
質問者

お礼

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

関連するQ&A

  • PHPでMySQLへの接続

    お世話になります。 phpを用いてMySQLへ接続したのですが、データが空で戻ってきました。lowは件数表示されましたし、行数もその分返ってきています。何か原因は考えられるでしょうか? <html> <head> <title>PHP TEST</title> </head> <body> <?php $link = mysql_connect('localhost', 'XXXX', 'XXXX'); if (!$link) { die('接続失敗です。'.mysql_error()); } print('<p>接続に成功しました。</p>'); $db_selected = mysql_select_db('XXXX', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } print('<p>uriageデータベースを選択しました。</p>'); //mysql_set_charset('utf-8'); $result = mysql_query('SELECT * FROM sample'); if (!$result) { die('クエリーが失敗しました。'.mysql_error()); } while ($row = mysql_fetch_assoc($result)) { print('<p>'); print('id='.$row['str']); print(',name='.$row['etc']); print('</p>'); } $close_flag = mysql_close($link); if ($close_flag){ print('<p>切断に成功しました。</p>'); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • チェックボックスの値の受け渡し

    PHP&MySQLで勉強しているものです。 ブラウザ上のチェックボックスにチェックすると、保存時にフィールド(CB)に値:1を書き込み、逆にブラウザのオープン時にフィールドの値が1の時にチェックボックスがチェックされた状態で表示させたいと思っています。 $sql="SELECT ID,NAME,CB FROM CASE" $rs=mysql_query($sql$dbHd) $row=mysql_fetch_row($rs) <INPUT type="checkbox" name="ip02" value"<?php print($row[2]) ?>"> 上記のようなINPUTを書いてみたものの、値はとれずの状態です。 どのように書き換えていけばいいでしょうか?

    • ベストアンサー
    • PHP
  • ループでチェックボックスにcheckedを入れたい

    昨日質問させて頂きました件は、上手く行きました。ありがとうございました。また、行き詰ってしまったのでよろしくお願いいたします。 $intersectという配列があります。中身はarray(20,22)です。 データベースのテーブルから、fetch_arrayですべてを取り出し、 この値と同じである場合、チェックボックスにチェックを入れたいと考えています。 しかし、最後の値しかチェックボックスにチェックが入りません。どうかよろしくお願いいたします。 ********************************************************** $sql = "SELECT * FROM option_name"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {  $subject = $row["subject"];//題名  $option_no = $row["opno"];//プランNO foreach ($intersect as $value){  if($value == $option_no){   $checked = "checked";   }else{   $checked = " "; } } $op_subject .= "<input type='checkbox' name='subject[]' value='$option_no' $checked>$option_no$subject<br>"; } print $op_subject;

    • ベストアンサー
    • PHP
  • 変数を組み入れたい

    MySQLのデータベースのテーブルに毎日1つのカラム(当日の名前のカラム)下記のようなPHPを作りました。 このPHPをクーロンで1日に1回踏むことにより、データベースの日付カラムを追記していくことを考えています。 下記のPHPだと、 ALTER TABLE `www_dairy` ADD `12-1` INT NOT NULL DEFAULT 0; という形で「12月1日」の固定値が追記されることになっています。 この固定値を「当日の変数としたい」というのが希望です。 print date("n-j"); で当日の日にちの変数は取得出来ます。 $today = date("n-j"); として変数を設定したまでは良いのですが、これを ALTER TABLE `www_dairy` ADD `12-1` INT NOT NULL DEFAULT 0; の12月1日の欄に変数として与える方法がわかりません。 ご教授いただきたくお願いいたします。 <?php $link = mysql_connect('localhost', 'root', 'password'); if (!$link) { die('接続失敗です。'.mysql_error()); } print('<p>接続に成功しました。</p>'); print date("n-j"); $db_selected = mysql_select_db('db_name', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } print('<p>データベースを選択しました。</p>'); mysql_set_charset('utf8'); $today = date("n-j"); print('<p>データを追加します。</p>'); $sql = " ALTER TABLE `www_dairy` ADD `12-1` INT NOT NULL DEFAULT 0; "; $result_flag = mysql_query($sql); if (!$result_flag) { die('ADDクエリーが失敗しました1。'.mysql_error()); } $close_flag = mysql_close($link); if ($close_flag){ print('<p>切断に成功しました。</p>'); } ?>

    • ベストアンサー
    • PHP
  • データベース内のデータ削除

    わからないことがあり、ご質問させていただきました。 データベースに登録されているデータを削除についてです。 コードは次のとおりです。 $query = sprintf("DELETE * FROM `member` WHERE"); $result = mysql_query($query, $link); $memberlist = ''; while ($row =mysql_fetch_array($result)) { $memberlist .= "<option value='". $row["first_name"] . " ". $row["last_name"] ."'>" . $row['first_name'] ." ". $row['last_name'] . "</option>\n"; } mysql_free_result($result); mysql_close($link); ?> <html> <body> <p style="text-align:left;">削除するメンバーを下記から選んでください。</p> <form method="post" action="<?php print $_SERVER['PHP_SELF'] ?>"> <select name="memberlist"> <option value="0">---------</option> <?php print $memberlist; ?> </select> <input type="submit" value="表示" > </form> </body> </html> という記述を行っており、リストボックスで登録されている名前を選び表示ボタンを押したら、 フォームの下に選んだ名前のデータが表示されるようにし、そのデータの最下部に削除ボタンがあり、 それをクリックしたら選んだ名前のデータがデータベースから削除されるというのを作りたいのですが、 リストボックスで選んでフォームの下にデータを表示されるとこでつまずいています。 これはjavascriptじゃないとできないのでしょうか? PHP、javascriptは初心者のため、できればPHPで作成したいのですが、ご教授お願いします。 また、サンプルサイトもしくはサンプルコードがありましたらご教授お願いいたします。

    • 締切済み
    • PHP
  • チェックボックス検索システム

    <?PHP $con = mysql_connect('******.jp', '*********', '******'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('******', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SET NAMES utf8', $con); if (!$result) { exit('文字コードを指定できませんでした。'); } $arr1 = array(); foreach($_POST['tiiki'] as $tiiki){ $arr1[] = " tiiki = '$tiiki' "; } $arr2 = array(); foreach($_POST['syoku'] as $syoku){ $arr2[] = " syoku = '$syoku' "; } $arr3 = array(); foreach($_POST['koyou'] as $koyou){ $arr3[] = " koyou = '$koyou' "; } $a = implode(" OR ",$arr1); $b = implode(" OR ",$arr2); $c = implode(" OR ",$arr3); $sql = "select * from kensaku where ($a) AND ($b)AND ($c) order by date desc"; print $sql; ?> <?php $con = mysql_connect('*****.jp', '******', '******'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('*******', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SET NAMES utf8', $con); if (!$result) { exit('文字コードを指定できませんでした。'); } $result = mysql_query('SELECT * FROM kensaku', $con); while ($data = mysql_fetch_array($result)) { echo '<p>' . $data['tiiki'] . ':' . $data['syoku'] . ':' . $data['koyou'] . ':' . $data['kai'] . "</p>\n"; } $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> これで表示されるのが、 select * from kensaku where ( tiiki = '豊岡市' ) AND ( syoku = '飲食' )AND ( koyou = 'バイト' ) order by date desc 豊岡市:飲食:バイト:オシイそば 豊岡市:製造:正社員:オシイ運輸 養父市:飲食:バイト:オシイ物産 です。一番目のphpデータはPOST文を受け取っただけでデータベース内から検索してくれないし、二番目のphpデータはデータべスにある情報を全て受け取っただけです。 僕はチェックされた情報をPOSTで受け取り、チェックされた内容に該当するデータだけデータベースから受け取り表示させたいんですが、どうすればいいですか?

    • ベストアンサー
    • PHP
  • チェックボックス検索システム

    <?PHP $con = mysql_connect('******.jp', '*********', '******'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('******', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SET NAMES utf8', $con); if (!$result) { exit('文字コードを指定できませんでした。'); } $arr1 = array(); foreach($_POST['tiiki'] as $tiiki){ $arr1[] = " tiiki = '$tiiki' "; } $arr2 = array(); foreach($_POST['syoku'] as $syoku){ $arr2[] = " syoku = '$syoku' "; } $arr3 = array(); foreach($_POST['koyou'] as $koyou){ $arr3[] = " koyou = '$koyou' "; } $a = implode(" OR ",$arr1); $b = implode(" OR ",$arr2); $c = implode(" OR ",$arr3); $sql = "select * from kensaku where ($a) AND ($b)AND ($c) order by date desc"; print $sql; ?> <?php $con = mysql_connect('*****.jp', '******', '******'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('*******', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SET NAMES utf8', $con); if (!$result) { exit('文字コードを指定できませんでした。'); } $result = mysql_query('SELECT * FROM kensaku', $con); while ($data = mysql_fetch_array($result)) { echo '<p>' . $data['tiiki'] . ':' . $data['syoku'] . ':' . $data['koyou'] . ':' . $data['kai'] . "</p>\n"; } $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> これで表示されるのが、 select * from kensaku where ( tiiki = '豊岡市' ) AND ( syoku = '飲食' )AND ( koyou = 'バイト' ) order by date desc 豊岡市:飲食:バイト:オシイそば 豊岡市:製造:正社員:オシイ運輸 養父市:飲食:バイト:オシイ物産 です。一番目のphpデータはPOST文を受け取っただけでデータベース内から検索してくれないし、二番目のphpデータはデータべスにある情報を全て受け取っただけです。 僕はチェックされた情報をPOSTで受け取り、チェックされた内容に該当するデータだけデータベースから受け取り表示させたいんですが、どうすればいいですか?非常に困っています!!!!!!!!!!!!!!!!!!!!!!!!!

  • データベース データ表示方法

    ご教授いただきたくご投稿させていただきました。 現在phpにてページを作成しているのですが、初心者でわからないためご教授お願いします。 データベースに登録されているメンバー一覧表を作成しています。 コード以下です。 $uid = mysql_real_escape_string($_SESSION['uid'], $link); $query = sprintf("SELECT * FROM member WHERE id='%s' ",$uid); $query_list = sprintf("SELECT * FROM member WHERE 1 ORDER BY first_kana,last_kana"); $result = mysql_query($query, $link); $result_list = mysql_query($query_list, $link); $list = ''; while ($row = mysql_fetch_array($result_list)) { $list .= "<li><a href='".$row["id"].".php'>" . $row['first_name'] ." ". $row['last_name'] . "</a></li>\n"; } if ($result) { $row = mysql_fetch_array($result); if ($row) { $name = $row['first_name']." ".$row['last_name']; } } <html> <body> <?php print $name; ?>さんこんにちは <ul> <?php $list; ?> </ul> というコードをしています。 ここで、 <ul> <li><a href="">山田 一郎</a></li> <li><a href="">佐藤 二郎</a></li> <li><a href="">田中 三郎</a></li> </ul> と表示されるのですが、各名前のリンクをクリックしたときにクリックされた人のページを表示するにはどうしたらよろしいのでしょうか? 例 田中 三郎さんでログインしたときに 山田 一郎をクリックする そうすると別ページで山田 一郎さんの情報(データベースに登録されている)がページに表示される。 佐藤 二郎をクリックする こちらも同様に別ページで佐藤 二郎さんの情報(データベースに登録されている)がページに表示される。 今までは各一人ずつページを作成していたのですが、手間がかかるため一枚のページにクリックされた人の名前の情報を表示できるようにしたいと思っております。 お分かりになる方はご教授下さい。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mysqlデータベースの表示のさせ方

    超初歩的な質問ですいません。。独学でやっているもので、頼る人もいないうえに、どういう勉強をしたらよいのか分からなかったので質問しました。 データベースを作って、それを出力する際に、htmlのデーブルの中に値を入れたいと思っています。 --------------------------------------------------------------- $sql= "select * from テーブル"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["kashu"];               echo $row["hurigana"]; echo "</p><hr />"; } } ?> ---------------------------------------------------------------- いろいろなウェブサイトの見よう見まねでここまではできました。 今の状態で表示すると、 サザンオールスターズ さざんおーるすたーず というように並ぶのですが、これを、 +----------+---------------------+ | 歌手      |サザンオールスターズ   | +----------+---------------------+ | ふりがな   |さざんおーるすたーず   | +----------+---------------------+ という感じに、htmlのテーブルに入れて表示させるには、どのように表記すればよいのでしょうか?? また、こういったデータベースの値を表示させるようなことを初心者向けに解説している本などもしご存知でしたら教えていただけると恐縮です(こちらはご存じでしたらでいいです)。

    • ベストアンサー
    • MySQL
  • チェックボックス + フリーワード検索 PHP&MYSQL

    現在検索画面の作成をしているのですが、分からないことがありましたので 質問をさせて頂きました。 検索画面ですが、簡単な2ページ構成になっております。(kensaku.phpとresult.php) 仕様としてはkensaku.phpにチェックボックス(複数選択可)と フリーワードがあり、一つの検索ボタンで検索し結果をresult.phpに表示させようと思っております。データベースはMYSQLです。 検索ボタンが一つしかないため、もしチェックボックスが選択されず、フリーワードだけ入力されたのであれば、それだけで検索。その逆のもし チェックボックスだけ選択されたのであればそれだけで検索。 また両方入力されたのであれば、両方のデータを検索できるように したいと思っております。 フリーワード検索までは出来るようになったのですが、 チェックボックス検索(両方検索・片方のみ検索)などが どうしても出来ません。 どなたかご存知の方ご教授して頂けないでしょうか。 宜しくお願い致します。 こちらがコードになります。 1,kensaku.php <form action="result.php" method="POST" > <table class="font12" cellpadding="5" cellspacing="10" width="430" align="center"> <tr> <td> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="1" />aaa</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="2" />bbb</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="3" />ccc</span><br /> </td> </tr> <tr> <td><input type="text" name="sejyutu_else" value="フリーワード検索" size="30" /></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="検索する" /></td> 2, result.php <?php $sejyutu = $_POST["sejyutu"]; $sejyutu_else = $_POST["sejyutu_else"]; if($sejyutu and sejyutu_else<>''){ //DB接続・選択 if (!$int_connect = @mysql_connect('localhost','aaa','aaaa')) { die("can't connect mysql server."); } //データベースに接続 if (!@mysql_select_db("database", $int_connect)) { die("can't use selected database."); } $sql = "select * from table where sejyutu_else like'%$sejyutu_else%'"; $result=mysql_query($sql,$int_connect); $rows=mysql_num_rows($result); ?> <table width="430" cellpadding="5" cellspacing="0" class="font12"> <?php while($row = mysql_fetch_array($result)){ ?> <tr> <td colspan="2"><p class="salon_name"><?php echo $row["name"]; ?></p></td> </tr> <tr> <td valign="top"><p class="salon_item">最寄り駅:</p></td> <td class="salon_detail"><?php echo $row["station"]; ?></td> </tr> <tr> <td valign="top"><p class="salon_item">住所:</p></td> <td class="salon_detail"><?php echo $row["address"]; ?></td> </tr> <tr> <td valign="top"><p class="salon_item">施術名</p></td> <td class="salon_detail"><?php echo $row["sejyutu"];?></td> </tr> <?php } } ?> </table> </body> </html>

    • ベストアンサー
    • PHP