Estoy obteniendo 10 registros en la tabla, ahora tengo un encabezado de columna de la tabla llamado BORRAR, debajo del cual hay casillas de verificación, ahora quiero eliminar los registros marcados con un solo clic de ese botón BORRAR. Por favor, diga cómo hacerlo en php codeigniter

<table>
     <tr>
            <td>Id</td>  
            <td>Name</td>  
            <td>Car</td>  
            <td>Address</td>  
            <td>Phone Number</td> 
            <td><a href="<?php echo site_url('User1/delete/'); ?>">Delete</td>          
            <td>Action </td>    
    </tr>

     <?php foreach($posts as $a){  ?>
     <tr>
            <td><?php echo $a->id;?></td>  
            <td><?php echo $a->name;?></td>  
            <td><?php echo $a->car;?></td>  
            <td><?php echo $a->address;?></td>  
            <td><?php echo $a->cell_number;?></td>  
            <td>
            <input type="checkbox" name="id" value="$a->id"><br>
            </td>
      </tr>    
     <?php }?>  
   </table>  

Código de controlador

function delete($id){
    $result = $this->User_model->deletebyid($id);
    if($result==true)
    return true;
}

Código modelo

function deletebyid($id){
    $this->db->where('id', $id);
    $this->db->delete('user_table');
    if ($this->db->affected_rows() > 0) {
      return true;
    }else {
      return false;
    }
}

Obteniendo este error

A Database Error Occurred

Error Number: 1054

Unknown column 'Array' in 'where clause'

DELETE FROM `user_table` WHERE `id` = `Array`

Filename: C:/xampp/htdocs/codeigniter/system/database/DB_driver.php

Line Number: 691
2
harsh sharma 19 sep. 2016 a las 10:48

3 respuestas

La mejor respuesta
<form method='post' action='<?php echo site_url('User1/delete/'); ?>' >
<table>
     <tr>
            <td>Id</td>  
            <td>Name</td>  
            <td>Car</td>  
            <td>Address</td>  
            <td>Phone Number</td> 
            <td><input type="submit" name="delete" value="Delete" /></td>          
            <td>Action </td>    
    </tr>

     <?php foreach($posts as $a){  ?>
     <tr>
            <td><?php echo $a->id;?></td>  
            <td><?php echo $a->name;?></td>  
            <td><?php echo $a->car;?></td>  
            <td><?php echo $a->address;?></td>  
            <td><?php echo $a->cell_number;?></td>  
            <td>
            <input type="checkbox" name="r_id[]" value="<?php echo $a->id; ?>"><br>
            </td>
      </tr>    
     <?php }?>  
   </table>  
</form>

Controlador:

function delete($id){
echo "<pre>";print_r($_POST['r_id']);exit; // you will get all selected check box values. (which are the record ids. You just send this ids to model and delete them using sql IN operator [ex: id IN ('') ].
...
...
...
            }
1
Naga 24 nov. 2016 a las 13:04

Prueba algo como esto. Pones el ID de registro en el modelo de enlace:

function delete_row() //model named displaym
{
    $this->db->where('id', $this->uri->segment(3)); //this will be the table row ID
    $this->db->delete('table');//table name
}

Controlador

public function delete()
{
    $this->is_logged_in();
    $this->displaym->delete_row();
    redirect("page");
}

Cuando se vincula para eliminar el controlador

anchor("updates/delete/" . $row->id, //send table row ID to the model as the 3rd segement
0
Brad 19 sep. 2016 a las 14:26

Haga que este cambio en su código funcione

<input type="checkbox" name="record_ids[]" value="$a->id">

Y en tu controlador accede a ellos como

Controlador

function delete(){
   $record_ids = $this->input->post('record_ids');

   $result = $this->User_model->deletebyid($record_ids);
   if($result==true)
      return true;    
}

Modelo

---- Actualización para manejar una eliminación única ----

function deletebyid($ids){
   if(is_array($ids))
      $this->db->where_in('id', $ids);
   else
      $this->db->where('id',$ids);
   $this->db->delete('user_table');
   if ($this->db->affected_rows() > 0) {
     return true;
   }
   else
     return false;
 }
0
Zeeshan 19 sep. 2016 a las 09:48