お世話になります。
データ更新用のPHPプログラムを作成中なのですが
更新テストをするとデータが消えてしまいました
どこをどのように修正すればいいでしょうか?
一部抜粋したPHPプログラムですが、ご教示いただければ幸いに存じます。<(_ _)>
<?php
require 'define.php';
$msg = " ";
$mode = ($_GET['mode'] == "" ? $_POST['mode'] : $_GET['mode']);
$shop_cd = ($_GET['shop_cd'] == "" ? $_POST['shop_cd'] : $_GET['shop_cd']);
// DB接続
if (!($cn = mysqli_connect(DBHOST,DBUSER,DBPASSWORD,DBNAME)
)) {
$msg = "DB接続不可"; exit; // DB接続不可
}
$cn -> set_charset('utf8');
if ($mode == "mode") {
$temp_flg = ($_GET['temp_flg'] == "" ? $_POST['temp_flg'] : $_GET['temp_flg']);
$receipt_no= ($_GET['receipt_no'] == "" ? $_POST['receipt_no'] : $_GET['receipt_no']);
$shop_cd = ($_GET['shop_cd'] == "" ? $_POST['shop_cd'] : $_GET['shop_cd']);
$reg_date = ($_GET['reg_date'] == "" ? $_POST['reg_date'] : $_GET['reg_date']);
$upd_date = ($_GET['upd_date'] == "" ? $_POST['upd_date'] : $_GET['upd_date']);
$gl_tblname = TENPO_TBL;
$sql = "delete from " . $gl_tblname . " where shop_cd = '" . $shop_cd . "' ";
$rs = mysqli_query($cn, $sql) or die("Could not delete =[" . $sql . "]\n");
$sql = "insert into " . TENPO_TBL . " values (";
if ($temp_flg == 1) $sql .= "1, ";
else $sql .= "0, ";
$sql .= $receipt_no . ", ";
$sql .= "'" . $shop_cd . "', ";
$sql .= "now(), "; // 登録日時
$sql .= "now() "; // 更新日時
$sql .= ')';
if (!($rs = mysqli_query($cn, $sql))) {mysqli_close($cn); $msg = "insert 不可"; exit;}
$msg = "変更しました! 必ずプレビューで確認してください。";
} else {
$sql = "select * from " . TENPO_TBL . " where shop_cd = '" . $shop_cd . "' ";
$rs = mysqli_query($cn, $sql);
$row = mysqli_fetch_assoc($rs);
$temp_flg = $row['temp_flg'];
$receipt_no = $row['receipt_no'];
$shop_cd = $row['shop_cd'];
$reg_date = $row['reg_date'];
$upd_date = $row['upd_date'];
}
// DB切断
mysqli_close($cn);
?>
No.2ベストアンサー
- 回答日時:
とりあえず変数の設定はこう
$list=["mode","shop_cd","temp_flg","receipt_no","shop_cd","reg_date","upd_date"];
foreach($list as $val){
$$val = filter_input(INPUT_GET,$val)?:filter_input(INPUT_POST,$val);
}
その上で、変数をSQL文に直接埋め込むのはNG
prepareで処理して下さい
またdeleteしてinsertする意味はないのでは?
insert into on duplocate key updateコマンドを利用してはどうでしょうか?
ご教示ありがとうございました。
確かに deleteしてinsertする方法でした。
ご教示通り修正したところ
うまく動きましたありがとうございました。<(_ _)>
No.1
- 回答日時:
PHPが、、、というWebアプリケーションのプログラミング言語の視点でお考えになる前に、「データベースのテーブルのあるレコードのある項目の値を更新しようとしたところ、更新対象のレコードが削除された」といった視点で物事をとらえましょう。
つまり「リレーショナルデータベースのMySQLのあるテーブルに対してこのようなSQLを発行したところ・・・」と考えられることです。
試験中のプログラムはどのようなSQLを生成しましたか?
それが分からない場合はMySQLに対してそのSQL文を発行する直前にSQL文をダンプする(テキストファイルに書き出すのでもよいし、画面表示でもよい)コードを入れましょう。
そういうコードをデバッグ用サブルーチンとして事前に作って置けば試験などで問題が出た際のロジック調査で役立ちます。
参考まで。
ご教示ありがとうございます。
すでにデータもあり更新プログラムがあったのですが
Postgress用だったので MySQLに変更を試みています。
エラーログを見たところ
PHP Notice: Undefined index: upd_date、、、などはあります。
ただ、Warningは出ていません。
どこの記述に問題があるのかが特定できていない状態です。<(_ _)>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- JavaScript gasについて 1 2022/05/31 21:51
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【PL/SQL】DATE型の時刻の表示...
-
日替わりメッセージを表示させ...
-
EXCELマクロのSQL文での引用符...
-
PHP+MySQLで月ごとの数量を表...
-
SQLローダーCSV取込で、囲み文...
-
select文の実行結果に空白行を...
-
Oracleで「文字が無効です」の...
-
複数のテーブルから値を合計出...
-
単一グループのグループ関数で...
-
group byの並び順を変えるだけ...
-
count関数の値をwhere句で使用...
-
【PL/SQL】FROM区に変数を使う方法
-
テーブルの最後(最新)のレコー...
-
SELECTした合計値をそのまま割...
-
AccessのSQL文で1件のみヒット...
-
SELECT FOR UPDATE で該当レコ...
-
2つの列が同じ値の行を取得するSQL
-
BLOB型項目をSQLの検索条件に指...
-
where句中のtrim関数について
-
「数字で始まらない」ものを抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP+MySQLで月ごとの数量を表...
-
【PL/SQL】DATE型の時刻の表示...
-
PHPとMysqlを使用した集計表の...
-
データ更新用のphpの記述でデー...
-
PHPでMySQL内のデータの合計値...
-
postgresのカレンダーについて
-
EXCELマクロのSQL文での引用符...
-
日替わりメッセージを表示させ...
-
bash内のaws cli cloudwatch Lo...
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
select文の実行結果に空白行を...
-
テーブルの最後(最新)のレコー...
-
count関数の値をwhere句で使用...
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
2つの列が同じ値の行を取得するSQL
-
レコードの登録順がおかしい
-
<SQL>重複しているデータの場合...
-
AccessのSQL文で1件のみヒット...
おすすめ情報