SQLデータベースからの一覧抽出と修正に関する質問

このQ&Aのポイント
  • SQLデータベースから抽出した一覧(list.php)から、htmlのフォームのラジオボタンを使ってSQL上のデータを修正したい
  • list.phpの15行目のラジオボタンの値が正しく取得できず、[1]以降は取得できていない
  • 初心者のため基礎的な間違いがあるかもしれないが、2日間悩んでいるため助けが必要
回答を見る
  • ベストアンサー

while()から得られるインデックス..

お世話になります。 whileでSQLデータベースから抽出した一覧(list.php)から、htmlのフォームのラジオボタンを使って SQL上のデータを修正したいと考えていますが、うまくいきません。 list.php------------------------------------------- 1 <? 2 $db = mysql_connect('localhost','user','pass'); 3 $db_name = 'db'; 4 $TBL = "test"; 5 $str_sql = "SELECT * FROM {$TBL}"; 6 $rs = mysql_query($str_sql,$db); 7 $cnt =mysql_num_rows($rs);//データの個数 8 ?> 9  10 <form action="record.php" method="post" name="form1"> 11 <table> 12 <? while($arr_record = mysql_fetch_assoc($rs)){?> 13  <tr> 14  <td> 15  <input name="disp[]" type="radio" value="<? print $arr_record[id];?>"<? if($arr_record[disp] == 1){print" checked=\"checked\"";}?> /> 16  <input name="id[]" type="hidden" value="<? print $arr_record[id];?>"> 17  </td> 18 </tr> 19 <? }?> 20 </table><br /><br /> 21 <input type="hidden" name="cnt" value="<? print $cnt;?>"> 22 <input type="submit" name="Submit" value="Submit" /> 23 </form> list.php ここまで---------------------------------- record.php----------------------------------------- 1 <? 2 $cnt = $_REQUEST['cnt'];//データの個数 3 4 for($i=0;$i<=($cnt-1);$i++){ 5 $disp = $_POST['disp'][$i]; 6 $id = $_POST['id'][$i]; 7 8 if($disp == $id){$disp = 1;}else{$disp = 0;} 9 10 $str_sql = "UPDATE {$TBL} SET disp='{$disp}' WHERE id='{$id}'"; 11 mysql_query($str_sql,$db); 12 } 13 ?> record.php ここまで------------------------------- list.php15行目の <input name="disp[]" type="radio" .. /> は、 record.php5行目の $disp = $_POST['disp'][$i]; で[0][1][2][3]..と値を取得できるものと考えておりますが ここが取得できていないようです。 $disp = $_POST['disp'][0]; ↑これだけは、正しく値が取得できるのですが、[1]以降は取得できていません。 record.php6行目の $id = $_POST['id'][$i];は、[0][2][3]..と取得できているため while文や for文の間違いではないと思うのですが・・。 初心者から本を見ながらの独習のため、基礎的な間違いもあるかと思います。 もう2日も悩んでいます。先輩方よろしくお願いします!!

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

質問者が選んだベストアンサー

  • ベストアンサー
  • dalianse
  • ベストアンサー率35% (7/20)
回答No.1

とりあえずラジオボタンはチェックした値しかPOSTされないから、 1つしか取得できないと思います。 複数の値を取得したい場合はチェックボックスを使うべきと思います。 ラジオボタンなら name="disp[]"じゃなくて、name="disp"でいいんじゃないでしょうか?

simone86
質問者

お礼

無事に希望通り、動作しました。 ありがとうございました!

simone86
質問者

補足

ご回答ありがとうございます。 ご回答を読んでよく考えてみたら、どうやら私の勘違いですね。。 ラジオボタンのcheckedによって、最初にPOSTされた値が[0]ということになるんですよね・・。 ということはつまり、それが最初で最後、唯一のdispの値ということに・・。 今回は、増減するデータを全てリスト表示し、 全データの中からラジオボタンで1つだけのデータを選ばせる仕様です。 おかげさまで、勘違いに気づきました。ありがとうございます! ちょっと組み替えてみます。

関連するQ&A

  • IDとパスワードを認証すコードをかきましたが動きません

    phpの超初心者です、よろしくお願いします。 IDとパスワードを認証すコードをかきましたが動きません。 Formから別に使ったdbにあるIDとパスを見に行くコードでが、 dbにあるIDとパスと同じものを打ち込んでも認証しません、 また別のdbにあるIDとパスを打ち込んでも認証するときがあります。 一体どこが悪いのでしょうか。どこが悪いのかさっぱり分かりません。 よろしくお願いします。 --------------------------------------- <?php $conn = mysql_connect(localhost, "root", ""); //DBにコネクト mysql_select_db('login_test', $conn); //'login_test'をselect mysql_query('SET NAMES utf8'); //defalt $res_init=mysql_query('SELECT * from user'); //userからすべてのdataを取得 while($arr = mysql_fetch_assoc($res_init)){ //結果セットが無くなるまでループ foreach($arr as $k => $v){ echo "フィールド ".$k." の値は ".$v; echo "<br />"; } echo "<br />"; } //formからDATAを取得 $id=$_POST['input_ID']; $pass=$_POST['input_pass']; print("入力したid= ".$id." 入力したpass= ".$pass); //認証check if(auth ($id,$pass,$conn)===true){ print("認証成功"); } else{ print("認証不成功"); } //function function auth ($id,$pass,$conn){ $sql = "SELECT * from user WHERE user_id = $id AND password = '$pass'"; $res = mysql_query($sql, $conn); return $res; } ?> <form action="http://localhost/test/test.php" method="POST"> IDの入力:<input type="text" name="input_ID"><br /><br /> Passの入力:<input type="text" name="input_pass"><br /><br /> <input type="submit" name="delete_submit" value="送信"><br /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • PHP 配列について

    phpとDBでシステムを作っています DBをよみながら配列と比較しています。 ループ中の配列で2回目以降がどうしても配列の値が入りません $Baitai[$cnt]で1回目は配列の値が来るのですが 2回目以降が一部の文字bしか入りません ご教授お願いします。 while($arr_record = mysql_fetch_assoc($rs)) { foreach($arr_record as $field_name => $field_value) {            if($field_value<>"") { echo $Baitai[$cnt]; $Baitai="Baitai".$k; if($Baitai[$cnt]==$field_value) { ?>       <input type="checkbox" value="<?php echo $field_value;?>" Name="<?php echo $Baitai;?>" checked><?php echo $field_value;?> <?php } else { ?> <input type="checkbox" value="<?php echo $field_value;?>" Name="<?php echo $Baitai; ?>"><?php echo $field_value;?> <?php } } $cnt=$cnt+1;             $k=$k+1; } }

    • ベストアンサー
    • PHP
  • PHP+MySQLでの配列のinsert文について

    PHP+MySQLでの配列のinsert文について はじめまして。 POSTされた配列データのDB一括挿入方法で約2週間悩み中で非常に困っております。 私の配列の理解が不足しているため、初心者の私でもわかるように解決方法をご教示いただけましたら大変助かります!何卒、よろしくお願い致します。 行いたい処理といたしまして、 [index.php] CSVアップロード(名前・メアド・金額・年月日の4項目)→※解決しました。  ↓↓↓ [check.php] CSVデータをテーブルで入力されている行数分をループして表示→※解決しました。  ↓↓↓ [finish.php] check.phpで表示した配列データをPOSTで受け取りDBに登録する。→※未解決 となります。 ソースは下記のようになります。 ※index.phpは今回無関係と思うので省略します。 ━━━━ [check.php]ここから ━━━━ ・ ・ ・ <form action="finish.php" method="post"> <? while($arr = fgetcsv_reg($fp,1024)){ ?> <? //空行以外を処理 $num = count($arr); if(!$arr ==''){ // $namae = $arr[0]; //名前 $mail = $arr[1]; //メアド $money = $arr[2]; //金額 $year = $arr[3]; //年 $month_hen = $arr[4]; //月 $month = sprintf("%02d", $month_hen); //1~9月(1桁)の場合、前に0を付加する $day_hen = $arr[5];//日 $day = sprintf("%02d", $day_hen); //1~9日(1桁)の場合、前に0を付加する // ?> <input type="hidden" name="namae[]" value="<?php echo $namae ?>"> <input type="hidden" name="mail[]" value="<?php echo $mail ?>"> <input type="hidden" name="money[]" value="<?php echo $money ?>"> <input type="hidden" name="year[]" value="<?php echo $year ?>"> <input type="hidden" name="month[]" value="<?php echo $month ?>"> <input type="hidden" name="day[]" value="<?php echo $day ?>"> ・ ・ ・ <input type="submit" value="  一括登録する  " /> </form> ━━━━ [check.php]ここまで ━━━━ ━━━━ [finish.php]ここから ━━━━ ・ ・ ・ // DB登録部分開始 if ($_POST['submit']) { $arr = array( 'reg_id', //auto_increment 'user_id', //ユーザーID(セッションで保持) 'namae', //名前 'mail', //メアド 'money',//金額 'ymd'//年月日 ); $value = array( NULL, mysql_real_escape_string( $_SESSION['user_id'] ), mysql_real_escape_string( $_POST['namae'] ), mysql_real_escape_string( $_POST['mail'] ), mysql_real_escape_string( $_POST['money'] ), mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] ) ); // DB登録部分終了 //ループ処理開始 foreach ( $arr as $value ) { $sql = "insert into receipt_issue ( $arr ) values ( $value )"; mysql_query($sql); $result = mysql_query( $sql ) ; //ループ処理終了 } } ・ ・ ・ ━━━━ [finish.php]ここまで ━━━━ というソースなのですが、データベースに登録できません。 例えば「finish.php」内に、 print_r( $_POST['namae'] ); と記述すると、 Array ( [0] => ああ君 [1] => いい君 [2] => うう君 [3] => ええ君 ) とちゃんと配列は受けとれているようです。 そもそもDB接続ができていないということもありません。 ※配列でない場合のテストでちゃんと接続・登録できていました。 いろいろ調べた中で、$value = array内の記述方法に問題があるのか・・・ と思い、色々調べて試したのですがダメでした。。。 上記の仕組みでループさせてデータベースに登録するには、どのように記述したらよろしいでしょうか? 情報に不足がございましたら、申し訳ございません。その点ご指摘いただきましたら必要な情報を再度投稿します。 何卒、お力をお貸しいただけましたら幸いでございます。 宜しくお願い致します!

    • 締切済み
    • PHP
  • Undefined index

    PHP のスクリプトで以下のようなエラーが出てしまいます。 エラーを発生させないようにする方法がわかる方がいれば教えてください。 よろしくお願いします。 Notice: Undefined index: id in C:\xampp\htdocs\super\sample.php on line 33 ※33行目は 「 echo "<p>入力値:" . $_POST["id"] . "</p>"; 」です。 ---------------------------------- <html> <head> <title>あ</title> </head> <body> <?php //invatal()関数による変換 $temp_sql = "SELECT * FROM t1 where id=%s"; $id = isset($_POST["id"]) ? intval($_POST["id"]) : ""; $result_sql_intval = sprintf($temp_sql, $id); //sprintf()関数による変換 $temp_sql = "SELECT * FROM t1 WHERE id=%d"; $id = isset($_POST["id"]) ? $_POST["id"] : ""; $result_sql_sprintf = sprintf($temp_sql, $id); ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"] ?>"> <table> <tr> <td>ID:<input type="text" name="id" value="<?php echo isset($_POST["id"]) ? $_POST["id"]: "" ?>"> <input type="submit" value="送信" name="sub1"></td> </tr> <tr> </td> </tr> </table> </form> </body> <?php echo "<p>入力値:" . $_POST["id"] . "</p>"; echo "<p>作成されたSQL(sprintf):" . $result_sql_sprintf . "</p>"; echo "<p>作成されたSQL(intval):" . $result_sql_intval . "</p>"; ?> </html>

    • ベストアンサー
    • PHP
  • PHPでの検索機能がうまく動きません

    PHPでの検索機能が動かなくて困っています。 <form>で入力した値を、MySQLのWHEREで条件付けて取り出したいのですがうまくいきません....。 最終的に、 1、formに検索ワードを入力 2、DBから条件にあったレコードを持ってくる 3、持ってきた値を表示 という機能にしたいのですが....。 --- --- --- --- --- --- --- --- --- --- --- --- <?php //データベースに接続 mysql_connect('xxx', 'xxx', 'xxx') or die(mysql_error()); mysql_select_db('xxx'); mysql_query('SET NAMES UTF8'); //フォームで送られてきた条件を元にSELECT文を作成 if (!empty($_POST['nm'])) { $q = $_POST['nm']; $sql = 'select * from test_tb where name like "%$q%"'; $record = mysql_query($sql) or die(mysql_error()); } ?> <html> <body> <form action="" method="post">    名前:<input type="text" name="nm">    <input type="submit" name="exec" value="検索"> </form> <?php while($row = mysql_fetch_assoc($record)): ?> <?php echo $row['id']; ?> <?php echo $row['name']; ?> <?php endwhile ?> </body> </html> --- --- --- --- --- --- --- --- --- --- --- --- エラーは表示されないのですが、結果も表示されません。 さまざまなサイトや他の方の質問、MySQLやPHPの本を参考にしたのですが うまくいかなかったのでご質問させていただきました。 プログラミング初心者の上、はじめての質問で不備があると思いますが、 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • チェックボックスで選択したものがINSERTできません。

    <input type="checkbox" name="color[]" value="1" checked>赤 <input type="checkbox" name="color[]" value="2" >青 <input type="checkbox" name="color[]" value="3" >黄 <input type="checkbox" name="color[]" value="4" >緑 をPOSTで送ってPHPで $color_arr=Array(1=>"赤",2=>"青",3=>"黄",4=>"緑"); $color=$_POST["color"]; $str_color=""; foreach ($color as $key => $value){ if($str_color!="") $str_color.=","; $str_color.=$color_arr[$value]; } $html = str_replace('_%color%_', $str_color, $html); として追加内容確認画面で <input type="hidden" name="color" value="_%color%_"> _%color%_ として、チェックしたものを 赤,黄のように表示させて「OK」ボタンを押して PHPでINSERTするんですが、 mysql_query('insert into table1(name,color) values("'.$_POST['name'].'","'.$_POST['color'].'")'); としても空白のままです。nameはちゃんと入ってます。 テーブルは name varchar(50) color char(1) です。

    • ベストアンサー
    • PHP
  • フォームへ値の渡し方について

    こんばんわ。 PHPの勉強をしています。 入力されたIDを元にDBから氏名をクエリし、テキストボックスへ表示させようとしていますが、テキストボックスの指定の仕方が分からず、行き詰っています。 各テキストフォームは<?php?>の中に記述しています。 初心者のため簡単にできることなのかもしれませんが、ご教授願います。 <form method="POST" action="hyouji.php"> ID: <?php if($_POST["ID"]){ $id = $_POST["ID"]; echo "<input type=text name=ID onChange = submit() value = '$id'>"; ECHO "YES"; }else{ echo "<input type=text name=ID onChange = submit()>"; ECHO "NO"; } ?> Name: <?php echo "<input size=28 type=text name=Name ><br>"?> /*上記、テキストボックスに値を入力*/ <input type=submit name=bottun1 value=入力> </form> <?PHP $host = 'localhost'; $user = 'root'; $pass = 'root'; $db = 'DB'; if($_POST["ID"]){ $id = $_POST["ID"]; $link=mysql_connect($host,$user,$pass) or die("接続エラー"); mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); mysql_select_db($db,$link) or die("接続エラー"); $sql="SELECT * FROM test WHERE id = '$id'"; $res=mysql_query($sql,$link) or die("データ抽出エラー"); $rows = mysql_fetch_array($res,MYSQL_ASSOC); echo "<tr>"; echo "<td>".$rows["user_id"]."</td>"; echo "<td>".$rows["customer"]."</td>"; echo "</tr>"; mysql_close($link); }else{ echo "表示データはなし"; } ?> 以上、長文になりましたがよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP テーブルに表示した複数データを配列でもって、DBにupdateするのができない

    かなり困っています。(T_T) 作ろうと思っているのは、 まず、Mysqlより取得した複数データをテーブルに表示します。 その取得したデータの一部を修正し、「変更」ボタンを押すと、その修正したデータをMysqlにアップロードするという機能を作りたいと思っています。 問題なのが、Mysqlよりデータを取得し、テーブルに表示まではできたのですが、修正したデータを配列で取得する処理ができません。 テーブルには修正した複数データ(例:3項目の5データ)があり、そのデータをどのように変数に格納するのか(多分配列で持たないとダメなのかなぁ?)がわかりません。 変数に格納さえできれば、SQL:update文でMysqlに反映はできると思うのですが。。。その前段階ができていません。 ちなみに、作成ソースは。。。。 ****************** PHP部分 ********************** <?php ・・・・・(省略) // 「変更」ボタン押した時 if (isset($_POST['btnshopchg'])) { $cnt2 = 0; while ($cnt2 < $_SESSION[cnt1]) { $knrira = $_POST['kanrichg']['$cnt2'][0]; $knrino = $_POST['kanrichg']['$cnt2'][1]; $knrists = $_POST['kanrichg']['$cnt2'][2]; $knrisdate = $_POST['kanrichg']['$cnt2'][3]. " 00:00:00"; $shopid = $_SESSION['shop_id'][$cnt2]; $sql = " update shopping set sendnumber = '" .mysql_real_escape_string($knrino). "', state = '" .mysql_real_escape_string($knrists). "', shopping_date = '" .mysql_real_escape_string($knrisdate). "' where shopping_id = '" .mysql_real_escape_string($shopid). "'"; $result = mysql_query($sql); $cnt2 = $cnt2 + 1; } $error_message = '変更しました。。。'; ・・・・・・・(省略) ?> ****************** HTML部分 ********************** ・・・・・・・(省略) <table border="1"> <tr><th>変更</th> <th>注文ID</th><th>注文日時</th><th>商品名</th> <th>個数</th><th>送り状No</th><th>状態</th><th>発送日時</th> </tr> <?php $cnt1 = 0; while ($shopping = mysql_fetch_array($result)){ ?> <tr> <td class="knrchg"><input type="radio" name="kanrichg['<?php print $cnt1; ?>'][]" value="1"></td> <td class="knrno"><?php print $shopping['shopping_id']; ?></td> <td class="knrtime"><?php print date('Y/m/d', strtotime($shopping['order_date'])); ?></td> <td class="knrname"><?php print $shopping_name_tbl[$shopping['item_id']]; ?></td> <td class="knrnum"><?php print $shopping['quantity']; ?></td> <td class="knrsno"><input type="text" name="kanrichg['<?php print $cnt1; ?>'][]" value="<?php print $shopping['sendnumber']; ?>" size="16"></td> <td class="knrsts"><input type="text" name="kanrichg['<?php print $cnt1; ?>'][]" value="<?php print $shopping['state']; ?>" size="4"></td> <td class="knrout"><input type="text" name="kanrichg['<?php print $cnt1; ?>'][]" value=" <?php if($shopping['shopping_date'] != '1970-01-01 00:00:00'){ print date( 'Y/m/d', strtotime($shopping['shopping_date'])); } else { print '-'; } ?>" size="16"></td></tr> <?php $_SESSION['shop_id'][$cnt1] = $shopping['shopping_id']; $cnt1 = $cnt1 + 1; $_SESSION[cnt1] = $cnt1; } ?> </table> ・・・・・・・(省略) という感じです。。。 全くわかりません。PHPの配列(array)の理解が不十分なのだと思います。 どなたかわかる方、解決方法を教えてください。。。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数クエリ実行

    以前ここで質問させて頂き諦めていたのですが、やはりどうしても諦めきれず、 再度挑戦しようとしているスクリプトです。 PHP5.29 Apache2.33 MySQL5 -------------------------------------------------------------------------- ファイル名:test.php <form action="test2.php" method="post"> <? for($i=0;$i<3;$i++) { ?> <input type="text" name="group[<?php echo $i?>][name]" /><br /> <input type="checkbox" name="group[<?php echo $i?>][check][]" value="日本語" />日本語 <input type="checkbox" name="group[<?php echo $i?>][check][]" value="英語" />英語 <input type="checkbox" name="group[<?php echo $i?>][check][]" value="西語" />西語 <input type="checkbox" name="group[<?php echo $i?>][check][]" value="独語" />独語 <input type="checkbox" name="group[<?php echo $i?>][check][]" value="伊語" />伊語 <br /> <textarea name="group[<?php echo $i?>][context]" cols="30" rows="3" /></textarea> <br /> <? } ?> <input type="submit" value="登録" /> </form> -------------------------------------------------------------------------- ファイル名:test2.php <?php $dbuser="root"; $dbpass="root"; $db=new PDO("mysql:host=localhost;dbname=test",$dbuser,$dbpass); $group=$_POST['group']; for($i=0;$i<count($group);$i++) { $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $db->query('set names utf8'); $name=$group[$i]['name']; $check=implode(" ",$group[$i]['check']); $context=$group[$i]['context']; $arr=array($name,$check,$context); $stt=$db->prepare('insert into test(name,group,context) values(?,?,?)'); $stt->execute($arr); //print_r($arr); print "<br />"; } ?> <br /><br /><a href="test.php">戻る</a> <hr /> <?php print_r($_POST); ?> -------------------------------------------------------------------------- 上記スクリプトにて名前と言語及びテキストまでのパラメータを表示する所までは何とか行けたのですが、 いざ入力しようとするとエラーが返されます。エラーは'SQLSTATE[42000]:と言うものでSQL文に異常が 報告されています。「print_r($arr);」で配列が正確に格納されていることを確認しています。 どうも$stt->execute($arr)で何か問題があると思われるのですが、こちらの方わかる方いらっしゃいましたら 教えて頂けませんでしょうか? 宜しくお願い致します。

    • 締切済み
    • PHP
  • PHP/MySQL SQLエラーについて。

    PHP/MySQLについての質問です。 当方PHP/MySQLについては初心者で、現在参考書を見ながらWebアプリケーションを作成しています。 いくらやっても成功しない例があるので、どこが間違っているのか、 なぜ成功しないのかご教示願いたいです。 エラー名:SQL実行エラー 要因:不明。SQL文を変えたりしたところ成功したこともあるので(elect id,name,age from input_table 等)SQL文に間違いがあるのか? -------------------input.html------------------------ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <form action="input.php" method="post"> 名前:<input type="text" name="nm"> 年齢:<input type="text" name="age"> <input type="submit" name="exec" value="登録"> </form> </body> </html> -----------------------input.php---------------------------- <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <?php //DB接続 if(!$con=mysql_connect("localhost","root","********")){ //passwardは正確 echo"接続エラー"; exit; } //DB選択 if(!mysql_select_db("input",$con)){ echo"DB選択エラー"; exit; } $sql = "insert into input_table(name,age) values('$nm',$age)"; if(!$res=mysql_query($sql)){ echo"SQL実行エラー"; //ここでこのエラーが表示されてしまう exit; } echo "登録完了"; mysql_close($con); ?> </body> </html> --------------------database----------------------- create table input_table( id int not null auto_increment, name varchar(20) not null, age int not null, primary key(id) )

    • ベストアンサー
    • PHP