Web上からmysqlにデータを挿入する方法

このQ&Aのポイント
  • Web上からmysqlにデータを挿入する方法をご教授いただけませんか?
  • データ収集システムを開発していて、Web上からmysqlにデータを挿入する方法がわかりません。具体的な手順を教えてください。
  • mysqlにデータを挿入するためのコードや手順について教えてください。Web上のフォームからデータを受け取り、データベースに保存したいです。
回答を見る
  • ベストアンサー

Web上(php)からmysqlにデータを挿入する

授業評価アンケートのデータ収集システムを開発しています。 年度(セレクトボックス)[nendo]・学年(セレクトボックス)[gakunen]・クラス(セレクトボックス)[class]・科目名(テキストボックス)[kamokumei]・科目コード(テキストボックス)[kamokucode]・分類(セレクトボックス)[kind]・履歴者数(テキストボックス)[people] について、POST?hidden?でデータをページをまたいで持っていきます。 最終的に、アンケートの評価として、設問1~14のそれぞれについてA~F評価の人数を入力します。 表形式にしており、 設問1のA評価については、name="1A" 設問2のB評価については、name="2B" のようにしています。 そして、 「登録ボタン」 を押すと、 年度・学年・ ・・・ ・履歴者数 及び 設問1~14のそれぞれについてA~F評価の人数 をデータベースに挿入したいのですがわかりません。 データベースの構造は、 データベース名:student テーブル名:data field: nendo gakunen class kamokumei kamokucode kind people 1A 1B ・ ・ ・ 31F のようになっています。 今、挿入しようとしているアンケートについては、設問数は14です。 if文で、「分類」の選択(4つ)に応じて、設問数が変えたいため、31Fまでフィールドを用意しています。 今、挿入しようとしているものは年度や学年や・・・と、設問1~14のそれぞれについてA~F評価の人数ですが、フィールドが・・・31Fまであっても問題ないのでしょうか? <?php mysql_connect("localhost", "aiueo","##aiueo"); //データベースへ接続 mysql_select_db("aiueo"); //データベースを選択 $14F = $_POST["14F"]; $14E = $_POST["14E"]; $14D = $_POST["14D"]; ・ ・ ・ $people = $_POST["people"]; $kind = $_POST["kind"]; $kamokucode = $_POST["kamokucode"]; $kamokumei = $_POST["kamokumei"]; $class = $_POST["class"]; $gakunen = $_POST["gakunen"]; $nendo = $_POST["nendo"]; $sql = 'INSERT INTO `data` (`nendo`, `gakunen`, `class`, `kamokumei`, `kamokucode`, `kind`, `people`, `1A`, `1B`, `1C`, `1D`, `1E`, `1F`,・・・) VALUES     (\'\', \''.$nendo.\''.$gakunen.'\', \''.$class.'\', \''.$kamokumei.'\', \''.$kamokucode.'\',\''.$kind.', \',\''.$people.'\', \''.$1A.'\', \''.$1B.'\', \''.$1C.'\', \''.$1D.'\', \''.$1E.'\', \''.$1F.'\',・・・) mysql_query( $sql ); ?> のようにしています。 どなたか教えてください!!!

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

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

  • ベストアンサー
回答No.1

何か、テーブル設計がよくわからないのですが、 学生の個人情報部分は置いておいて、それ以降の設問のフィールドですが、これは例えば q01からq31 といったフィールドにして、 それぞれのフィールドには、「A~F」までのいずれかの値が含まれる、という設計では問題があるのでしょうか。 普通は(他の人がどうやっているか私もよくわかりませんが) 上記のようにして、フォームには、 <input type="radio" name="q01" value="A" />A<br /> <input type="radio" name="q01" value="B" />B<br /> <input type="radio" name="q01" value="C" />C<br /> <input type="radio" name="q01" value="D" />D<br /> <input type="radio" name="q01" value="E" />E<br /> <input type="radio" name="q01" value="F" />F<br /> などとして、(radioは同一名のname値を複数書いてもクリックされたもののみPOSTされるから) 値を得るようにします。 そして本題の、設問数よりもフィールド数が多い場合に関してですが、 プログラムの全容がわからないのでなんとも言えないですが、 if文で振り分けた「分類」によっては、設問によってはPOSTもされてこない、ということであれば、 ちょいちょい工夫が必要、ですかね・・・ <?php $db = mysql_connect("localhost", "aiueo","##aiueo"); //データベースへ接続 mysql_select_db("aiueo", $db);//データベースを選択 //フィールド名として使っているものを先に定義しておく $define_fields = array( 'nendo', 'gakunen', 'class', 'kamokumei', 'kamokucode', 'kind', 'people', 'q01', //面倒なので省略しますが、q01~q32です。 //ちなみに、1A~31Fというフィールド名でするならソレを全部書く 'q32', ); //POSTされた値を別の変数に挿入 //また、その際にエスケープとクオート処理もする $insert = array(); foreach($define_fields as $field_name){ if(isset($_POST[$field_name])){ $insert[$field_name] = "'" . mysql_real_escape_string($_POST[$field_name], $db) . "'"; } } //SQLを構築する $sql = "INSERT INTO `data` ("; $sql.= "`" . implode("`,`", array_keys($insert)) . "`"; $sql.= ") VALUES ("; $sql.= implode(",", array_values($insert)); $sql.= ")"; mysql_query($sql, $db); ?> とかやると、実際に値の記述をするところが少なくなるので、多少楽出来ます。 ※ただ、不正な値が含まれているかどうかのチェックはここには記述していないので、どこかで値のチェックは必ずしてください。 また、フィールド定義をするときには、設問のフィールドは、NULLを許可するようにしないと、SQLがエラーになります。

y_okamoto_2918
質問者

お礼

ありがとうございます!!!!! おかげ様でデータ登録ができました!!!!

関連するQ&A

  • php セレクトボックス 分岐 わかりません・・・

    php if文? セレクトボックスの選択に応じて、次ページで表示するものも変えたい。 授業評価アンケートのデータ収集システムを開発中です。 page1.php では、 年度(セレクトボックス)[nendo] 学年(セレクトボックス)[gakunen] クラス(セレクトボックス)[class] 科目名(テキストボックス)[kamokumei] 科目コード(テキストボックス)[kamokucode] 分類(テキストボックス)[kind] 履歴者数(テキストボックス)[people] を選択及び入力します。 page2.php では page1.php で選択及び入力された情報をPOST?hidden?などを利用し、 年度:2011 学年:1 クラス:1 科目名:国語 科目コード:11L901 分類:講義科目 履歴者数:40 のように表示させ、その下にアンケートの回答者数を入力する表を示します。 分類のセレクトボックスには4種類の項目があります。 講義科目・体育科目・実験科目・HR です。 分類により、アンケートの設問数が異なるようにしたいのです。 たとえば、 講義科目は設問が1~5。体育科目は1~8。実験科目は1~10。HRは11~15。 だとします。 page1.php 入力された「分類」に応じて、設問数の異なる、 page2.php を表示したいのですが、わかりません。 また、アンケートの表については、 A~F評価があり、 設問1のAならそのマスをname="1A"、設問2のBならname="2B",・・・というようにしています。 page3.php 入力したものを全て表示し、で確認ページとし、 page4.php で、「登録」ボタンを押すと、 年度 学年 ・ ・ ・ 履歴者数 ・ ・ ・ 1A 1B ・ ・ ・ 15F (↑のような構造のtableも用意済み) のデータをmysqlに挿入します。 「分類」による分岐をせず、 page2.phpで、設問数1~5の場合で、データの挿入には成功しました。 6~15については、空となっています。 「分類」により設問数の異なるpage2.phpを表示し、 現在の段階のように、データを挿入できるような形態にできませんでしょうか? どうかお願いしたします!!!!!!!!!! 時間がありません>< お願いします!!!!

    • 締切済み
    • PHP
  • phpでのセレクトボックスからの受け渡しについて

    phpにおいての、セレクトボックスにより選択させたデータの受け渡しについて、どなかか教えてください。 授業評価アンケートのデータ収集システムを卒研で開発しています。 その中の一部で、 年度・学年・クラス を各々セレクトボックスにて選択させるページがあります。 仮にpage1.htmlとし、以下にその一部を示します。 <FORM method="post" action="page2.php" enctype="application/x-www-form-urlencoded"> <P> 年度: <SELECT name="nendo"> <OPTION value="1">2006</OPTION> <OPTION value="2">2007</OPTION> <OPTION value="3">2008</OPTION> <OPTION value="4">2009</OPTION> <OPTION value="5">2010</OPTION> <OPTION value="6" selected>2011</OPTION> <OPTION value="7">2012</OPTION> </SELECT> 学年: <SELECT name="gakunen"> <OPTION value="1">1年</OPTION> <OPTION value="2">2年</OPTION> <OPTION value="3">3年</OPTION> <OPTION value="4">4年</OPTION> </SELECT> クラス: <SELECT name="class"> <OPTION value="1">1組</OPTION> <OPTION value="2">2組</OPTION> <OPTION value="3">3組</OPTION> <OPTION value="4">4組</OPTION> <!-- --> </SELECT> </P> <P><INPUT type="submit" value="科目選択へ"> <INPUT type="reset" value="取り消す"></P> 次のページ(page2.php)では 科目・分類 を各々セレクトボックスにて選択させるページを用意します。 その際に、科目・分類の各々のセレクトボックスの上に、 前ページ(page1.php)にて選択された値(valueではなく文字列(2008,1年))を表示します。 年度:~~ 学年:~~ クラス:~~ これについては以下の方法で成功しました。 年度:<? echo $_POST["nendo"]+2005?> 年 学年:<? if ($_POST["gakunen"] == "1"){ echo "1年"; } else if ($_POST["gakunen"] == "2"){ echo "2年"; } else if ($_POST["gakunen"] == "3"){ echo "3年"; } else if ($_POST["gakunen"] == "4"){ echo "4年"; } ?> クラスについても同様の手法。 ここからが本題です。 page1.html→page2.php に受け渡した年度・学年・クラスのデータを page2.php→page3.php にも同じように、年度:~~・・・と表示させたいのですが、わかりません。 hiddenというのを使うのでしょうか。 調べても、このパターンのように1ページまたいでのデータの受け渡し方法がよくわかりません。 他の方法もあるのでしょうか。 どなたか具体的に教えてください!

    • 締切済み
    • PHP
  • mysql+php リストボックスについて

    リストボックスを使ってmysqlのテーブルから データを得たデータをテキストボックスに入れる方法で悩んでいます。 やりたいことはこんな感じです。 [商品A▼]←リストボックス リストボックスの内容は               データベースより取得 [230 ]円←テキストボックス mysqlテーブル 商品  値段 商品A 230 商品B 460 商品Aを選ぶと自動的にテキストボックスに値段が 入るようにしたいのですが・・リストボックスの データを拾ってくることはできるのですが、テキスト ボックスに入力することができません。やり方を ご教授お願いします。

  • phpとjavascript ・・・・ について

    授業評価アンケートのデータ収集システムの開発を行っています。 科目及び科目コードを入力させるページ(page1.php)があります。 その入力について、入力ミスをなくすために、「参照」ページ(kamoku.html)をつくり、 そこには予め「科目/科目コード」という項目のある表が用意されており、 そのページ(kamoku.html)へジャンプし、そこで入力したい項目をクリックすると、 page1.phpの科目及び科目コード、各々のテキストボックスに入力したいものを代入することに成功しました。 このような構造にする前は、 手入力した後、 「次ページへ」 をクリックすると、次ページへジャンプするようになっていました。 <FORM method="post" action="page2.php" enctype="application/x-www-form-urlencoded"> javascript を利用したのですが、 これが原因なのでしょうか? javascriptを利用したページの拡張子は必ずhtmlじゃないといけないのでしょうか? (page1.phpをただ単にpage1.htmlにしてもダメでしたが・・・) URLについて、 http://----/page1.php 次ページをクリックすると http://----/page1.php?nendo=6&gakunen=1&class=1&kamokumei=&kamokucode=&kind=1&people=&sub=次ページへ のようになり、昔のように次ページをジャンプせず、入力項目が空になったりします。 どなたか解決法を教えてください!!! お願いします><

    • ベストアンサー
    • PHP
  • PHPとMySQLを使ったフォームを作っていますが、うまくできないこと

    PHPとMySQLを使ったフォームを作っていますが、うまくできないことがあり書き込みさせていただきます。 わかる方、ご助力願えれば幸いです。 フォームから、送信されたデータを受け取って、MySQLに登録する際に、フォーム内に空欄があると、うまくMySQLのデータベースに追加ができなかったり、変更ができなかったりします。 コードを簡単に書くと… <?php //フォームからデータを取得 $name = $_POST['name']; $address = $_POST['address']; $age = $_POST['age']; //データベース接続処理 $db = mysql_connect("localhost","user","password"); mysql_select_db("db_name",$db); $rs = mysql_query("select * from tablename order by my_id desc",$db); //データベースへの登録 $rs = mysql_query("INSERT INTO tablename(name,address,age)VALUES('$name','$address','$age')",$db); ?> このような感じになります。 フォームには、名前、住所、年齢を入力しているわけですが、年齢が必須でないため、空欄として送られてくることもあります。 年齢に数値が入っている場合は、うまく登録されますが、空欄であった場合、特にエラーが出るわけでもなく、単に「登録されない」という状況がおきます。 データベースのテーブルのフィールドでは、ageは int(11)でNULLはYes、defaultはNULLになっております。 自分なりに調べてみたつもりですが、知りたい情報に出合うことができませんでした。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • php+MYSQL

    打ち込んだ後 var_dunpにてqueryの中身を確認したところ falseになってしまっていて失敗してしまいますどうしたらいいでしょうか? $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); ここがおかしいのかと思ってます <?php $link = mysql_connect('localhost','user','pass','dbname'); if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; if ( $subject !=='' && $honbun !=='' ) { $query = " INSERT INTO ogawa ( " ."subject," ."honbun," .") VALUES ( " . "'" . mysqli_real_escape_string( $link, $subject ) ."', " . "'" . mysqli_real_escape_string( $link, $honbun ) . "'" ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysqli_query($link,$query); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"><input type="hidden" id="auth_token" name="auth_token" value="04d8fdd9da7e7b2cba8698a7cffda5b427b29b5b"><input type="hidden" id="auth_token" name="auth_token" value="04d8fdd9da7e7b2cba8698a7cffda5b427b29b5b"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8">

  • PHPで同じDBから違う内容でカウントを繰り返す

    各クラスに、田中・鈴木・佐藤が何人いるかMySQLのデータベースからカウントし HTMLでテーブルを組んで、それぞれの人数を表示しています。 【カウント用PHP】 $cnt_A = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%田中%' AND class LIKE '%1組%'"; $cnt_recordSet_A = mysql_query($cnt_A); $table_A = mysql_fetch_assoc($cnt_recordSet_A); $A = number_format($table_A['cnt_A']); $cnt_B = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%鈴木%' AND class LIKE '%1組%'"; $cnt_recordSet_B = mysql_query($cnt_B); $table_B = mysql_fetch_Bssoc($cnt_recordSet_B); $B = number_format($table_B['cnt_B']); $cnt_C = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%佐藤%' AND class LIKE '%1組%'"; $cnt_recordSet_C = mysql_query($cnt_C); $table_C = mysql_fetch_Cssoc($cnt_recordSet_C); $C = number_format($table_C['cnt_C']); $cnt_D = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%田中%' AND class LIKE '%2組%'"; $cnt_recordSet_D = mysql_query($cnt_D); $table_D = mysql_fetch_Dssoc($cnt_recordSet_D); $D = number_format($table_D['cnt_D']); $cnt_E = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%鈴木%' AND class LIKE '%2組%'"; $cnt_recordSet_E = mysql_query($cnt_E); $table_E = mysql_fetch_Essoc($cnt_recordSet_E); $E = number_format($table_E['cnt_E']); $cnt_F = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%佐藤%' AND class LIKE '%2組%'"; $cnt_recordSet_F = mysql_query($cnt_F); $table_F = mysql_fetch_Fssoc($cnt_recordSet_F); $F = number_format($table_F['cnt_F']); 【表示用PHP】 +------+-----------------+-------------------+ |----|1組          |2組           | +------+-----------------+-------------------+ |田中|<?PHP print $A ?>人|<?PHP print $D ?>人| +------+-----------------+-------------------+ |鈴木|<?PHP print $B ?>人|<?PHP print $E ?>人| +------+-----------------+-------------------+ |佐藤|<?PHP print $C ?>人|<?PHP print $F ?>人| +------+-----------------+-------------------+         (テーブルはHTMLで作成、コードは略します・・・) 今後、各テーブルにさらに  ・男子の人数/女子の人数 表示例: +------+---------------------------------------------------------------------+...... |田中|<?PHP print $A ?>人(男子:<?PHP print $A_boy ?>/女子:<?PHP print $A_girl ?>)|...... +------+---------------------------------------------------------------------+...... というように増やしていこう思ったのですが、 【カウント用PHP】がすごく長くなってしまって、スマートじゃないのではないかと疑問に思っています。 簡潔なやり方などご存じの方いましたらご教授お願い致します。

    • ベストアンサー
    • PHP
  • セレクトボックスでの選択した値をDBに挿入する方法

    授業評価アンケートのデータ収集システムを卒研で開発しています。 phpとmysqlを利用して開発したいと思っています。 その一部で、年度や学年やクラスなどをセレクトボックスで選択させたいと思っています。 表示するだけであれば、 年度: <SELECT name="nendo"> <OPTION value="1">2006</OPTION> <OPTION value="2">2007</OPTION> <OPTION value="3">2008</OPTION> <OPTION value="4">2009</OPTION> <OPTION value="5">2010</OPTION> <OPTION value="6" selected>2011</OPTION> <OPTION value="7">2012</OPTION> </SELECT> で出来ますが、 後々データベースに「2006」などの文字列を挿入したいのですが、方法がわかりません。 どなたか詳しく教えてください!

    • 締切済み
    • PHP
  • php+MYSQL

    タイトル 本文 書き込み後保存を押すと 下に書き込み保存されていく形です タイトル 本文 書き込み日時 タイトル 本文 書き込み日時 エラー自体は出てないのですが書き込みが反映されません val_dunpで調べたところ resource(7) of type (mysql result) > このように出てきましたなにか文自体に必要なものがないのでしょうか? <?php $link = mysql_connect('localhost','user','pass'); if (!$link) { die('接続に失敗しました。'.mysql_error()); } $db_selected = mysql_select_db('ogawa',$link); if(!$db_selected) { die('データベース選択に失敗しました。'.mysql_error()); } $res = mysql_query('SELECT * FROM test'); if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; $kakikomi = $_POST['kakikomi']; if ( $subject !=='' && $honbun !=='' && $kakikomi !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," ."kakikomi," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun )."'," . "'" . mysql_real_escape_string( $link, $kakikomi)."'," ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($query,$link); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT id,subject,honbun,kakikomi FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].''.$val['kakikomi'].'<br>'; } ?> </body> </html>

  • PHP+MYSQLについて質問です。

    PHP+MYSQLについて質問です。 フォームに入力した電話番号が、 データベースに登録されている電話番号と重複している場合重複している件数を表示するようにしたいのですが、どうにもうまくいきません。 どなたかわかる方いらっしゃいませんか? 現状がこんな感じになっています。 よろしくお願いします。 ■test.class.php class test{ public function counttest($tel){ $qstring = "select (*) from _test where tel = '$tel'"; $qresult = mysql_query($qstring); if(!$fresult = mysql_fetch_row($qresult)){ $this->errorm = "該当データなし"; return false; }else{ $this->telcount = $fresult[0]; } } } ■test.php require_once ("test.class.php"); require_once ("Smarty.class.php"); $settings = new test; $smarty = new Smarty(); $telcount = $test->counttest($tel); $smarty->assign("telcount",$telcount); $smarty->display("top.tpl");

    • ベストアンサー
    • PHP