こんばんわ、中の人デス。
さて引き続きモデルについてやっていきませう。
もでるというかぶっちゃけDBだろ。
_,,....,,_ _人人人人人人人人人人人人人人人_
-''":::::::::::::`''> ゆっくりしていってね!!! <
ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
|::::::;ノ´ ̄\:::::::::::\_,. -‐ァ __ _____ ______
|::::ノ ヽ、ヽr-r'"´ (.__ ,´ _,, '-´ ̄ ̄`-ゝ 、_ イ、
_,.!イ_ _,.ヘーァ'二ハ二ヽ、へ,_7 'r ´ ヽ、ン、
::::::rー''7コ-‐'"´ ; ', `ヽ/`7 ,'==─- -─==', i
r-'ァ'"´/ /! ハ ハ ! iヾ_ノ i イ iゝ、イ人レ/_ルヽイ i |
!イ´ ,' | /__,.!/ V 、!__ハ ,' ,ゝ レリイi (ヒ_] ヒ_ン ).| .|、i .||
`! !/レi' (ヒ_] ヒ_ン レ'i ノ !Y!"" ,___, "" 「 !ノ i |
,' ノ !'" ,___, "' i .レ' L.',. ヽ _ン L」 ノ| .|
( ,ハ ヽ _ン 人! | ||ヽ、 ,イ| ||イ| /
,.ヘ,)、 )>,、 _____, ,.イ ハ レ ル` ー--─ ´ルレ レ´
今回はレコードの更新。
まずは行進用…更新用のビューを用意。
ファイル名「edit.php」をビューに用意します。もち『views』フォルダのことね。
|l、{ j} /,,ィ//| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
i|:!ヾ、_ノ/ u {:}//ヘ | あ…ありのまま 今 起こった事を話すぜ!
|リ u' } ,ノ _,!V,ハ | < 『おれは更新用のビューと打ったと
fト、_{ル{,ィ'eラ , タ人. | 思ったら行進用に摩り替わっていた』
ヾ|宀| {´,)⌒`/ |<ヽトiゝ | 催眠術だとか超スピードだとか
ヽ iLレ u' | | ヾlトハ〉. | そんなチャチなもんじゃあ 断じてねえ
ハ !ニ⊇ '/:} V:::::ヽ. │ もっと恐ろしいものの片鱗を味わったぜ…
/:::丶'T'' /u' __ /:::::::/`ヽ \____________________
スタープラチガが通過したようです。
edit.php
<h1>Blogの編集</h1>
<p>記事を修正してください</p>
<form method="post" action="/igniterapp/helo/update">
<input type="hidden" name="id" value="<?=$record->id ?>">
<input type="hidden" name="timestamp" value="<?=$record->timestamp ?>">
<table>
<tr>
<th>TITLE</th>
<td><input type="text" name="title" size="60" value="<?=$record->title ?>"></td>
</tr>
<tr>
<th>CONTENT</th>
<td><textarea name="content" cols="40" rows="3"><?=$record->content ?></textarea></td>
</tr>
<tr>
<th></th>
<td><input type="submit"></td>
</tr>
</table>
</form>
ここでは2つの非表示フォーム(hidden)と2つのフォーム(編集用)が用意されています。
それぞれを用いて、id,timestamp,title,contentの値をを保管します。
送信先は/igniterapp/helo/update。
エディットにアクセスしてクエリ送信をすると、updateに処理が渡される仕組みです。
それではコントローラーに核となる『edit』と『update』メソッドを追加しませう。
まずはDBからデータを奪って(!?)エディトフォームに出力させるところ。
とりあえず『controller』フォルダのhelo.phpに「edit」メソッドを追加しやう。
helo.php
function edit($id = null){
$data = array('head_title'=>'EDIT BLOG','content'=>'edit');
$query = $this->db->get_where('blogs',array('id' => $id));
$data['record'] = $query->row();
$this->load->view('layout/mylayout',$data);
}
これで指定したIDの記事の編集画面が表示されるようになる。(まだ完成ではない)
http://localhost/helo/edit/ 記事ID(記事IDはhttp://localhost/helo/ で調べておこう。記事Noのないのを指定するとエラー。)
例。記事No2を指定した場合。(http://localhost/igniterapp/helo/edit/2 )
ここまででとりあえずデータ取り出し。編集用にフォームに出力まででけたので、次は更新するメソッドの追加。
helo.php末尾に次のようにメソッド追加。
helo.php
function update(){
if($this->input->post('title') != null){
$data = array(
'timestamp' => $this->input->post('timestamp',true),
'title' => $this->input->post('title',true),
'content' => $this->input->post('content',true)
);
$this->db->where('id',$this->input->post('id',true));
$this->db->update('blogs',$data);
}
redirect(base_url().'helo/index');
}
フォームからのpostデータを受け取り、dbのupdateで更新していますYO。
(´・ω・)本当かいな というわけで動かしてみる。
実験台はこいつだ!(゚∀゚)アヒャヒャ(ぇ
これの内容を編集…
このブログを書き始めてから口癖が『困る』に変化するから困る。
クエリボタン押下後。ID2の内容を↑のほうの「記事全体」と見比べていただければわかるかと。
(゚∀゚)とりあえずこれで編集もできるようになりますた。不完全ですが。
解説~。
helo.php
function edit($id = null){
$data = array('head_title'=>'EDIT BLOG','content'=>'edit');
$query = $this->db->get_where('blogs',array('id' => $id));
$data['record'] = $query->row();
$this->load->view('layout/mylayout',$data);
}
($id = null)$idの初期化ぶっちゃけなくても変わんないじゃね?と思って取っ払うと差異が発生。
差異は次の通り。ブラウザはIE7です。
⇒** /edit/1 でID1の記事編集。クエリ押下で一覧へととび入力内容が更新される。問題はここから。
再度ブラウザのアドレス欄で**/edit/1と入力するとクッキーの影響か編集前の状態のデータがフォームに入っている。その状態でF5キーで更新かけると分岐発生。
($id = null)→更新すると更新された一覧のほうのデータに更新される(つまりフォームに表示される編集内容が編集前⇒編集後・一覧表示のと同一内容に更新される。)
()→更新するとエラー発生。んなIDねぇYO!!的な(多分)エラー発生。
恐らくCodeigniterではメソッド側で(GET形式で扱いたい変数名 = null)と初期化することでGET形式での値を変数で受け取れる模様。前にコードイグナイターはGET形式のデータは受け取れない云々の説明はしたと思うが、これはそのGET系の設定の書き換えなしで使える裏技?的なGET値の受け取り。
試しに
function edit($hoge = null){
$data = array('head_title'=>'EDIT BLOG','content'=>'edit');
$query = $this->db->get_where('blogs',array('id' => $hoge));
$data['record'] = $query->row();
$this->load->view('layout/mylayout',$data);
}
でやってみたところ変わらずに動く。
しかし暑い…。
,;r''"~ ̄^'ヽ,
./ ;ヽ 暑い季節は皆真夏だ!
l _,,,,,,,,_,;;;;i
l l''|~___;;、_y__ lミ;l 逃げないやつはよく訓練された真夏だ!
゙l;| | `'",;_,i`'"|;i |
,r''i ヽ, '~rーj`c=/ ホント 温暖化は地獄だぜ!フゥハハハーハァー
,/ ヽ ヽ`ー"/:: `ヽ
/ ゙ヽ  ̄、::::: ゙l,
|;/"⌒ヽ, \ ヽ: _l_ ri ri
l l ヽr‐─ヽ_|_⊂////;`ゞ--―─-r| | / |
゙l゙l, l,|`゙゙゙''―ll___l,,l,|,iノ二二二二│`""""""""""""|二;;二二;;二二二i≡三l
| ヽ ヽ _|_ _ "l ̄ ̄ ̄ ̄ ̄ ̄ |二;;二二;;二=''''''''''' ̄ノ
/"ヽ 'j_/ヽヽ, ̄ ,,,/"''''''''''''⊃r‐l'二二二T ̄ ̄ ̄ [i゙''''''''''''''''"゙゙゙ ̄`"
/ ヽ ー──''''''""(;;) `゙,j" | | |
_,,,,,,,,,ヽ、 ,,,,,r-'''''ーー'''| | | |
''" ヽ,,___,,,r‐''''''二__ |__| | |
\'''" / ノ | |
フゥハハハーハァー。
$query = $this->db->get_where('blogs',array('id' => $id));
部分は説明せずともわかるだろーけどSQL文で$idと合致するレコードを呼び出しています。
$変数 = $this->db->get_where(テーブル,検索条件の連想配列);
上記の場合where 'id' = {$id} という文が生成されることになります。暑い…(´Д`;)
$data['record'] = $query->row();
上記はクエリ結果をレコードの連想配列に格納しています。こうすることで、ビューで<?=$record->**のように値を使いまわすことができたわけですね。
次にupdateの部分。
helo.php
function update(){
if($this->input->post('title') != null){
$data = array(
'timestamp' => $this->input->post('timestamp',true),
'title' => $this->input->post('title',true),
'content' => $this->input->post('content',true)
);
$this->db->where('id',$this->input->post('id',true));
$this->db->update('blogs',$data);
}
redirect(base_url().'helo/index');
}
もしpostされてくるtitleが空でなければ処理を開始。つまるところ普通にブラウザで表示する際には勝手にアップデートは実行されない、というところです。
とりあえずアップデートの対象はタイムスタンプとタイトル、コンテンツだけなのでそれらを$dataへ格納します。
IDはアップデートしないのかよ!!(三村風に)とか言われそうですが「IDアップデートしてどうするんだよ!(三村風に)」で返しておきます。つか、IDアップデートしちゃだめだろ。常考。
で。書き換える内容はすでに$dataに渡されているので、後は書き換えるレコードの特定と、実際に書き換える部分だけっす。で、レコード特定は次の通り。
$this->db->where('id',$this->input->post('id',true));
これでidが書き換えられる対象のidのレコードへ。
__O)二)))(・ω・`)
0二━━ )____)┐ノヽ
A ||ミ|\ くく
__O)二)))(´・ω・`)
0二━━ )____)┐ノヽ
A ||ミ|\ くく
.○ω・`)ロックオン!
(●)┐ノ)
A くく
$dbオブジェクトのwhereメソッドを呼んで、条件を$dbオブジェクトに設定する働きだけします。
あとはupdate('テーブル',レコードの内容配列)でアップデート完了。
(゚д゚)…つぎは削除。
,.=-''' ̄ ̄ ̄ ̄ ̄ ̄` -、
/ \
./ .\
{ }
.| / ̄""''-=,,,,_,,,,,,==-'''"\ |
.l, .( ,. - ' .、 ,. - , .} |
l > ,=ニ\ ゛ | ''゛_,=ヘ、 r' {_
/~''i //_\_..`7| l、{''″/__`>ヽ |r`i
l .{`|./ ヽ二・ニゝチ、 ! .ゝrニ・二r } ! i l
{ {(l { ノ | | ヽ :: }| ソ/ 把握した
ヽヽ|.{ / | | \ i.|//
\|.i / ,,.. | l._,, . \ i !/
乂i / - (__,)-゛ ' {丿
.l .!、. ,. !., ., / |
人 \ .!''''" ̄~ ̄`''! / 人
./ | .\ ,\ '-"" ゛-' / / | .ヽ
ノ .{ \ .ヽ,., .: ,イ / } ヽ
-'″ l `' 、`.───″ .} ヽ
(((´Д`;)))
まずは『vews』フォルダにdel.phpを用意します。
del.php
<h1>Blog削除</h1>
<p>削除するIDを記入してください。</p>
<form method="post" action="/igniterapp/helo/delete">
<table>
<tr>
<th>ID</th>
<td><input type="text" name="id" size="20"></td>
<td><input type="submit"></td>
</tr>
</table>
</form>
で、当然コントローラーにも削除用メソッドを追加しませう。
helo.php
function del(){
$data = array('head_title'=>'DELETE BLOG','content'=>'del');
$this->load->view('layout/mylayout',$data);
}
function delete(){
if($this->input->post('id') !=null){
$this->db->where('id',$this->input->post('id',true));
$this->db->delete('blogs');
}
redirect(base_url().'helo/index');
}
前半のdelメソッドはデリート用画面をビューで出す部分だーね。
deleteメソッドこそが黒幕(違
もしidがpostされてきたら処理開始。postされてこなかったらなんもしない。放置プレイ。
アップデート同様まずはidでレコードをロックオン。
.○ω・`)ロックオン!
(●)┐ノ)
A くく
んでdelete('テーブル名')でロックオンされているレコードを削除。
うはwww簡単www簡潔すぐるだろ…常考。
ちなみにwhereを忘れると
,,-' _,,-''" "''- ,,_  ̄"''-,,__ ''--,,__
,,-''" ,, --''"ニ_―- _ ''-,,_ ゞ "-
て / ,,-",-''i|  ̄|i''-、 ヾ {
(" ./ i {;;;;;;;i| |i;;;;;;) ,ノ ii
,, ( l, `'-i| |i;;-' ,,-'" _,,-"
"'-,, `-,,,,-'--''::: ̄:::::::''ニ;;-==,_____ '" _,,--''"
 ̄"''-- _-'':::::" ̄::::::::::::::::;;;;----;;;;;;;;::::`::"''::---,,_ __,,-''"
._,,-'ニ-''ニ--''" ̄.i| ̄ |i-----,, ̄`"''-;;::''-`-,,
,,-''::::二-''" .--i| .|i "- ;;:::`、
._,-"::::/  ̄"''--- i| |i ヽ::::i
.(:::::{:(i(____ i| .|i _,,-':/:::}
`''-,_ヽ:::::''- ,,__,,,, _______i| .|i--__,,----..--'''":::::ノ,,-'
"--;;;;;;;;;;;;;;;;;""''--;;i| .|i二;;;;;::---;;;;;;;::--''"~
 ̄ ̄"..i| .|i
.i| |i
i| |i
.i| .|i
i| .|i
.i| |i
.i| ,,-、 、 |i
i| ノ::::i:::トiヽ、_.|i
_,, i|/"ヽ/:iヽ!::::::::ノ:::::Λ::::ヽ|i__n、ト、
,,/^ヽ,-''":::i/::::::::/:::::|i/;;;;;;/::::;;;;ノ⌒ヽノ::::::::::::ヽ,_Λ
;;;;;;:::::;;;;;;;;;;:::::;;;;;;;;:::/;;;;;;:::::::::;;;;;;/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::;;:;;;;:::ヽ
┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨・・・
ってなるので注意。レコード全破壊してしまうぉ!
毎回思うけど、フレームワークの記述は簡潔すぐる。
ヽ j .す
簡. ゙, l. ご
潔 ! ', く
で ', ', :
す ト-、,,_ l
: ! `ヽ、 ヽ、 _
; / ヽ、`゙γ'´
/ \
! ト, ヽ
ヽ__ ___ノ ,! | | ト, ゙、
レ'゙ ,イ ./|! .リ | リ ! .|! | ト|ト}
,イ ,/ ./〃/ / | / .リ/ //イ|.リ
// //ノノ //゙ ノ'////|.リ/
´彡'゙,∠-‐一彡〃 ト.、,,,,,,,,,,,レ゙
二ニ-‐'''"´ /`二、゙゙7
,,ァ''7;伝 ` {.7ぎ゙`7゙
ゞ‐゙'' ,. ,. ,. l`'''゙" ,'
〃〃" ! |
! l
! (....、 ,ノ !
j `'゙´ ,'
ー--===ァ /
_ _ ./ ・・・ゴクリ
\ ` ̄ ,/
` .、 /
:ミ:ー.、._ /``'''ー-、
`゙三厂´
…ゴクリなのはいいとして。あまりにも冗長すぐるので真のモデル部分は補足で補おうか。(ぉ
というわけでcodeigniterのDB系の便利ツールおよびモデル部分はおまけへ持ち越し。
(゚∀゚)ゝフヒヒサーセンwwww







