変更した箇所は・・・
controller.js
は変更していません。
sql
CREATE TABLE students( id SERIAL PRIMARY KEY, name VARCHAR(255), age INT, comment TEXT );
CREATE TABLE students( id SERIAL PRIMARY KEY, name VARCHAR(255), age INT, comment TEXT, com1 TEXT );
<body ng-controller="MainCtrl"> <table border="1"> <tr><th>ID</th><th>名前</th><th>年齢</th><th>コメント</th></tr> <tr ng-controller="DetailCtrl" ng-repeat="student in students"> <td>{{student.id}}</td> <td><input ng-model="student.name"></td> <td><input ng-model="student.age"></td> <td><input ng-model="student.comment"></td> <td><button ng-click="update()">更新</button></td> <td><button ng-click="delete($index)">削除</button></td> </tr> </table> <button ng-click="add()">追加</button> </body>
上記を以下へ
<body ng-controller="MainCtrl"> <table border="1"> <tr><th>ID</th><th>名前</th><th>年齢</th><th>コメント</th><th>com1</th></tr> <tr ng-controller="DetailCtrl" ng-repeat="student in students"> <td>{{student.id}}</td> <td><input ng-model="student.name"></td> <td><input ng-model="student.age"></td> <td><input ng-model="student.comment"></td> <td><input ng-model="student.com1"></td> <!--追加--> <td><button ng-click="update()">更新</button></td> <td><button ng-click="delete($index)">削除</button></td> </tr> </table> <button ng-click="add()">追加</button> </body>
students.php
case 'PUT': // update $in = json_decode(file_get_contents('php://input'), true); $st = $pdo->prepare("UPDATE students SET name=:name,age=:age,comment=:comment WHERE id=:id"); @$st->execute($in); break;
case 'PUT': // update $in = json_decode(file_get_contents('php://input'), true); $st = $pdo->prepare("UPDATE students SET name=:name,age=:age,comment=:comment,com1=:com1 WHERE id=:id"); @$st->execute($in); break;
テーブルは一度ドロップしてからクリエイトしましたか?
更新だけがうまく行かない理由は、SQLのUPDATEだけが項目名を明示して実行しているからでしょうか。
それはさておき、プログラムに間違いは見当たらない様に思えます。
思うに、更新処理でcom1以外の項目は更新されるなら、キャッシュが生きていて新しいstudents.phpが読み込まれていないのではないでしょうか。
その場合、一度、students.phpの名前をstudents01.phpとかに変えて、controller.jsを
var Student = $resource('students01.php', {}, {
としてみては如何でしょうか。
更新処理全体が実行されていないなら、また考えなくてはなりませんね。。。
▽3
●
Lhankor_Mhy ●50ポイント ベストアンサー |
PHPはよく分からないのですが。
DBにcom2というフィールドがありますか?
「更新」を押すとPUTリクエストにcom2がnull値が送られますが、「追加」→「更新」だとcom2が送られていないようです。
ということで、↓これが原因では。
内容がNULLであればIS NULLとしたいのですが、 PDO::ATTR_EMULATE_PREPARES を false にしている関係上 prepareの段階でエラーになってしまいます。
PDO mysqlでWHEREのプレースホルダにNULLをセットしたい - PHPプロ!Q&A掲示板