2013-09-25 22 views
5

Używam CodeIgniter i mam formularz z polem wyboru, które umożliwia użytkownikowi sprawdzenie i usunięcie przesłanego zdjęcia.
W moim kontrolerze używam if(isset($checked) == 1), aby sprawdzić, czy użytkownik chce usunąć zdjęcie.
$photo_to_table ustawi pusty i przejdzie na $this->tank_auth->update_user(), aby wykonać aktualizację db, i ustawić pole zdjęcia, aby stało się puste w tabeli. W przeciwnym razie pozostanie to samo zdjęcie.
Wartość kodu sprawdzania wartości pola wyboru

Ale w moim kodzie, czy to sprawdzam, czy nie, po kliknięciu przycisku UPDATE, ciągle usuwa zdjęcie, zastanawiam się, dlaczego to się dzieje?

Czy ktoś może przejrzeć mój kod i doradzić?

Kontroler:

$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()); 
    } 
} 

Widok:

<?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 
} 
?> 

Dzięki.

Odpowiedz

6

Co trzeba zrobić tutaj jest zmienić tę linię ...

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

do

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

Powodem jest to, że zmienna $ sprawdzone zawsze będzie określić, czy jego wartość wynosi 1 lub nie. $checked = $this->input->post('remove'); zwróci wartość NULL, jeśli 'remove' nie jest ustawiona w danych POST.

+0

to jest pierwsze. zgodził się z nim .. –

+0

Dziękuję bardzo :) – conmen

3

Wpisz odpowiednią wartość w pole wyboru: -

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

Napisz jakąś wartość, a następnie sprawdzić: -

dla np

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

w PHP: -

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

Dodałem 'value =" 1 "', ale nadal nie działa. – conmen

1

Wypróbuj:

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

Dodałem 'value =" 1 "', nadal jest takie samo. – conmen

1

usunąć isset

jego ponieważ domyślnie w swojej CI kontrolera można uzyskać wartość wejściową korzystając

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

tego, czy ma wartość lub nie istnieje zmienna teraz ..

Powiązane problemy