2012-10-09 3 views
0

일 때 사용자 정의 데이터의 형식을 지정하고 자동 완성으로 표시하려면 어떻게해야합니까? JQuery UI 데모 Demo에 표시된 것처럼 자동 완성 위젯에 대한 정보를 얻으려고 시도 할 때 유일한 문제는 변수를 표시하고자하는 데이터로 채울 때 대신 데이터베이스와 MySQL에있는 데이터베이스를 사용하여 다른 설명과 자료에 액세스하려고합니다.이를 위해 소스를 변경하여 정보를 조회하는 다른 PHP 페이지를 사용합니다. 여기에 자동 완성을위한 코드가 있는데, 나는이 메소드를 이해하지 못하므로 기본 검색에서 변경하지 않았습니다. ?소스가 DB

<?php 

    $conec = mysql_connect(localhost, root, admin); 
    if(!$conec) 
    { 
     die(mysql_error()); 
    } 
    else 
    { 
     $bd = mysql_select_db("ve_test",$conec); 
     if(!$bd) 
     { 
      die(mysql_error()); 
     } 
    } 

$termino = trim(strip_tags($_GET['term']));//Obtener el termino que envia el autocompletar 

$qstring = "SELECT name, descripcion FROM VE_table WHERE name LIKE '%".$termino."%'"; 
$result = mysql_query($qstring);//Solicitud a la Base de Datos 

while ($row = mysql_fetch_array($result,MYSQL_ASSOC))//Realizar un LOOP sobre los valores obtenidos 
{ 
       $row['value']=htmlentities(stripslashes($row['name'])); 
       $row_set[] = $row;//build an array 
} 
echo json_encode($row_set);//Enviar los datos al autocompletar en codificacion JSON, Altamente Necesario. 

이>

+0

왜 스트립 슬래시()입니까? 왜 htmlentities()인가? 둘 다 출력 컨텍스트에서 적절한 이스케이프 처리가되지 않습니다. – Sven

+0

만약 내가 틀렸어도 stripslashes는 SQL 쿼리에 올 수있는 모든 여분의 데이터를 제거하는 것이고 htmlentities는 올바른 HTML로 포맷하는 것입니다. –

+0

틀렸어. 쿼리 결과에는 데이터베이스를 일반 텍스트 만 포함 할 것으로 예상되므로 제거해야 할 슬래시가 없습니다. 데이터베이스가 작동하지 않으면 솔루션은 이후에 수정하지 않고 전에 수정해야합니다. htmlentities() 들어, 내 대답을 참조하십시오 : http://stackoverflow.com/questions/12713702/php-recursive-htmlspecialchars-on-object/12713775#12713775 – Sven

답변

0

OK 그래서 난이 질문에 대한 답을 발견, 여기있다 :

<?php 

    $conec = mysql_connect(localhost, root, admin); 
    if(!$conec) 
    { 
     die(mysql_error()); 
    } 
    else 
    { 
     $bd = mysql_select_db("ve_test",$conec); 
     if(!$bd) 
     { 
      die(mysql_error()); 
     } 
    } 

$termino = trim(strip_tags($_GET['term']));//Obtener el termino que envia el autocompletar 

$qstring = "SELECT name, descripcion FROM VE_table WHERE name LIKE '%".$termino."%'"; 
$result = mysql_query($qstring);//Solicitud a la Base de Datos 

while ($row = mysql_fetch_array($result,MYSQL_ASSOC))//Realizar un LOOP sobre los valores obtenidos 
{ 
       $row['value']=htmlentities(stripslashes($row['name'])); 
       $row['desc']= htmlentities(stripcslashes($row['descripcion'])); //This is the line I Changed 
       $row_set[] = $row;//build an array 
} 
echo json_encode($row_set);//Enviar los datos al autocompletar en codificacion JSON, Altamente Necesario.?> 
:

buscar.php에서

, 난 단지 내가 JQ에서받을 바란 이름으로 변수를 추가했다

$(document).ready((function(){ 
      $("#completa").autocomplete({ 
     source: "buscar.php", 
     minLength: 1, 
        focus: function(event, ui) { 
        $("#completa").val(ui.item.label); 
        return false; 
        }, 
        select: function(event, ui) { 
        $("#completa").val(ui.item.value); 
        $("#completa-description").html(ui.item.desc); 
        return false; 
       } 
      }) 
      .data("autocomplete")._renderItem = function(ul, item) { 
       return $("<li>") 
       .data("item.autocomplete", item) 
       .append("<a>" + item.value + "<br>" + item.desc + "</a>") 
       .appendTo(ul); 
      }; 
     })); 

나는이 너무 다른 사람을 도움이되기를 바랍니다 :

그리고 이것은 내가 사용하는 JQ입니다.

0

JQuery와 UI 자동 완성 옵션 '소스'에 의미 :

$(document).ready((function(){ 
      $("#completa").autocomplete({ 
     source: "buscar.php", 
     minLength: 1, 
        focus: function (event, ui){ 
         $("#completa").val(ui.item.val); 
         return false; 
        }; 
     })); 

이 내가 buscar.php에있는 것입니다 :

은 JS입니다 String 또는 String의 배열이됩니다. 그것은 PHP 페이지에서 이것을 얻을 수 없습니다. PHP 페이지의 결과를 읽으려면 AJAX 호출을 사용해야합니다. 튜토리얼을 위해 Google을 사용하기 전에 AJAX를 사용하지 않았다면. 내가 할 수있는 것은 PHP 스크립트가 모든 데이터를 구분 기호로 구분하여 출력하도록하는 것입니다 (예 : 데이터 목록에없는 것). 그런 다음 AJAX 호출을 사용하여 데이터를 검색하고 split()을 사용하여 출력을 구분 기호 (---)로 문자열 배열로 나눕니다. 그런 다음이 배열은 자동 완성 소스로 작동해야합니다. 당신이 당신의 자바 스크립트에 문제가없는 있는지 확인하려면 다음을 사용 :

$(document).ready(function(){ 
    $("#completa").autocomplete({ 
     source: ["string","sample","test","preset values","thisiswhereyourarraywillgo"], 
     minLength: 1, 
     focus: function (event, ui){ 
      $("#completa").val(ui.item.val); 
      return false; 
     } 
    }); 
}); 

을 그 배열에서 그 다섯 개 단어 중 하나를 예측하기 위해 작동하는 경우에, 당신이 AJAX 호출에 문제가 있습니다.

+0

하지만 사실 그것이 작동하는 것입니다, 유일한 문제는 어떻게 PHP 페이지에서 다른 데이터를 얻기 위해 .data 구조를 포맷해야합니까, 그리고 buscar.php에 추가해야하는 것들이 그렇게 보낼 수 있습니다. 데이터, 내 나쁜 영어에 대해 사과 –

+0

$ _GET [ 'term']와 같은 buscar.php 데이터를 보내려면 AJAX를 사용해야합니다. 여기 AJAX의 기초를 읽어보십시오 : http://www.w3schools.com/ajax/ajax_xmlhttprequest_create.asp – Sam

+1

w3schools.com에 대한 재검토 : http://w3fools.com/ – Sven

관련 문제