• ベストアンサー
  • すぐに回答を!

php+MySQLでレコード追加が反映されません。

phpとMySQLで、フォームに入力した情報を指定したテーブルに 新規レコードとして登録するページを作っています。 phpのバージョンは5.3、MySQLのバージョンは5.1.59だと思います。 レンタルしているサーバーはlolipopのものです。 こちらのふたつのウェブページを参考にコーディングしたのですが、 登録をしても無視されてしまい、MySQLにレコードが追加できません。 http://php5.seesaa.net/ http://memopad.bitter.jp/w3c/php/php_mysql_insert.html データベースへの接続と、フォームのあるページからINSERT文を書いたページへのデータの受け渡しは成功しているようです。 上記の2つのサイトで紹介されていたどの方法を試しても、同じ結果になります。 INSERT文の書き方がおかしいのでしょうか? 以下のようにコーディングしました。 --------------------------- <?php $url = "mysql***.phy.lolipop.jp"; $user = "USER_NAME"; $pass = "******************"; $db = "DATABASE_NAME"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM table_name"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); //データを取得する $AAA = $_POST['aaa']; $BBB = $_POST['bbb']; $CCC = $_POST['ccc']; $DDD = $_POST['ddd']; $EEE = $_POST['eee']; $FFF = $_POST['fff']; $GGG = $_POST['ggg']; $HHH = $_POST['hhh']; $III = $_POST['iii']; $JJJ = $_POST['jjj']; $KKK = $_POST['kkk']; $LLL = $_POST['lll']; $MMM = $_POST['mmm']; $NNN = $_POST['nnn']; $OOO = $_POST['ooo']; $PPP = $_POST['ppp']; $QQQ = $_POST['qqq']; // クエリを送信する $sql = "INSERT INTO tablename (AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ, KKK, LLL, MMM, NNN, OOO, PPP, QQQ) VALUES (`'$_POST[aaa]','$_POST[bbb]','$_POST[ccc]','$_POST[ddd]','$_POST[eee]','$_POST[fff]','$_POST[ggg]','$_POST[hhh]','$_POST[iii]','$_POST[jjj]','$_POST[kkk]','$_POST[lll]','$_POST[mmm]','$_POST[nnn]','$_POST[ooo]','$_POST[ppp]','$_POST[qqq]')"; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登録が完了しました</title> </head> <body> <h3>登録が完了しました</h3><br> <br /> 接続ID:<?= $link ?><br /> 選択の成否:<?= $sdb ?><br /> 結果ID:<?= $result ?><br /> 行数:<?= $rows ?><br /> <br /> 項目A:<?= $AAA ?><br /> 項目B:<?= $BBB ?><br /> 項目C:<?= $CCC ?><br /> 項目D:<?= $DDD ?><br /> 項目E:<?= $EEE ?><br /> 項目F:<?= $FFF ?><br /> 項目G:<?= $GGG ?><br /> 項目H:<?= $HHH ?><br /> 項目I:<?= $III ?><br /> 項目J:<?= $JJJ ?><br /> 項目K:<?= $KKK ?><br /> 項目L:<?= $LLL ?><br /> 項目M:<?= $MMM ?><br /> 項目N:<?= $NNN ?><br /> 項目O:<?= $OOO ?><br /> 項目P:<?= $PPP ?><br /> 項目Q:<?= $QQQ ?><br /> </body> </html> --------------------------------------------- この他に、フォームの画面や入力内容確認の画面があるのですが、 その間同士でのデータの受け渡しは成功しているようです。 ただ、このページでのレコードの登録だけができません。 初心者の質問で大変申し訳ないのですが、 どなたかわかる方、お答えいただけると嬉しいです。 よろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数399
  • ありがとう数3

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

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

// クエリを送信する $sql = "INSERT INTO tablename (AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ, KKK, LLL, MMM, NNN, OOO, PPP, QQQ) VALUES (`'$_POST[aaa]','$_POST[bbb]','$_POST[ccc]','$_POST[ddd]','$_POST[eee]','$_POST[fff]','$_POST[ggg]','$_POST[hhh]','$_POST[iii]','$_POST[jjj]','$_POST[kkk]','$_POST[lll]','$_POST[mmm]','$_POST[nnn]','$_POST[ooo]','$_POST[ppp]','$_POST[qqq]')"; これだけでは送信できてません。 mysql_query($sql, $link); これでクエリ送信です。 ちなみにこのmysql_queryですが、クエリが失敗した場合はFALSEを返えします。 それとこのクエリの前に接続閉じてたら送信できませんから、すべてのクエリの後で切断してください。 ちなみに基本的には、phpファイルの実行後にDBは勝手に切断されて、メモリも開放される仕様なので、 明示的に切断する必要がない場合は切断やメモリの開放まで書く必要は薄いです。 直前のmysqlエラーについては、 echo mysql_error($link); で確認できます。 また、この$linkの部分、接続リンクについても、 mysql系関数については引数がない場合は、直前の接続リンクがデフォルトで入る仕様になってますので、 今回の場合は省略して構いません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 クエリを送信する前に接続を閉じていたことと、 mysql_query($sql, $link); を書かなかったことが原因だったようです。 アドバイスを頂いた通りに直していったところ、レコード追加ができるようになりました。 ありがとうございます。

関連するQ&A

  • csv形式のデータの一部を削除して、上書きする方法

    前回も似たような(?)質問をしたんですが 今回も質問させてください。CSVに関して(CSVだけというわけではありませんが) 以下のようなデータを読み込んで、配列変数に格納後... aaa,bbb,ccc,ddd eee,fff,ggg,hhh iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt ↑のデータを、下のようなデータにして、保存しなおすにはどうすればよいでしょうか。(上から二列目を削除して前のデータに保存しなおす) aaa,bbb,ccc,ddd iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt 変な質問でもうしわけございませんが、回答できるかたお願いします。

    • ベストアンサー
    • Perl
  • セルの数字を抽出して一列にする方法を教えてください

    下記のような結果を出したいのですが、 関数を教えていただけませんでしょうか。 ※1はaaaとbbbがあるので、それをまとめてaaabbbとしたいです。 イメージとしてはCONCATENATEのような。 ●元データ 1 aaa 1 bbb 2 fff 2 ggg 2 hhh 3 iii 3 jjj 3 kkk 3 lll 3 mmm 3 nnn 4 ooo 5 ppp 5 qqq ●完成 1 aaabbb 2 fffggghhh 3 iiijjjkkklllmmmnnn 4 ooo 5 pppqqq よろしくお願いいたします。

  • PerlでCSV形式のファイルの一部分だけを抽出する方法

    Perlをやっていて困っていることがあります。 CSV形式のファイルを開いて、変数に代入した後の処理がわかりません。 どのようにしたいかというと・・・ aaa,bbb,ccc,ddd,eee,fff ggg,hhh,iii,jjj,kkk,lll mmm,nnn,ooo,ppp,qqq,rrr sss,ttt,uuu,vvv,www,xxx yyy,zzz,111,222,333,444 というファイルを読み込んだとします。その後 'fff' の部分だけをスカラー変数に取り込みたいときにはどのような 関数を実行すればいいのでしょうか。 困っています、お願いします。

    • ベストアンサー
    • Perl

その他の回答 (1)

  • 回答No.1
  • yambejp
  • ベストアンサー率51% (3827/7415)

>VALUES (`'$_POST[aaa]' のバッククォートは転記ミス? こまかいところを見直してみるとtypoがあるのでは? ちなみにPOSTデータをそのままSQLにつなげるのはNG 本番ではかならずエスケープ処理をいれてください

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 転記ミスですお恥ずかしい・・・ typoは色々検証したのですが、無いようでした。 エスケープ処理、完全に忘れていました。 ありがとうございます。

関連するQ&A

  • EXCEL VBA split関数について

    Excel VBA初心者です。 split関数についてどなたか教えていただけないでしょうか。 aaa,bbb,ccc,eee fff,ggg,hhh,iii jjj,kkk,lll,mmm というデータがあるとして、そこから aaa bbb fff ggg jjj kkk これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。

  • VBAで特定の値がある行を連続コピーしたい

    Excel 2003 OS XP Professional SP3 VBAは自分でコードは組むことはできませんので見よう見まねでやっているレベルです。 A B C D E の列があり、行の1行目はタイトル行になっています。  A  B  C   D  E ***  ***  ***  ***  *** ’  AAA  BBB  CCC  DDD 111 222 333 '   EEE  FFF  GGG  HHH '   III  JJJ  KKK  LLL 444 555 '   MMM  NNN  OOO  PPP A列にカンマがある行にはB~E列に値が入力されていて、A列にカンマ以外の値が入力されている 場合にはB~Eには何も入力されていません。 A列にカンマ以外の値の時、カンマのある行のデータを次のカンマのある行までフィルハンドルをドラッグしてコピーするよう にしたいです。  A  B  C   D  E ***  ***  ***  ***  *** ’  AAA  BBB  CCC  DDD 111  AAA  BBB  CCC  DDD 222  AAA  BBB  CCC  DDD 333  AAA  BBB  CCC  DDD '   EEE  FFF  GGG  HHH '   III  JJJ  KKK  LLL 444  III  JJJ  KKK  LLL 555  III  JJJ  KKK  LLL '   MMM  NNN  OOO  PPP   sub 連続コピー() Dim r As Long Dim n As Long r = 2 n = r + 1 Do While Worksheets("sheet1").Cells(r, 1) <> "" If Worksheets("sheet1").Cells(r, 1).Value = Worksheets("sheet1").Cells(n, 1).Value Then r = n n = n + 1 Else Range(Cells(r, 2), Cells(r, 5)).Copy Range(Cells(n, 2), Cells(n, 5)) n = n + 1 End If Loop End Sub 自分なりに考えてみましたが、ぜんぜん動きません。 どなたかご教授をお願いします。

  • 検索VBAを教えてください。

    VBAの勉強中です。 超初心者です。 シート1のB3に入力した値を、シート2のデータベースのC列から検索して、その検索した値と同じ行のD列・E列・F列の値を、シート1のB4・ B5・B6に表示したいと思います。 <シート1>    A     B     C     D 1 2     3       あああ ←ここを入力すると 4       aaa   ←表示したい! 5       bbb   ←表示したい! 6       ccc   ←表示したい! <シート2>    A    B    C      D     E     F 1           あああ    aaa     bbb     ccc 2           いいい      eee     fff      ggg 3           ううう      hhh      iii       jjj 4           えええ     kkk      mmm     nnn 5             おおお     ooo     ppp     qqq findを使えばいいと聞きましたが、使い方がよくわかりません。 例を読みましたが、どう自分に生かせばいいのかわかりませんでした。 どなたか未熟な私に教えていただけませんか? どうぞよろしくお願いいたします。

  • DOSプロンプトのテキストファイルから取得したフィールドがデータ無しの場合の認識方法

    CSVファイルから各フィールドを取得し、なにも入っていない場合は固定値を入れると言う処理を、DOSのコマンドプロンプトによるバッチで行ってほしいと言うユーザ要望に答えなくてはなりません。 【入力ファイル】 <<AAA.csv>> aaa,,bbb,,ccc,ddd iii,jjj,kkk,lll,mmm,nnn eee,,fff,,ggg,hhh このAAA.csvを入力情報にして、 カンマ区切りの何も入っていないフィールドを認識し、 上記ファイルで言うと、 各行の2項目に何も入っていない場合は222を、 各行の4項目に何も入っていない場合333を入れる、 と言う処理を作る必要があります。 上記に説明した処理での出力結果は以下の様になります。 【出力ファイル】 <<BBB.csv>> aaa,222,bbb,333,ccc,ddd iii,jjj,kkk,lll,mmm,nnn eee,222,fff,333,ggg,hhh forやsetを駆使してフィールドの取得や変換は出来たのですが、 取得したフィールドに何も入っていなかった場合に固定値を入れる処理で行き詰っています。 何か良い方法があれば教えてください。 ちなみに入力や出力ファイルはタブ区切りのTSVファイル形式の場合もあります。 又環境は、銀行のサーバで実装するのでフリーソフトはもちろんparlやWSH等のインストールも許されていない為、DOSプロンプトコマンドによるバッチ処理のみで行う必要があります。 宜しくお願いします。

  • SQL文を教えてください

    いつもお世話になっております。 ウェブサイトを作っているのですが、以下のようなデータを表示するのに良いSQL文が分からず悩んでいます。 ID | DATE     | DATA --+----------+----- 1 | 2010-11-11 | aaa 2 | 2010-11-11 | bbb 1 | 2010-11-10 | ccc 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 4 | 2010-11-10 | fff 1 | 2010-11-12 | ggg 2 | 2010-11-12 | hhh 1 | 2010-11-12 | iii 3 | 2010-11-12 | jjj 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 1 | 2010-11-06 | qqq 3 | 2010-11-05 | rrr 2 | 2010-11-13 | sss 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy 11| 2010-10-30 | zzz 上のようなテーブルから、各IDを10件まで日付順に取り出すことはできるでしょうか? 具体的には、1つのページに以下のように表示したいのです。 2 | 2010-11-13 | sss 2 | 2010-11-11 | bbb 1 | 2010-11-12 | ggg 1 | 2010-11-11 | aaa 1 | 2010-11-10 | ccc 1 | 2010-11-12 | iii 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 3 | 2010-11-05 | rrr 4 | 2010-11-10 | fff 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy ・各IDのうち、最も新しい日付のものが上にくる ・表示するIDは10件まで ・表示はIDごとにまとめて行う ・一つのIDに属するデータは10件までしか取り出さない 上記のことを実現する方法をご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • スペース区切りのテキストデータ

    VB2005.netを使っています。 スペース区切りの2つのテキストデータが 2つのTEXTBOX内あります。 AA BBB CCC DD EEE FF GGG HHH II JJJ AA LLL MMM NN OOO FF QQQ RRR SS TTT このAAの列とCCC列を抜き出して表示させ、 AA CCC-MMM FF HHH-RRR といった計算の後の数字を行にして表示 させたいのですが、何かよい方法があるでしょうか? よろしくお願いします!

  • centerタグを使わないで中央よせ

    画像のようなレイアウトがしたいです。 centerタグを使って以下の様に書きました。 <html> <head> <meta http-equiv='Content-Style-Type' content='text/css'> <style> .text100 { width: 100; text-align: left; } </style> </head> <body> <center> <img src='./picture.jpg'> <p class='text100'> aaa bbb ccc eee fff ggg hhh iii jjj kkk lll mmm nnn ooo ppp qqq rrr sss ttt uuu vvv www xxx yyy zzz </p> </center> </body> <html> しかしcenterタグは非推奨との事なので、これをcenterタグを使わないで書くのはどうしたらよいでしょうか? やりたいことは画像は中央に、文章は幅100pxの中で左よせ、なのだけど、文章の固まりとしては中央に置きたいのです。 よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • [RCS]Directory以下のファイルのCheck Out方法

    HP-UX 11.xでRCSを使用しています。 以下のような構成になっています。 /RCS aaa.txt bbb.txt ccc.txt ddd.txt /RCS/EEE fff.txt ggg.txt hhh.txt /RCS/EEE/III jjj.txt kkk.txt /RCS/LLL mmm.txt nnn.txt : : $ co /RCS/* で/RCS 直下のファイルはすべてCheck Outできますが、 /RCS/EEE、/RCS/LLL 以下のファイルもすべて一度にCheck Outするにはどうしたいいのでしょうか? もちろん、 $ co /RCS/EEE/* で可能ですが、/RCS 以下のディレクトリがたくさんあるので それをいちいち指定できません。 何卒、ご教授願います。

  • 集計方法について教えて下さい。PHP+MYSQL

    こんにちは、よろしくお願い致します。 データベースに下記のようなデータが入っています。 table_A cd name --------------- 1000001 aaa 1000002 bbb 1000003 ccc 1000004 ddd 1000005 eee 1000006 fff 1000007 ggg 1000008 hhh 1000009 iii 1000010 jjj table_B cd type point --------------- 1000001 A 100 1000001 B 50 1000001 C 30 1000004 C 20 1000005 B 70 1000009 A 10 1000009 C 40 table_Aと、table_Bから、下記table_Cの内容 table_C cd name count point_total ------------------------------ 1000001 aaa 3 180 1000002 bbb 0 0 1000003 ccc 0 0 1000004 ddd 1 20 1000005 eee 1 70 1000006 fff 0 0 1000007 ggg 0 0 1000008 hhh 0 0 1000009 iii 2 50 1000010 jjj 0 0 を得るには、どのようなSQLを書けば良いのでしょうか? table_Cのcount項目は、cdでマッチするtable_Bのtypeの種類をカウントしたもので table_Cのpoint_total項目は、cdでマッチするtable_Bのpointを合計した数値になります。 分かりにくい質問ですみませんがアドバイス頂けると嬉しいです。 具体的にどのような方法で実現できるか、教えて頂けると有難いです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • エクセルのマクロについて

    エクセル97のマクロについて教えてください。 下のようなエクセルシートがあると仮定します。 このシート全体を選択して用意してあるボタンを押すと、マクロが流れるようにします。 マクロの中身は、項目1~4の値が同じであれば、同じデータを一つにするというものを考えています。 たとえば下の例の場合、追番でいえば2と4のデータは同じなので、マクロ処理にかけると、追番の大きい4のデータは消え、2のデータの"200"項目にフラグ1が追加されるようにしたいのです。 項目の値が同じであれば、いくつでもデータを統一したいと考えています。 ================ エクセル シート例 ================================== 追番_項目1_項目2_項目3_項目4_100_200_300_400 ← 見出し ----------------------------------------------------------------- 1****AAA****BBB****CCC****DDD****1*********1****1**** 2****EEE****FFF****CCC****GGG****1**************1**** 3****HHH****FFF****KKK****JJJ****1****1****1********* 4****EEE****FFF****CCC****GGG****1****1*********1**** ↓ マクロ処理後 追番_項目1_項目2_項目3_項目4_100_200_300_400 ← 見出し ----------------------------------------------------------------- 1****AAA****BBB****CCC****DDD****1*********1****1**** 2****EEE****FFF****CCC****GGG****1****1*********1**** 3****HHH****FFF****KKK****JJJ****1****1****1********* =================================================================== 注:見出しの_とデータの中の*は空白を生めるためのもので、データとはまったく 関係ありません。 なにぶんエクセルVBAは初心者同然なもので... よろしくお願い致します。