プロが教えるわが家の防犯対策術!

現在、テキスト入力欄とセレクトボックスが1行でそれが300行くらいあるウェブページがあります。
現在の仕様は入力や選択があればその都度データベースの更新が自動でなされる仕様です。
しかし、いちいち更新していては時間がかかり過ぎるので複数行変更して最後にボタンを一度押せば
一括で更新出来るようにしたいのですが可能でしょうか?当方、素人につき厚かましいですがここを
こう変更するという感じで実際のプログラムをご指導いただけると非常に助かります。
それでは宜しくお願いいたします。m(_ _)m

MySQL5.1テーブル名zaiko zaiko.html zaiko.php controller-zaiko.js の構成です。以下現在の仕様です。

〇●〇zaikoテーブルの構成〇●〇
名前 データ型 照合順序
 1 id varchar(9) utf8_unicode_ci
 2 name varchar(100) utf8_unicode_ci
 3 nouki text utf8_unicode_ci
 4 date text utf8_unicode_ci
 5 item text utf8_unicode_ci
 6 time timestamp  on update

〇●〇zaiko.html〇●〇
<!doctype html>
<html lang="ja" ng-app="app">
<head>
<title>在庫</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
</head>
<body ng-controller="MainCtrl" onload="zaiko()">
<table>
<tr ng-controller="DetailCtrl" ng-repeat="zaiko in zaiko">
<td class="left"><input class="input" ng-model="zaiko.name" ng-change="update()"></td>
<td class="right"><select class="selectbox" ng-model="zaiko.nouki" ng-change="update()">
<option value="5">5</option>
<option value="4">4</option>
<option value="3">3</option>
<option value="2">2</option>
<option value="1">1</option>
</select>
</td>
</tr>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/ …
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/ …
<script src="controller-zaiko.js"></script>
</body>
</html>

〇●〇zaiko.php〇●〇
<?php
$pdo = new PDO('mysql:dbname=db001', 'user', 'pass');

switch ($_SERVER['REQUEST_METHOD']) {
case 'GET':
$st = $pdo->query("SELECT * FROM zaiko ORDER BY id ASC");
echo json_encode($st->fetchAll(PDO::FETCH_ASSOC));
break;

case 'POST':
$in = json_decode(file_get_contents('php://input'), true);
if (isset($in['id'])) {
$st = $pdo->prepare("UPDATE zaiko SET date=:date,item=:item,name=:name,nouki=:nouki,time=:time WHERE id=:id");
} else {
$st = $pdo->prepare("INSERT INTO zaiko(date,item,name,nouki) VALUES(:date,:item,:name,:nouki)");
}
$st->execute($in);
break;
}

〇●〇controller-zaiko.js〇●〇
var app = angular.module('app', ['ngResource']);

app.controller('MainCtrl', function($scope, $resource, $window) {
var zaiko = $resource('zaiko.php', {id: '@id'});

$scope.zaiko = zaiko.query();

$scope.add = function() {
zaiko.save($scope.new_zaiko, function() {
<!--alert("追加しました。");-->
$window.location.reload();
});
};

$scope.koshin = function() {
zaiko.save($scope.new_zaiko, function() {
alert("更新しました。");
$window.location.reload();
});
};
});

app.controller('DetailCtrl', function($scope, $window) {

$scope.update = function() {
$scope.zaiko.$save(function() {
alert("更新しました。");
$window.location.reload();
$.keepPosition.reload();
});
};

$scope.delete = function() {
$scope.zaiko.$save(function() {
alert("削除しました。");
$window.location.reload();
});
};
});

A 回答 (2件)

追伸です。



質問のシステムはたぶん、インターネットに公開しないのシステムと思えるのでいいのですが、外部からアクセスできるWebシステムの場合、セキュリティを重視して作成しないと、サイトが攻撃されてしまいます。

そして、クロスサイトスクリプティング(CSS)やクロスサイトリクエストフォージュリ(CSRF)などにたいする脆弱性対策をきちんとWebシステムに作りこむのは、コーディングが増えて大変な作業になります。
(だから、サイトがサイバー攻撃を受けても、コード修正による対策は困難な作業になりがちです)

そういうセキュリティ面からも、ASP.NET MVC などのフレームワークを使って、サイト構築すれば、自動生成されたコードにセキュリティ対策のコードが埋め込まれたりするので、お勧めです。

C#ではなく、PHPでも同様なフレームワークがあれば、それを選ばれてもいいかもしれません。
    • good
    • 0
この回答へのお礼

この度はありがとうございました。また宜しくお願いいたします。

お礼日時:2017/05/17 11:59

>>しかし、いちいち更新していては時間がかかり過ぎるので複数行変更して最後にボタンを一度押せば


一括で更新出来るようにしたいのですが可能でしょうか?

やりたいことを行うプログラムを作れば可能だと思います。

たとえば

1)1つの画面で複数行のデータを一度に更新するには、1つのデータに対応して、画面のテキストボックス等を1つ対応させて入力する。
1画面で20データの表示なら、20組のデータが画面に表示されることになる。

2)更新ボタンを押すと、サーバ側では、受け取った画面のデータ(たとえば20組データ)を順番に処理し、データベース更新処理を行う。

普通にコーディングすると、コーディング量がかなり増えて大変になるかもしれません。


ただし、適切なフレームワークを使うことにより、コーディング量は大きく削減されます。
例えば、マイクロソフトのASP.NET MVCを使い、C#で開発すれば、クライアント側も、サーバ側も、複数明細行の更新処理が簡単にできるようです。
さらに、ASP.NET MVCは「エコシステム」の考え方で開発されているので、サーバ側のC#のコードを修正すると、それに連動するクライアント側のJavaScriptのコードが自動的に修正されたりして、とても楽です。

ただ、フレームワークの勉強しないと使いこなせませんが・・・。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。「ASP.NET MVC」確認してみます。ありがとうございました。

お礼日時:2017/05/01 15:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!