2013-02-18 2 views
0

Я знаю, что я уже писал, как 30 минут назад, но я думаю, что я получаю близко с моим поиском сообщений ввода:закончить поиск вход с использованием Ajax

я создал модель, которая выглядит как этот

function matchPosts($keyword) 
{ 
    $this->db->get('posts'); 
    $data = array(); 
    $query = $this->db->query("SELECT title,body FROM posts WHERE title LIKE '%$keyword%' or body LIKE '$keyword%' AND status='published'");   
    if($query->num_rows() > 0) 
    { 
     $data = $query->row_array(); 
    }  
    $query->free_result(); 
    return $data; 
} 

я пытаюсь получить матч из моей базы данных,

контроллер выглядит следующим образом:

public function searchPosts() 
{ 
    $keyword = $this->input->post('search_value', TRUE); 

    $matched_field = $this->Model_cats->matchPosts($keyword); 

    echo $keyword; 

    if(count($matched_field) > 0) 
    { 
     $this->load->view('posts_list'); 
    } 
    else 
    { 
     $this->load->view('posts_list'); 
    } 
} 

й это является JS файл

$(document).ready(function() 
{ 
    $("#search_posts").keyup(function() 
    {   
     var searchValue = $(this).val(); 

     $(".posted_post").each(function() 
     { 
       $.ajax({    
        type: "POST", 
        url : "http://local.blog.com/welcome/searchPosts", 
        data: { 
         search_value: searchValue 
        }, 
        success: function(data) 
        { 
         if(data) 
         { 
          $(this).show(); 
         } 
         else 
         { 
          $(this).fadeOut();  
         } 

        } 
       }); 
     }); 
    }); 
}); 

и вид:

<br>  
<form action="" method="post"> 
     <label for="search_posts"><b>Search Posts</b></label> 
     <input type="text" id="search_posts" value="" /> 
</form> 


posts_list это вид, где я цикл Повсеместно посты ...

Em я получаю близко? он не работает в этом состоянии.

+1

Вы, кажется, быть уязвимы для инъекции SQL - например, что, если вы вводите '» OR 1 = 1 - 'в ваш поисковая строка? (Или хуже ''ИЛИ 1 = 1; DROP TABLE posts -')? – Basic

+0

Я обновил свой код .. почему он сейчас не работает? ...... @Basic, я просто хочу, чтобы он работал .. тогда я сделаю это безопасным. – emcee22

+0

Пол, можете ли вы сломать, какой бит, точно, не работает?Вы можете использовать инструменты Firebug/browser dev/аналогичные для отслеживания запросов/ответов на сервер. Их увольняют? Они содержат правильную информацию? Получаете ли вы ответы на 200 200? Они содержат результаты, которые вы ожидаете? и т. д. и т. д. – Basic

ответ

1

Редактировать сценарий, как

$("#search_posts").keyup(function() 
{   
    var posts = $(this).val();   
    //$(".posted_post").each(function() 
    //{ 
     $.ajax({ 
      url : 'http://local.blog.com/welcome/searchPosts', 
      data: {posts}, 
      success : function(data) 
      { 
       $(this).show(); 
      } 
     }); 
    //} 
}); 

и от

$matched_field = $this->Model_cats->matchPosts($keyword); 

в $ matched_field возвращает количество результатов поиска найдено правильно .. ?? тогда вы просто проверить, как

if($matched_field) 
{ 
     //Here you can print result of search 
} 
else 
{ 
     //You can print No results found 
} 
+0

Сейчас работает @Paul – Gautam3164

+0

well stil не работает ... я обновляю ваш код и внес некоторые изменения, но .. все еще не работает. – emcee22

+0

См. мое редактирование .... – Gautam3164

1

В вашей функции match_posts вы используете num_rows () в своих поисковых записях function you ar e собирает результат из функции выше и сравнивается с логическим значением true с использованием ===. Попробуйте var dump, чтобы подтвердить, какой тип значения получает возврат из функции num rows. Я думаю, вы сравниваете числовые с булевыми. Вместо этого вы можете использовать, если счетчик (совпадающие поля)> 0

+0

ОК .. все еще не работает ... @ Shridhar .. и я сделал обновления по моему коду – emcee22

+0

Хорошо, я думаю, вам нужно отладить функцию matchPost, чтобы подтвердить, что инструкция sql хорошо отформатирована и фактически возвращая данные, как вы ожидаете. Я заметил, что у вас есть только один процент на матч. Возможно, вы так и ожидаете. В функции поиска сообщений вы проверяете счет, но не передаете значение для просмотра. Посмотрите, есть ли другое выражение. У вас есть представление (post_list). Что это. Вам нужно назначить данные возврата matchPost для просмотра – Shridhar

0

Модель

class SomeModel extends CI_Model{ 

    /** 
    * Get Posts 
    * 
    * @param string LIKE param 
    * @return mixed Object/Array or Boolean 
    **/ 
    public function get_posts($like){ 

     $query = 
     $this->db 
      ->select('id, title, body') 
      ->like('title' => $like) 
      ->or_like('body' => $like) //not sure if your looking for FULLTEXTSEARCH on this body 
      ->get_where('posts', array('status' => 'published')); 


     return ($query->num_rows() > 0) ? $query->result() : FALSE; 
    } 
} 

Маршрут

//edit to match your class/method 
$route['search/(:any)'] = 'welcome/search_posts/$1'; 

Контроллер

class Welcome extends CI_Controller{ 

    public function search_posts($like){ 

     if(!$posts = $this->SomeModel->get_posts($like)) 
     { 
      return show_404(); 
     } 

     //return partial view without template 
     return $this->load->view('public_home', array(
      'posts' => $posts 
     ), TRUE); 
    } 
} 

Частичный вид (для AJAX)

/** 
<ul> 
    //<?php foreach($posts as $post): ?> 
    <li> 
     <a href=#> 
      <h4><?php echo html_escape($post->title) ?></h4> 
      <p> 
       <?php echo html_escape($post->body) ?> 
      </p> 
     </a> 
    </li> 
    //<?php endforeach; ?> 
</ul> 
**/ 

JQuery

var SITEURL = "<?php echo site_url(); ?>"; 

;(function($){ 

    var search = { 
     init: function(){ 

      if($('#search_posts')) 
      { 
       this.searchPosts(); 
      } 

     }, 
     searchPosts : function(){ 

      var searchInput = $("#search_posts") 
       result  = $("#result"), 
       timeout  = ''; 

      //ajax request 
      var doAjax = function(context, data){ 
       $.ajax({ 
        cache : false, 
        url  : SITEURL + 'search/' + data.keyword, 
        dataType : 'html', 
        type  : 'POST', 
        data  : data, 
        context : context, 
        success : function(callback){ 
         $(this).html(callback); //$(this) = context => $("#result") 
        } 
       }); 
      }; 

      //delayed keyup event 
      searchInput.on('keyup', function(event){ 

       if(timeout) { 
        window.clearTimeout(timeout); 
        timeout = null; 
       } 

       //listen for keyup after delayed(1000) 
       timeout = window.setTimeout(function(){ 
        var inputVal = $(this).val(); 
        var data  = { 
         'keyword' : inputVal 
        } 
        return doAjax(result, data);//execute ajax function 
       }, 1000); 

      }); 




     } 
    }; 

    $(function(){ 
     search.init(); 
    }); 

})(jQuery); 
Смежные вопросы