牧尾竜一
ryuic****@jom*****
2008年 7月 9日 (水) 18:05:13 JST
JOMRです。 > まず行いたいことを整理しましょう。 > 1)とあるページからコントローラーのdeleteメソッドが呼び出される。 > 2)その時にcu_idが引数として渡される。 > 3)同じく画面からはdeleteという値がPOSTデータで渡される > ということですね? そうです。この時点では削除するかどうかの確認ページが開くようになります。 > 呼び出すページの<input type="hidden" name="delete" value="1" /> > があると考えていいでしょうか? まさしくそのとおりでビューファイルに <?=form_open('customer');?> <input type="submit" value="いいえ" /> <?=form_close();?> <?=form_open('customer/delete/'. $cu_id);?> <?=form_hidden('delete', '1');?> <input type="submit" value="はい" /> <?=form_close();?> としています。 > ここですが、これでも悪くはないでしょうけど、次のようにしてみてはどうでし > ょう? > <input type="hidden" name="actionType" value="delete" /> > とか。 > この場合だとdeleteとかviewとかvalueの値をPHPで動的に変えることでいろいろ > 同じものが使えます。 > まあ、それはいいとして。 ここは、ビューファイルを <?=form_open('customer');?> <input type="submit" value="いいえ" /> <?=form_close();?> <?=form_open('customer/delete/'. delete);?> <?=form_hidden('delete', '1');?> <input type="submit" value="はい" /> <?=form_close();?> として場合コントローラーにはどのようにしたらいいでしょうか? if ($delete == delete) { $this->db->where('cu_id', $cu_id); $this->db->delete('customer'); $this->load->view('customer_delete_finished'); } else { $row = $query->row(); $data['cu_id'] = $row->cu_id; $data['cu_name'] = $row->cu_name; $data['cu_kana'] = $row->cu_kana; $data['cu_tel'] = $row->cu_tel; $data['cu_fax'] = $row->cu_fax; $data['cu_mail'] = $row->cu_mail; $data['biko'] = $row->biko; $data['datetime'] = $row->datetime; $this->load->view('customer_delete_confirm', $data); } こんな感じでいいのでしょうか? > 動くようになったというソースと、だめだったソースの違いとしては、 > if ($delete == 1) > { > > $data['cu_id'] = $row->cu_id; > となっています。 > いきなり$row->がでてきているということですか。 > else側では > $row = $query->row(); > となっていますね。 > ここでおかしくなってるんじゃないかな? 素人質問ですいません。何がおかしいのかがわかりません。 この前に何かが必要なのでしょうか? > あとは、おかしいのかな?とか考えるべき部分としては > $delete = (int) $this->input->post('delete'); > if ($delete == 1) > の判定かな。 > デバッグテストする場合は、 > if ($delete == 1) > の前に > var_dump($delete); > とかいれてみて、 > いとした値が$deleteに入っているのかどうかをチェック。 > > 意図した値がとれていれば、if の判定は問題ないはずですね。 > > そうやって一つ一つ検証していけばいいんじゃないでしょうか? > あとは、、、気になるところとかは。。。 > まず、 > $cu_id = ''でデフォルトで空文字をセットしています。 > そのあと強制でINTに変換。 > その後SQL実行。 > > 考えるとすると、 > まずcu_idの値はあるのかないのかを調べる(これは開くページでもってるのが > 前提かもしれませんが) > あとは、、、 > cu_idの値のチェックかなぁ。 > これはメソッドの引数なので、 > /hoge/delete/12345 > を想定しているとおもうけど、 > ここにたとえば違うものが埋められる可能性ありますね。 > POSTで受け取る場合と、URLの/いかで受け取る場合と > いろいろやり方はあるとおもいます。 基本的にはID(数字)が引数になる事を想定しているのでここに文字列が入ると という事は全く想定外でした。ここには数字、もしくわ数字+id以外は受け付け ないといった処理も必要なのでしょうか? > ながくなりましたが、いろいろやってみて、わからないことはバンバン質問して > みてください。 まだまだわけわからない質問ばかりする事になると思いますが宜しくお願いします。 >> function delete($cu_id = '') >> { >> $cu_id = (int) $cu_id; >> $delete = (int) $this->input->post('delete'); >> >> $this->db->where('cu_id', $cu_id); >> $query = $this->db->get('customer'); >> >> if ($query->num_rows() == 1){ >> >> if ($delete == 1) >> { >> $this->db->where('cu_id', $cu_id); >> $this->db->delete('customer'); >> $this->load->view('customer_delete_finished'); >> } >> else >> { >> $row = $query->row(); >> >> $data['cu_id'] = $row->cu_id; >> $data['cu_name'] = $row->cu_name; >> $data['cu_kana'] = $row->cu_kana; >> $data['cu_tel'] = $row->cu_tel; >> $data['cu_fax'] = $row->cu_fax; >> $data['cu_mail'] = $row->cu_mail; >> $data['biko'] = $row->biko; >> $data['datetime'] = $row->datetime; >> $this->load->view('customer_delete_confirm', $data); >> } >> } >> else >> { >> $this->load->view('customer_delete_error'); >> } >> } >> >> CodeIgniter徹底攻略のサンプルを少し改造しただけなのですが、これでも初心 >> 者としては難しく思いました。 >> 上記のソースで何かおかしなところがあったらご教授お願いします。 >> >>>> 始めまして。JOMRです。 >>>> こちらに投稿ははじめてなので宜しくお願いします。 >>>> >>>> いきなりで申し訳ないのですが、 >>>> >>>> function delete($cu_id = '') >>>> { >>>> $cu_id = (int) $cu_id; >>>> $delete = (int) $this->input->post('delete'); >>>> >>>> $this->db->where('cu_id', $cu_id); >>>> $query = $this->db->get('customer'); >>>> >>>> if ($delete == 1) >>>> { >>>> >>>> $data['cu_id'] = $row->cu_id; >>>> $data['cu_name'] = $row->cu_name; >>>> $data['cu_kana'] = $row->cu_kana; >>>> $data['cu_tel'] = $row->cu_tel; >>>> $data['cu_fax'] = $row->cu_fax; >>>> $data['cu_mail'] = $row->cu_mail; >>>> $data['biko'] = $row->biko; >>>> $data['datetime'] = $row->datetime; >>>> $this->load->view('customer_delete_confirm', $data); >>>> } >>>> else >>>> { >>>> $row = $query->row(); >>>> >>>> $this->db->where('cu_id', $cu_id); >>>> $this->db->delete('customer'); >>>> $this->load->view('customer_delete_finished'); >>>> } >>>> } >>>> >>>> というメソッドを作成したのですが削除確認の前にデータが削除されてしまいま >>>> す。超初心者質問ですが宜しくお願いします。 >>>> >>>> _______________________________________________ >>>> Codeigniter-users mailing list >>>> Codei****@lists***** >>>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users >>>> >>> _______________________________________________ >>> Codeigniter-users mailing list >>> Codei****@lists***** >>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users >>> >>> >>> No virus found in this incoming message. >>> Checked by AVG - http://www.grisoft.jp >>> Version: 8.0.138 / Virus Database: 270.4.7/1541 - Release Date: 2008/07/08 >>> 19:50 >>> >>> >>> >>> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Codeigniter-users mailing list >> Codei****@lists***** >> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users >> >> >> ---html-part included links------- >> mailto:Codei****@lists***** > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > > No virus found in this incoming message. > Checked by AVG - http://www.grisoft.jp > Version: 8.0.138 / Virus Database: 270.4.7/1541 - Release Date: 2008/07/08 19:50 > > >