Traté de crear una barra de búsqueda para que los usuarios pudieran buscar productos mediante la búsqueda por el nombre del producto, pero no funciona y no puedo buscar un producto.

Esta es mi función de controlador:

<?php
class SearchController extends CI_Controller {
  function __construct(){
     parent::__construct();
     $this->load->model('Search_model');
  }

  public function index(){
     $data = array();
  }

  function search_keyword(){
    $keyword = $this->input->post('keyword');
    $data['results'] = $this->Search_model->search($keyword);
    //laad de view
    $this->load->view('result_view',$data);
  }
}
?>

Esta es mi función modelo:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Search_model extends CI_Model  {  
    function __construct(){
        parent::__construct();
    }

    function search($keyword) {
        $this->db->select('product_naam');
        $this->db->like('product_naam',$keyword);
        $query  =   $this->db->get('products');
        return $query->result_array();
    }
}
?>

Y este es mi archivo de vista con barra de búsqueda:

<?php include_once('templates/header.php');  ?>
  <center>
    <h2>Zoek een cadeau</h2><br>
      <form class="navbar-form" role="search" action="<?php echo base_url(); ?>SearchController/search_keyword" method="POST">
          <div class="input-group">
              <input type="text" class="form-control" placeholder="Search" name="keyword" size="30px; ">
              <div class="input-group-btn">
                  <button class="btn btn-default " type="submit" value = "Search"><i class="glyphicon glyphicon-search"></i></button>
              </div>
          </div>
      </form>
  </center>
    <div class="clearfix"></div>
  <table>
    <?php foreach($results as $row){ ?>
      <tr>
        <td><?php echo $row->product_naam?></td>
      </tr>
    <?php } ?>
  </table>
<?php include_once('templates/footer.php'); ?>

¡Espero que alguien me pueda ayudar con este problema !, gracias

0
Learningprogrammingphp44 14 nov. 2017 a las 16:06

2 respuestas

La mejor respuesta

No creo que like () te ayude mucho con tus necesidades particulares. Su mejor apuesta, supongo, sería evitar el problema y usar una función where que contenga su cláusula LIKE:

$this->db->select('product_naam')->from('products')
$this->db->where("product_naam LIKE '%$keyword%'")->get();

O si quieres puro ci tienes que cambiar tu línea 'me gusta':

$this->db->like('product_naam',$keyword);

Para% $ consulta puedes usar

$this->db->like('product_naam',$keyword,'before');

Y para $ query% puedes usar

$this->db->like('product_naam',$keyword,'after');
1
Anand Pandey 15 nov. 2017 a las 08:49

Debido a que usa $query->result_array();, los elementos deben ser tomados por

<td><?php echo $row['product_naam']?></td>

matriz_resultados ()

Este método devuelve el resultado de la consulta como una matriz pura o una matriz vacía cuando no se produce ningún resultado.

Documentación de CI

1
splash58 14 nov. 2017 a las 13:11