質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

解決済

3回答

3418閲覧

php+MySQLで会費管理をしていますが、年度を追加したらエラーが発生、構文チェックでエラーはないと表示。

ronron3311

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

0クリップ

投稿2015/11/14 00:49

phpで質問です、初心者で勉強中です、よろしくお願いいたします。
環境:php 5.5 MySQL5.0 smartyを使用、レンタルサーバーです。

2015年までのデータは問題なく入力できるのですが、ここまでは前任者が作成していました、その後私が受け継ぎ2017年まで関係するファイルに書き加えました。

所が、実行すると以下のエラーが出て現在業務不可能の状態となっています。
退職した前任者へ連絡しましたが、昔の事なので覚えていないという返事で、こちらへ解決策の相談をさせて頂きました。
書き込みが出来ないのでMySQLへの接続を疑いましたが、2015年までのデータ書き換えは問題がありません、私が書き換えた事で起きてしまった事なので、何とか解決したく、ご指導をお願いいたします。

エラーの表示
UPDATE ada_sika_member SET admission_day = '2014-01-05', admission_fee = '1000', annual_day_2011 = NULL, annual_fee_2011 = '0', annual_day_2012 = NULL, annual_fee_2012 = '0', annual_day_2013 = NULL, annual_fee_2013 = '0', annual_day_2014 = '2014-01-05', annual_fee_2014 = '1000', annual_day_2015 = '2014-03-01', annual_fee_2015 = '1000' annual_day_2016 = '2015-10-5', annual_fee_2016 = '1000' WHERE id = 10425MDB2 Error: syntax error

上記は2016年に書き込みテストをした時のエラー表示です。
phpソースを掲載しようとしましたが字数オーバーで掲載できませんでした。

様々な本を購入して、原因を探してみましたが初心者ゆえの悲しさで自分の現在の知識では解決する能力がありません。
経験者のかたのヒントでも頂ければ自分も努力したいと思っています。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

annual_fee_2015 = '1000' annual_day_2016 = '2015-10-5'は、
annual_fee_2015 = '1000' ,annual_day_2016 = '2015-10-5'では?
カンマが不足しています。


(最終結果を追記)

lang

1if (empty($i_data['annual_day_2015'])) { 2 $sql .= " annual_day_2015 = NULL,"; 3} else { 4 $sql .= " annual_day_2015 = '" . addslashes($i_data['annual_day_2015']) . "',"; 5} 6$sql .= " annual_fee_2015 = '" . addslashes($i_data['annual_fee_2015']) . "'";

というコードの後に、

if (empty($i_data['annual_day_2016'])) { $sql .= " annual_day_2016 = NULL,"; } else { $sql .= " annual_day_2016 = '" . addslashes($i_data['annual_day_2016']) . "',"; } $sql .= " annual_fee_2016 = '" . addslashes($i_data['annual_fee_2016']) . "'";

を追加したために、annual_day_2016 = の前のカンマが不足している状態でした。

lang

1$sql .= " annual_fee_2015 = '" . addslashes($i_data['annual_fee_2015']) . "',";

のように修正して、解決したようです。
他にも同様の個所があったので修正が必要でした。

投稿2015/11/14 01:01

編集2015/11/14 06:26
eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eripong

2015/11/14 01:05

id = 10425MDB2というのも気になります。 id = '10425MDB2'でしょうか。 テーブル定義はどうなっていますか?
eripong

2015/11/14 01:09

MDB2は表示上だけの問題のようなので、 取り消します。
ronron3311

2015/11/14 01:19

eripong様 早速の回答ありがとうございました、感謝いたします。 同様のエラーの方々の質問を調べていると、カンマやダブルコーテーションの抜けが多いというところを、感じておりました。 ですが、PHPソースを見る限りは抜けているところが無いので、原因を特定出来ませんでした、関連のソースを一部掲載しますので、指摘されている現象がどこで起きているかを探しています。 $in_annual_2015_year = $_REQUEST['annual_2015_year']; $in_annual_2015_month = $_REQUEST['annual_2015_month']; $in_annual_2015_day = $_REQUEST['annual_2015_day']; $in_annual_2016_year = $_REQUEST['annual_2016_year']; $in_annual_2016_month = $_REQUEST['annual_2016_month']; $in_annual_2016_day = $_REQUEST['annual_2016_day']; if (empty($in_annual_2015_year)) { $data['annual_day_2015'] = ""; } else { $data['annual_day_2015'] = $in_annual_2015_year . "-" . $in_annual_2015_month . "-" . $in_annual_2015_day ; } $data['annual_fee_2015'] = $_REQUEST['annual_fee_2015']; if (empty($in_annual_2016_year)) { $data['annual_day_2016'] = ""; } else { $data['annual_day_2016'] = $in_annual_2016_year . "-" . $in_annual_2016_month . "-" . $in_annual_2016_day ; } $data['annual_fee_2016'] = $_REQUEST['annual_fee_2016'];
ronron3311

2015/11/14 01:22

eripong様 テーブル定義はこの部分です $in_annual_2017_year = $_REQUEST['annual_2017_year']; $in_annual_2017_month = $_REQUEST['annual_2017_month']; $in_annual_2017_day = $_REQUEST['annual_2017_day']; $data = array(); $data['id'] = $_REQUEST['id']; $data['admission_day'] = $in_admission_year . "-" . $in_admission_month . "-" . $in_admission_day ; $data['admission_fee'] = $_REQUEST['admission_fee'];
eripong

2015/11/14 01:23

$dataを使って、SQLを組み立てているところを見せてください。 それと、質問に追記していただく方が見やすいです。 テーブル定義も載せられればお願いします。
ronron3311

2015/11/14 01:43

スミマセン。テーブル定義はhtmlソースで掲載すれば宜しいのでしょうか?
eripong

2015/11/14 01:50 編集

HTMLではなく、MySQLに繋いで、 SHOW CREATE TABLE ada_sika_member; した結果のことです。 MySQLへの接続のやり方はご存知ですか?
ronron3311

2015/11/14 01:51

パスワードで管理者以外は入れませんので、何も操作せずに操作htmlを開いたので。html分ですがデータを抜いて掲載いたします。 <title>会員一覧(管理者)</title> <script type="text/javascript"> //<![CDATA[ function edit_data(id) { var frm = document.perPage; frm.action = "admin_itiran_fee.php"; frm.proc_mode.value = "edit"; frm.id.value = id; frm.submit(); //return false; } //]]> </script> <script type="text/javascript"></script><link rel="stylesheet" type="text/css" href="/B1D671CF-E532-4481-99AA-19F420D90332/netdefender/hui/ndhui.css" /></head> <body><script type="text/javascript" language="javascript" src="/B1D671CF-E532-4481-99AA-19F420D90332/netdefender/hui/ndhui.js?0=0&amp;0=0&amp;0=0"></script> <div id="wrapper"> <h1>【会費徴収状況一覧】</h1> <div id="info"> <form action="/member/admin_itiran_fee.php" name="perPage"> <input type="hidden" name="sort" value="hiragana" /> <input type="hidden" name="order" value="asc" /> <input type="hidden" name="pageID" value="1" /> 全424件中 1件目~10件目 | 全43ページ中 1ページ目 | 表示件数<select name="setPerPage" onchange='document.forms["perPage"].submit()'><option value="10" selected="selected">10件/ページ</option><option value="424">424件/ページ</option></select> &nbsp;&nbsp;&nbsp;&nbsp;<a href="csv_export_fee.php">>>会費CSVダウンロード</a> &nbsp;&nbsp;&nbsp;&nbsp;<a href="admin_itiran.php">>>会員情報一覧</a> <input type="hidden" name="proc_mode" value="itiran" /> <input type="hidden" name="id" value="0" /> </form> </div>
ronron3311

2015/11/14 01:54

勘違いを起こしていました。 MySQLの部分ですね、失礼しました。 今、SQLを空けてみます
eripong

2015/11/14 01:58

操作htmlとは何のことでしょうか? 何らかの方法でMySQLに接続できないと、 DBのテーブル定義を修正することもできないのですが、 annual_day_2016などのカラムの追加を実施していないということでしょうか? それとも、他の方が実施されたのですか?
eripong

2015/11/14 01:59

コメントが入れ違いました。 そうですね。MySQLのへの接続です。
ronron3311

2015/11/14 02:09

eripong様 「MySQLへの接続のやり方はご存知ですか?」 よく覚えていません、何度か練習をしてうろ覚え程度です。 myadminからならデータを取り出せるように接続した状態です。
ronron3311

2015/11/14 02:21

eripong様 このデータを取り出しました、これで良かったでしょうか? SELECT `id`, `simei`, `hiragana`, `zip_code`, `ken_id`, `ken_name`, `address`, `tatemono`, `syozoku`, `tel_no`, `fax_no`, `email`, `password`, `gakkai`, `hp_url`, `sika_type`, `sonota`, `memo`, `fee_date`, `fee_initiation`, `fee_annual`, `admission_day`, `admission_fee`, `annual_day_2011`, `annual_fee_2011`, `annual_day_2012`, `annual_fee_2012`, `annual_day_2013`, `annual_fee_2013`, `annual_day_2014`, `annual_fee_2014`, `annual_day_2015`, `annual_fee_2015`, `annual_day_2016`, `annual_fee_2016`, `annual_day_2017`, `annual_fee_2017`, `annual_day_2018`, `annual_fee_2018`, `annual_day_2019`, `annual_fee_2019`, `annual_day_2020`, `annual_fee_2020`, `disp_flag`, `sika_name`, `stop_flag`, `activation_password`, `activation_date`, `stop_date` FROM `ada_sika_member` WHERE 1
ronron3311

2015/11/14 02:23

あまり知識がないまま、丁寧に接してくださってありがとうございます。 感謝の一言です、本当にありがとうございます。
ronron3311

2015/11/14 02:28

コメンとのタイムラグですれ違いがありますが、教えて頂いていたんですね。 URLの所に行き実行した結果を掲載いたします。 SELECT `id` , `simei` , `hiragana` , `zip_code` , `ken_id` , `ken_name` , `address` , `tatemono` , `syozoku` , `tel_no` , `fax_no` , `email` , `password` , `gakkai` , `hp_url` , `sika_type` , `sonota` , `memo` , `fee_date` , `fee_initiation` , `fee_annual` , `admission_day` , `admission_fee` , `annual_day_2011` , `annual_fee_2011` , `annual_day_2012` , `annual_fee_2012` , `annual_day_2013` , `annual_fee_2013` , `annual_day_2014` , `annual_fee_2014` , `annual_day_2015` , `annual_fee_2015` , `annual_day_2016` , `annual_fee_2016` , `annual_day_2017` , `annual_fee_2017` , `annual_day_2018` , `annual_fee_2018` , `annual_day_2019` , `annual_fee_2019` , `annual_day_2020` , `annual_fee_2020` , `disp_flag` , `sika_name` , `stop_flag` , `activation_password` , `activation_date` , `stop_date` FROM `ada_sika_member` WHERE 1 LIMIT 0 , 30
eripong

2015/11/14 02:31

これはテーブル定義ではありませんが、カラムはありそうですね。 初心者でいきなり管理を任されて、大変ですね。 phpのソースで、以下のような箇所はありませんか? $db->query($query) そのあたりのソースを見せていただけますか?
ronron3311

2015/11/14 03:13

ソースの「$db->query($query)」探しますので少しお時間を頂くかもしれません。 ライブラリーや色々な関連フォルダーが同じ場所にありますがソースを全部探します。 時間が掛かると思います、すみません。
eripong

2015/11/14 03:16

了解です。 hirohiroさんの言うように、 ronron3311さんが修正した箇所に問題がある可能性が高いので、 修正箇所も教えてもらえると分かるかも知れません。
eripong

2015/11/14 03:20

$db->query($query) ですが、$dbと$queryは変数なので、 実際とは異なる場合があります。 ->query( という文字列でgrepしてみると見つかるかもしれません。
ronron3311

2015/11/14 04:15

grepで検索かけています。あっという間に出てきました。(恥ずかしいですが機能を知りませんでした) libに入っているのが全体をコントローしているようなので「sika_member_class.php」 からこの周りの記入も含めてペーストします。 // オプションの設定 $options = array( 'portability' => MDB2_PORTABILITY_ALL, ); // 接続 $this->db =& MDB2::connect($dsn, $options); if (PEAR::isError($this->db)) { die($this->db->getMessage()); } // 初期化 $sql = 'set names utf8'; $res =& $this->db->query($sql); $this->db->setFetchMode(MDB2_FETCHMODE_ASSOC); }
eripong

2015/11/14 04:20

他にありませんか? 今提示していただいた箇所は、 set names utf8 している箇所なので、updateの箇所は、 他にあるはずです。
ronron3311

2015/11/14 04:28

それとまだ答えていませんでしたが、新たに加えたのは各ファイル共2015年の所をコピーして2017年に年数だけ書き換えているので、hirohiroさんの指摘が回答に近いような気がしますが、ここ2か月間毎日のように、カンマなどの間違い探していましたけど、まだ見つからず、どうにもならなくなってのヘルプのお願いでした。
eripong

2015/11/14 04:33

多くなければ、修正箇所を全て提示していただくのでも良いです。
ronron3311

2015/11/14 04:50

投稿を再度致します。 入金の所にありましたので、これかなと思たんですが・・・ if (empty($i_data['annual_day_2017'])) { $sql .= " annual_day_2017 = NULL,"; } else { $sql .= " annual_day_2017 = '" . addslashes($i_data['annual_day_2017']) . "',"; } $sql .= " annual_fee_2017 = '" . addslashes($i_data['annual_fee_2017']) . "'"; $sql .= " WHERE id = " . $i_data['id']; $res = $this->db->query($sql); if (PEAR::isError($res)) { print($sql); die($res->getMessage()); return 0; } return 1;
eripong

2015/11/14 04:55

それっぽいですね。 $sql .=の箇所ですが、2015、2016年分の箇所もありますか? おそらくこの直前と思います。
ronron3311

2015/11/14 05:00

自分が書き加えたところです if (empty($i_data['annual_day_2016'])) { $sql .= " annual_day_2016 = NULL,"; } else { $sql .= " annual_day_2016 = '" . addslashes($i_data['annual_day_2016']) . "',"; } $sql .= " annual_fee_2016 = '" . addslashes($i_data['annual_fee_2016']) . "'"; if (empty($i_data['annual_day_2017'])) { $sql .= " annual_day_2017 = NULL,"; } else { $sql .= " annual_day_2017 = '" . addslashes($i_data['annual_day_2017']) . "',"; } $sql .= " annual_fee_2017 = '" . addslashes($i_data['annual_fee_2017']) . "'"; ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ if (empty($i_data['annual_day_2016'])) { $sql .= " annual_day_2016 = NULL,"; } else { $sql .= " annual_day_2016 = '" . addslashes($i_data['annual_day_2016']) . "',"; } $sql .= " annual_fee_2016 = '" . addslashes($i_data['annual_fee_2016']) . "'"; if (empty($i_data['annual_day_2017'])) { $sql .= " annual_day_2017 = NULL,"; } else { $sql .= " annual_day_2017 = '" . addslashes($i_data['annual_day_2017']) . "',"; } $sql .= " annual_fee_2017 = '" . addslashes($i_data['annual_fee_2017']) . "'"; ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ $smarty->assign('annual_2016_year', substr($data['annual_day_2016'], 0, 4)); $smarty->assign('annual_2016_month', substr($data['annual_day_2016'], 5, 2)); $smarty->assign('annual_2016_day', substr($data['annual_day_2016'], 8, 2)); $smarty->assign('annual_fee_2016', $data['annual_fee_2016']); $smarty->assign('annual_2017_year', substr($data['annual_day_2017'], 0, 4)); $smarty->assign('annual_2017_month', substr($data['annual_day_2017'], 5, 2)); $smarty->assign('annual_2017_day', substr($data['annual_day_2017'], 8, 2)); $smarty->assign('annual_fee_2017', $data['annual_fee_2017']); ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ $in_annual_2016_year = $_REQUEST['annual_2016_year']; $in_annual_2016_month = $_REQUEST['annual_2016_month']; $in_annual_2016_day = $_REQUEST['annual_2016_day']; $in_annual_2017_year = $_REQUEST['annual_2017_year']; $in_annual_2017_month = $_REQUEST['annual_2017_month']; $in_annual_2017_day = $_REQUEST['annual_2017_day']; ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ if (empty($in_annual_2016_year)) { $data['annual_day_2016'] = ""; } else { $data['annual_day_2016'] = $in_annual_2016_year . "-" . $in_annual_2016_month . "-" . $in_annual_2016_day ; } $data['annual_fee_2016'] = $_REQUEST['annual_fee_2016']; if (empty($in_annual_2017_year)) { $data['annual_day_2017'] = ""; } else { $data['annual_day_2017'] = $in_annual_2017_year . "-" . $in_annual_2017_month . "-" . $in_annual_2017_day ; } $data['annual_fee_2017'] = $_REQUEST['annual_fee_2017'];
ronron3311

2015/11/14 05:04

$sql .=の箇所ですが、2015、2016年分の箇所もありますか? いえ、ありません。 その部分を貼り付けます。 if (empty($i_data['annual_day_2015'])) { $sql .= " annual_day_2015 = NULL,"; } else { $sql .= " annual_day_2015 = '" . addslashes($i_data['annual_day_2015']) . "',"; } $sql .= " annual_fee_2015 = '" . addslashes($i_data['annual_fee_2015']) . "'"; if (empty($i_data['annual_day_2016'])) { $sql .= " annual_day_2016 = NULL,"; } else { $sql .= " annual_day_2016 = '" . addslashes($i_data['annual_day_2016']) . "',"; } $sql .= " annual_fee_2016 = '" . addslashes($i_data['annual_fee_2016']) . "'"; if (empty($i_data['annual_day_2017'])) { $sql .= " annual_day_2017 = NULL,"; } else { $sql .= " annual_day_2017 = '" . addslashes($i_data['annual_day_2017']) . "',"; } $sql .= " annual_fee_2017 = '" . addslashes($i_data['annual_fee_2017']) . "'"; $sql .= " WHERE id = " . $i_data['id']; $res = $this->db->query($sql); if (PEAR::isError($res)) { print($sql); die($res->getMessage()); return 0; } return 1; }
eripong

2015/11/14 05:09

ああ、ここですね。 $sql .= " annual_fee_2015 = '" . addslashes($i_data['annual_fee_2015']) . "'"; のあと、 $sql .= " annual_day_2016 = '" . addslashes($i_data['annual_day_2016']) . "',"; が実行されると、annual_day_2016の前のカンマがないsqlになってしまいます。
eripong

2015/11/14 05:12

今後のことを考えると、直し方はronron3311さんが 自分で考えた方がよいかもしれません。 分からなければ、投稿します。
hirohiro

2015/11/14 05:13

横から失礼します。答えが出ましたね! 最後の項目に","を付けるとSQLエラーになるので、既存のコードは↓だったわけですね。 $sql .= " annual_fee_2015 = '" . addslashes($i_data['annual_fee_2015']) . "'"; 2014の同じ箇所は恐らくこうなっていることでしょう $sql .= " annual_fee_2014 = '" . addslashes($i_data['annual_fee_2014']) . "',"; 今回追加した最後の年が2017なのなら2016のにもカンマを入れないとエラーになると思います。 $sql .= " annual_fee_2016 = '" . addslashes($i_data['annual_fee_2016']) . "',";
ronron3311

2015/11/14 05:17

$sql .=の箇所ですが、2015、2016年分の箇所もありますか? とんちんかんな返事ですみません、sqlの部分は先にお答えした所を指していると思わなかったので、・・・ ここだと思っていました。 $sql .= " WHERE id = " . $i_data['id']; $res = $this->db->query($sql);
eripong

2015/11/14 05:18

ああ、そういうことですね。 結果的に見たいものが見れたので、大丈夫です。
ronron3311

2015/11/14 05:40

eripong様そしてhirohiro様、他の皆様方ありがとうございました。 ここまで原因探しをしてくださいまして、本当に感謝しております。 自分の為にも頂いたヒントを元に自分の力で治せるよう頑張りたいと思います。 色々なコメントにも即座に返事も出来ず、申し訳ない気持ちでいっぱいです。 こんな素人が解決できるようなものではないのに、落ち着いて対処されたことに尊敬の念をいだいています。 お陰様で私も慌てずに指示されたところを探すことが出来ました。 この後修正を始めます、多分今日夕方までには解決できそうな気がしています。 解決の報告の時間を少々頂きたいと思います。
ronron3311

2015/11/14 06:09

eripong様そしてhirohiro様 お二人の最後の助言で解決できました、そしてその理由も分かりました!! 特にeripong様 私がモタモタしてていてもじっと待って頂きまして、本当にありがとうございました。 私はボランティアで、ある医療機関の医療研究の方々の為にこのシステムの操作をしていました、本職は映像(3G含む)などで、教育用で医学生用に無償で提供をしたり、開業医の為の院内教育用のビデオ作成が主な仕事です、年齢は69歳です。 ボランティア参加の教授などが多く経費もそれほど持っていない団体で、年会費徴収など特に専任の事務員がいる訳ではなく途方に暮れていました。 それを解決していただいて本当にありがたく思います。 困っているのは「ベスト1」を皆様に出したいのですが、eripong様の落ち着いた指導が印象に残り私が慌てず対処できましたので、代表として差し上げたいと思います。 また、困った事がありましたらお願いすることもあると思いますが、皆様がいつまでも元気でいられるよう願っています。
eripong

2015/11/14 06:19

なるほど、そういう事情だったのですね。 本職と離れた作業は、大変ですね。 解決して、良かったです。 こちらが質問したことに、そのまま答えていただけたので、 こちらとしてもやりやすかったです。 また、他のこともしながらなので、待っていた、というほどではありません。
eripong

2015/11/14 06:28

> ronron3311様 最終結果を回答に追記したので、確認していただけますか? 特に、どう修正したのか、こちらで勝手に書いたので、違っていれば 指摘していただきたいです。
ronron3311

2015/11/14 09:59

eripong様の指摘はピンポイントで、指摘はあっていました。 eripong様の指摘の部分を修正しました。 $sql .= " annual_fee_2015 = '" . addslashes($i_data['annual_fee_2015']) . "'"; $sql .= " annual_day_2016 = '" . addslashes($i_data['annual_day_2016']) . "',"; 閉じる部分をそのままコピーしていたので、2015年の書き込みまでしか受け付けられない状況になっていました。 2015年  . "'"; 2016年  . "',"; それに、助言と併せて違いを掲載していただいたので、すぐ気が付きました。 . "'"; と  . "',"; が問題と思い、閉じる部分を削除して2014年の書式と比較したら、すぐ理解できました。 それで、カンマの部分を入れ替えたら即座に2015年以降の追加記入が活きかえりました。 担当が退職してヘルプを受けられなかったのはしょうががありませんが、担当者の知識を上回る回答を得ましたので、今後の自分のスキルアップにつながったと思っております。
eripong

2015/11/14 10:07

確認ありがとうございます。 きちんと理解して修正された様で、良かったです。
ronron3311

2015/11/14 10:20

感謝以外発する言葉がありません。 この件は私だけでなく数百人がeripong様始め皆様の助言により恩恵を受けました。 ありがとうございました。
guest

0

なかなかすさまじいテーブル設計ですね。2021年には今以上の困難に立ち向かうことになりそうです。
ところでエラーの原因はeripongさんのおっしゃるように、PHPが生成したSQL文にカンマが抜けがあるためでしょう。恐らくronron3311さんが追加されたコードに問題があると思います。
eripongさんとのコメント対話で提示されているPHPコードは$dataを作成している部分ですね
この$dataを使ってUPDATEのSQLを生成している部分があるはずなんですが、そこに問題があると思われます。
追加して問題が出たとすれば恐らくループを使った生成でもないでしょうから
annual_day_2016 = '".$data['annual_day_2016']."'"
こんな感じのコードをどこかに追加したんじゃないでしょうか?
その際にカンマを付けたし忘れていると思いますので、付近のコードが提示されれば、患部を特定できる可能性が高いと思います。

投稿2015/11/14 02:50

hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ronron3311

2015/11/14 02:59

hirohiro様 コメントありがとうございます、実力が無くても仕事としてやらざるを得なくて困っているところを、皆様の優しく道を探して下さる事にまず、感謝いたします。 '".$data['annual_day_2016']."'" ⇒私が追加した時に十分考えられる原因と確かに思います。 ヒントをありがとうございます。 ソースを調べなおします。 また、これからもっと勉強をして作り変えられるよう努力したいと思います。 ありがとうございます。
guest

0

そもそも書き込もうとしているDBの定義に問題ありませんか?
Update文を見る限り適当に作ったDBっぽく見えますが..
2016年分に絡むカラムがなかったり

投稿2015/11/14 01:18

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2015/11/14 01:22

確かに正規化に問題がある設計ですね。 テーブルに annual_day_2016, annual_fee_2016 って列は追加したのでしょうか? 元質問者はcreate table文も提示されては?
ronron3311

2015/11/14 01:33

Orlofsky様 annual_fee_2016テーブルはsmartyのtemplatesで作成しております。 create table文の存在が分かりませんでしたので、tmplateの2015年の部分を掲載しますが、的外れでしょうか? if (frm.annual_2015_year.value == "" && frm.annual_2015_month.value == "" && frm.annual_2015_day.value == "") { // 2015年入金日が空白の場合は、日付チェックしない } else { if ((frm.annual_2015_year.value == "" || frm.annual_2015_month.value == "" || frm.annual_2015_day.value == "") || (checkDate(frm.annual_2015_year.value, frm.annual_2015_month.value, frm.annual_2015_day.value) == false)) { alert("2015年入金日が誤っています。"); frm.annual_2015_year.focus(); return false; } }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問