2013-09-25 36 views
5

Tôi đang sử dụng CodeIgniter và tôi có biểu mẫu có hộp kiểm cho phép người dùng kiểm tra và xóa ảnh đã tải lên của họ.
Trong bộ điều khiển của tôi, tôi sử dụng if(isset($checked) == 1) để kiểm tra xem người dùng có muốn xóa ảnh hay không.
$photo_to_table sẽ đặt trống và chuyển đến $this->tank_auth->update_user() để thực hiện cập nhật db và đặt trường ảnh thành trống trong bảng. Nếu không, ảnh sẽ vẫn giữ nguyên.
Giá trị hộp kiểm tra mã vạch

Nhưng trong mã của tôi, cho dù tôi có kiểm tra hay không, khi tôi nhấp vào nút UPDATE, nó vẫn tiếp tục xóa ảnh, tôi tự hỏi tại sao nó lại xảy ra?

Ai đó có thể vui lòng xem mã của tôi và đưa ra lời khuyên không?

Bộ điều khiển:

$user_id = $this->session->userdata('user_id'); 
$profile = $this->users->get_profile_by_id($user_id); 

if(!empty($_FILES['photo']['name'])) 
{ 
    //image upload process 
} 
else 
{ 
    $checked = $this->input->post('remove'); 
    if(isset($checked) == 1) 
     { 
      $photo_to_table = ''; 
      // here will do remove process to delete file in directory 
     } 
    else 
    { 
     $photo_to_table = $profile->photo; 
    } 
} 

    if($this->form_validation->run()) { // validation ok 
    if(!is_null($data = $this->tank_auth->update_user(
     $this->form_validation->set_value('name'), 
     $this->form_validation->set_value('country'), 
     $this->form_validation->set_value('website'), 
     $photo_to_table 
     ))) 
    { 
     // success 
     $this->session->set_flashdata('msg', 'Profile has been updated'); 
     redirect(current_url()); 
    } 
} 

Xem:

<?php echo form_open_multipart($this->uri->uri_string()); ?> 
<table border="0"> 

<?php 
if(!empty($uphoto)){ 
?> 
    <tr> 
     <td> 
      <div> 
       <img src="<?php echo base_url().$userpath.$uphoto; ?>" /> 
      </div> 

      <div> 
       <input id="remove" type="checkbox" name="remove"> 
       <label for="remove">Remove photo</label> 
      </div> 
     </td> 
    </tr> 
<?php 
} 
?> 

Cảm ơn.

Trả lời

6

Những gì bạn cần làm ở đây là thay đổi dòng này ...

if(isset($checked) == 1){ 

để

if((int) $checked == 1){ 

Lý do được rằng $ biến kiểm tra sẽ luôn luôn được thiết lập cho dù nó giá trị là 1 hoặc không. $checked = $this->input->post('remove'); sẽ trả về NULL nếu 'remove' không được đặt trong dữ liệu POST.

+0

điều này đến trước. đã đồng ý với nó .. –

+0

Cảm ơn bạn rất nhiều :) – conmen

3

Hãy viết giá trị thích hợp trong hộp kiểm của bạn: -

<input id="remove" type="checkbox" name="remove"> 

Viết một số giá trị sau đó kiểm tra xem nó: -

cho ví dụ:

<input id="remove" type="checkbox" name="remove" value="1"> 

Trong php: -

if($checked == 1) { 
     // do whatever u want 
    } 
+0

tôi đã thêm 'value =" 1 "' nhưng nó vẫn không hoạt động. – conmen

1

Thử:

<input id="remove" type="checkbox" name="remove" value="1"> 
+0

Tôi đã thêm 'value =" 1 "', vẫn giống nhau. – conmen

1

loại bỏ isset

của nó vì theo mặc định trong điều khiển CI của bạn, bạn nhận được giá trị đầu vào sử dụng

$checked = $this->input->post('remove');

dù là có giá trị hay không biến bạn ngay bây giờ tồn tại ..

Các vấn đề liên quan