こんばんわ、中の人デス。


さて引き続きモデルについてやっていきませう。


もでるというかぶっちゃけ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のないのを指定するとエラー。)


PHP2009-26

例。記事No2を指定した場合。(http://localhost/igniterapp/helo/edit/2 )



PHP2009-27
ちなみに記事全体



PHP2009-28
存在しないNo(13)を指定して実行した場合。



ここまででとりあえずデータ取り出し。編集用にフォームに出力まででけたので、次は更新するメソッドの追加。

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。

(´・ω・)本当かいな というわけで動かしてみる。


実験台はこいつだ!(゚∀゚)アヒャヒャ(ぇ


PHP2009-29

これの内容を編集…



PHP2009-30
このブログを書き始めてから口癖が『困る』に変化するから困る。



PHP2009-31
クエリボタン押下後。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!!的な(多分)エラー発生。



PHP2009-32

恐らく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>




PHP2009-33
画面的にはこんなん。


で、当然コントローラーにも削除用メソッドを追加しませう。


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/;;;;;;/::::;;;;ノ⌒ヽノ::::::::::::ヽ,_Λ
     ;;;;;;:::::;;;;;;;;;;:::::;;;;;;;;:::/;;;;;;:::::::::;;;;;;/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::;;:;;;;:::ヽ

┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨・・・


ってなるので注意。レコード全破壊してしまうぉ!




PHP2009-34
ID3と入力してみる。



PHP2009-35
みごとに…ない。(1は実験段階ですでに削除ry)


毎回思うけど、フレームワークの記述は簡潔すぐる。


     ヽ       j   .す
  簡.   ゙,      l.    ご
  潔    !      ',     く
  で    ',        ',    :
  す    ト-、,,_    l
   :    !   `ヽ、 ヽ、    _
   ;    /      ヽ、`゙γ'´
      /         \
      !   ト,       ヽ
ヽ__  ___ノ ,!   | | ト,       ゙、
  レ'゙ ,イ ./|!  .リ | リ ! .|! | ト|ト}
 ,イ ,/ ./〃/ / | / .リ/ //イ|.リ
// //ノノ  //゙ ノ'////|.リ/
´彡'゙,∠-‐一彡〃 ト.、,,,,,,,,,,,レ゙
二ニ-‐'''"´      /`二、゙゙7
,,ァ''7;伝 `        {.7ぎ゙`7゙
  ゞ‐゙''  ,. ,. ,.  l`'''゙" ,'
  〃〃"      !   |
              !  l
 !       (....、 ,ノ  !
 j        `'゙´  ,'
     ー--===ァ   /
      _ _   ./    ・・・ゴクリ
\     ` ̄   ,/
  ` .、       /
   :ミ:ー.、._  /``'''ー-、
    `゙三厂´



…ゴクリなのはいいとして。あまりにも冗長すぐるので真のモデル部分は補足で補おうか。(ぉ


というわけでcodeigniterのDB系の便利ツールおよびモデル部分はおまけへ持ち越し。


(゚∀゚)ゝフヒヒサーセンwwww

人気ブログランキングへ