2012-03-05 2 views
2
나는 모든 것이 작동있어 MySQL의

의 jQuery UI - 자동 완성 - UTF8 캐릭터 세트는

에서 데이터를 자동 완성 할 특정 분야를 필요로하는이 JQuery와 데이터 입력 폼에서 작업

메신저, 자동 완성 PHP는 을 통해 SQL에서 데이터를 검색

문제는 그리스어를 입력 할 때 대소 문자를 구별합니다. SENSITIVE는 과 일치합니다. 대문자를 입력하면 모든 것이 잘되지만 이드는 '좋아해요.'라고 말합니다. 대소 문자를 구분하지 마십시오.

그것은 외부 소스와 함께, 그래서 그것은 두 문자열을 비교할 때 뭔가가 있어야합니다 짐작해야 ... 완벽하게 사건을 입력 할 때 완벽하게 작동합니다 ...

도 마찬가지로, 당신은 내 코드에서 볼 수있는 배열 [ 이름] 현재 구성 (심지어 대소 문자를 구분합니다.) 이름을 검색하고 드롭 다운이 나타납니다. 원하는 이름을 클릭하면 셀이 ID로 채워지고 양식을 제출하면 ID가 다음 PHP 페이지.

정확히 같은 일을하는 방법이 있지만 이름을 입력하기 위해이 필드를 채우는 대신에? ie : 이름 검색, 이름을 가진 드롭 다운 메뉴를 클릭하고 필드에서 이름을 알아 내면 언제 게시합니까?

모든 도움을 주시면 대단히 감사하겠습니다. 여기에 코드입니다 :

$(function() { 
    var cache = {}, 
     lastXhr; 
    $(".name").autocomplete({ 
     minLength: 1, 
     source: function(request, response) { 
      var term = request.term; 
      if (term in cache) { 
       response(cache[ term ]); 
       return; 
      } 

      lastXhr = $.getJSON("search.php", request, function(data, status, xhr) { 
       cache[ term ] = data; 
       if (xhr === lastXhr) { 
        response(data); 
       } 
      }); 
     } 
    }); 
}); 

를 여기 소스 (search.php)입니다 :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script> 
<script language="javascript" type="text/javascript" src="js/dropdowndata/dropdowndata.name.js"></script> 

저쩌구 ... 여기

<li class="ui-widget"><label for="name"> Last name: </label><input class="name" name="name" style="width:100px" /></li> 

JS의

<?php 

       $link = mysql_connect("1","2","3"); 
         if (!$link) { die("Database Connection Failed". mysql_error());} 

    mysql_set_charset('utf8',$link); 

       $db_select = mysql_select_db("form2",$link); 
         if(!$db_select){die("Database Selection Failed " . mysql_error());} 

    mysql_query("SET NAMES 'utf8'", $link); 

       $result1 = mysql_query("SELECT dlastname,dfirstname,id FROM doctors ORDER BY dlastname ASC", $link); 
         if(!$db_select){die("No Data found in db " . mysql_error());   } 

$items=array(); 

       while($row = mysql_fetch_array($result1)){ 
         $items[$row['id']] = $row['dlastname']. ", ". $row['dfirstname'];} 

sleep(1); 
if (empty($_GET['term'])) exit ; 
$q = strtolower($_GET["term"]); 
if (get_magic_quotes_gpc()) $q = stripslashes($q); 



$result = array(); 
foreach ($items as $value=>$key) { 
     if (strpos(strtolower($key),$q) !== false) { 
       array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($value))); 
     } 
     if (count($result) > 11) 
       break;} 

echo json_encode($result); 


?> 

내가 포함 된 것을 볼 수 있습니다. mysql_set_charset ('utf8', $ link); mysql_query ("SET NAMES 'utf8'", $ link); 내 소스 PHP 파일에서 내 웹 페이지의 캐릭터 세트는 ... 심지어 소스 PHP 파일에 태그를 설정하려하지만 당신은 내가 모든 아주 새로운 오전 이해 모든 :(

을 엉망, 그렇다면 + any1 시간이 좀 걸릴 누락 메신저 걸 설명 할 수,이 사전에 코드 :

고맙습니다의 첫 조각 중 하나로서 다른 제안/개선 좋을 것 또한 : 좋은 것

답변

2

, 내가에 search.php에 하여 strtolower ($ 문자열) 의 두 차례 나오는 전환하여 strtolower()와 UTF-8 캐릭터 세트 에 문제가있는 것 같습니다 : mb_strtolower (($ 문자열), 'UTF-8') 하고 일한다)

코드는 이제 다음과 같습니다 답장들에 대한

sleep(1); 
if (empty($_GET['term'])) exit ; 
//change in next line: 
$q = mb_strtolower(($_GET["term"]),'UTF-8'); 
if (get_magic_quotes_gpc()) $q = stripslashes($q); 



$result = array(); 
foreach ($items as $value=>$key) { 
     //change in next line: 
     if (strpos(mb_strtolower(($key),'UTF-8'),$q) !== false) { 
       array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($value))); 
     } 
     if (count($result) > 11) 
       break;} 

echo json_encode($result); 

고맙습니다 :) 오전 사고 방식 + 커피로 내게 더 분명 해졌다.

"내 코드에서 볼 수 있듯이, 현재 구성이있는 배열 [ID, 이름]이 있습니다. (대소 문자를 구분 함) 이름을 검색하고 드롭 다운이 나타나면 원하는 이름을 클릭하면 셀이 ID로 채워지고 양식을 제출하면 ID가 다음 PHP 페이지에 게시됩니다.

똑같은 것을 가질 수있는 방법이 있습니까?이 필드에 ID로 필드를 채워 대신 이름을 채우는 방법이 있습니까? 예 : 이름 검색, 이름이있는 드롭 다운 메뉴를 클릭하고 입력란에 이름을 입력하면 제출 된 ID가 표시됩니까? "

+0

당신의 대답을 찾는 훌륭한 직업.그러나이 Q & A 사이트를 최대한 활용하고 문제를 겪고있는 다른 사용자를 도우려면 다음 질문 세트를 새로운 질문으로 명확하게 구분하여 답변을 얻으십시오. *이 * 질문에 대한 답변입니다. . :) – jmort253

0

PHP 페이지 (인덱스 또는 아약스 (search.php)에서 호출하는 모든 것)의 머리글을 추가해야합니다

header("Content-Type:text/html; charset=utf-8"); 
+0

불행히도 내가 말한 행을 추가했습니다. ($ 링크 '명칭'UTF8 'SET') 는 mysql_query; 또한 mysql_set_charset ('UTF-8', $ 링크)을 추가 한 같은 일, 그리스어 영어 문자와 CaseSENSTIVIE에 대한 CASEINSENSITIVE 검색을 :( – krasatos

+0

내가 알아낼 질수 @ jirka-kopriva를 작성하는 방법 아, 거기에 :) – krasatos

+0

당신은 SELECT를 사용하여 데이터베이스 쿼리에서 직접적으로 비교를 시도하지 않는 것이 좋습니다 ... value LIKE '% ... %'안전하고 확실합니다 . –

0

자동 완성 플러그인의 문서에는 matchCase이라는 옵션이 있습니다. 기본적으로 false로 설정됩니다. 이 값을 true로 변경하면 대소 문자를 구분하지 않아야합니다.내가 그것을 알아 냈

http://docs.jquery.com/Plugins/Autocomplete/autocomplete 
+0

@ jmort254 위에서 언급 한 자동 완성 기능을 사용하지 않고 언급해야합니다. [link] http://jqueryui.com/demos/ 자동 완성/ 동일한 옵션을 사용합니까? – krasatos

+0

는 jmort254 @ 난 어쨌든 코드를 입력 : \t $ (".doctors") .autocomplete ({ \t \t MINLENGTH : 1, \t \t matchCase : 사실, ... 아무것도 변경할 것 같다, 난 아직 얻을 CASEINSENSITIVE를 english chars와 caseSENSITIVE for greek ... 나는 그것을 얻지 못한다 :) – krasatos

+0

문서에는 무엇을 보여줄지 결정하기 위해 비교를하는 방법을 덮어 쓰는 방법이있을 수있다. 특수한 (영어 이외의) 문자를 사용하는 경우 해당 경로를 선택해야 할 수 있습니다. – jmort253