下記のような経歴登録フォームがあったとします。
「業務経歴を追加する」を押すと同じフォームが生成されます。
このページでは、入力するだけのページを想定して作っていたのですが、
登録するボタンを押すとそのままDBへ格納するSQL文が走ります。
しかし、
登録(INSERT)も更新(UPDATE)もこの1つのページでしてくれと言われているのですが
どうすればそれができるでしょうか?
更新ということは、DBから情報を取り出して、
このフォームのvalueにその情報を渡して再現できると思うのですが、
もともと、入力するだけのページを想定して作っていたので、
登録するを押すと、以前入力した情報と同じ内容が登録されてしまいます。(更新ではない)
1つのページで登録も更新もするにはどうしたらよろしいのでしょうか?
個人的には登録ページと更新ページは分けた方がいいのかなとは思うんですが...
マイナビ転職サイトの更新ページを参考にしているんですが
例えば、自己PRには私が以前入力したものが表示されています。
この自己PRをちょっと変更して「変更内容を保存する」を押すと多分ですが、
UPDATEのSQLが走ってると思います。
でも、志望動機に関してはまだ何も入力したことがないので、
何か入力して「変更内容を保存する」を押すと多分ですが、
INSERTのSQLが走ってると思います。
そこがどういうロジックになってるのかが分からないのです...
パッと思いついたのが
単純にDBの内容を取得してemptyとかで判定して
なければINSERT
あればUPDATE
なんですが、こういう風にしているだけなのでしょうか?
宜しくお願いします。
追記
回答ありがとうございます。
ON DUPLICATE KEY UPDATEを使ってテストしているのですが、
これを実行すると上から2行目がテスト1に変わることは分かりました。
$sql = "INSERT INTO user_vitae( user_id, projectTitle, projectsContents ) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE user_id = ?, projectTitle = ?, projectsContents = ? "; for($i=0;$i<count($_POST['projectTitle']);$i++) { $stmt = $this->pdo->prepare($sql); $stmt->execute([ $_SESSION['id'], $_POST['projectTitle'][$i], $_POST['projectsContents'][$i], $_SESSION['id'], $_POST['projectTitle'][$i], $_POST['projectsContents'][$i] ]);
しかし、案件名をUNIQUEにしているので、例えば
「test1」登録しておいて、
案件名を「test2」に変えたいなぁ~ってなったら、
更新ではなく新規登録になってしまいます。
これはどう防げばよいのでしょうか?
入力を必要としないカラムはこうなってます...
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/11 00:30
2016/07/11 01:08