2014-10-12 2 views
0

Google과이 사이트에서 동일한 주제에 관한 많은 게시물을 보았지만 그 중 일부는 이해하지 못했습니다. (나는 아직 PHP에 익숙하지 않다.)키워드와 같은 하이라이트 SQL 결과

데이터베이스에 저장된 대통령에 대한 정보를 출력하는 코드는 다음과 같다. 결과는 테이블에 있습니다. 그러나이 표의 키워드를 강조하고 싶습니다. 예를 들어 '광고'를 검색하면 '아담스'의 '광고'가 강조 표시됩니다.

-Name-  -Birth-  -years president- -died-  
Adams J Q  1767    4    80 

내가 전에 말했듯이 나는 정말 숙련되지 않아서 누군가가 나에게 무엇을 할 수 있는지 보여주기를 바랍니다. 감사합니다.

코드 :

extract($_POST, EXTR_SKIP);                       
    pdo()->prepare($qry);                        // wat is de query 
    pdo()->bindParam(':zoekTerm', "%$zoekTerm%", PDO::PARAM_STR);              // vul parameter in; let op het '' en "" verschil 
    pdo()->execute();                         // uitvoeren van de query met params 


    function getData($qry, Array $bindParameters)                  // haal data uit de query 
    { 
     pdo()->prepare($qry); 
     foreach($bindParameters as $k => &$v) { 
      pdo()->bindParam($k, $v, PDO::PARAM_STR); 
     } 
     pdo()->execute(); 
     return pdo()->fetchAll();                      // dus een array (associatief) 
    } 
                                 //print the data from an array 

    function prData(Array $data) { 

     foreach($data as $k => $v) { 
      //print_r($v); 
      echo implode(', ', $v); 
     } 

    } 

    function prDataOp1Regel(Array $data) { 
     foreach($data as $r) { 

      $d = array();   
      foreach($r as $v) { 
       $d[] = $v;   
      } 
      print implode('</td><td>', $d); tr(); 
     } 
    } 
    function prDataKeys(Array $data) {  
     foreach($data as $v) { 
      $r = array();     
      foreach($v as $k => $dummy) { 
       $lk = strtolower($k); 
       // even iets geks. Omdat het kan. 
       if($lk === "gebjaar") $lk = "Geboorte jaar" ; 
       $r[] = Ucfirst($lk); 
      } 

      echo implode ('</th><th>', $r); //nl(); 
      break; 

     } 
    } 


    $qry = " 
    SELECT 
     presnaam AS 'Naam President' 
     ,Gebjaar 
     ,Jaarpres AS 'Aantal jaren president' 
     ,Sterfleeftijd 
     ,Partij 
     ,Staatgeboren AS 'Geboren in' 
    FROM president 
    WHERE presnaam 
    LIKE :zoekTerm 
    "; 

    $d = getData($qry, array(':zoekTerm' => "%$zoekTerm%")); 

    echo '<table id="outputtable"><tr>'; 
    echo '<th>'; 
    prDataKeys($d); 
    echo '</th>'; 
    echo '<tr>'; 
    echo '<td>'; 
    prDataOp1Regel($d); 
    echo '</td>'; 
    echo '</td>'; 
    echo '</tr></table>'; 
+0

코드를 살펴 보지 않았습니다. 세부 사항을 보았지만 문제와 관련이없는 것으로 나타 났던 것은 if (preg_match (X, Y)) {...} if (! preg_match (X, Y)) {...}입니다. 대신 if (preg_match (X, Y)) {...} else {...}를 사용해야합니다. 적은 리소스를 사용하며 업데이트 후 오류가 발생할 가능성이 적습니다. –

+0

전체 코드를 게시하고 사람들이 그것을 통과 할 것으로 예상하는 대신, 질문과 관련된 부분으로 줄일 수 있습니까? 그러면 사람들이 당신을 도와주기가 더 쉬울 것이고 더 빠른 응답을받을 것입니다 –

+0

둘 다 감사합니다. 나는 그것을 바꿀 것입니다. – Paul

답변

0

당신은 CSS를 사용하여 포맷 할 수있는 HTML을에 검색되는 한 문자열을 교체 preg_replace이다 또는 않는 str_replace를 사용할 수 있습니다.

는 예를 들어, "아담스는" "< 스팬 클래스 = '일치'> 광고 </스팬 > AMS"또는 검색을위한 "인 경우"</STRONG > AMS < 강력한 > 광고 "와 같은 무언가로 대체 될 것이다 광고".

편집 :

$d[] = $v; 

이 선이 될 것입니다 :

함수 prDataOp1Regel에서

, 당신은 줄에 문자열 교체 수행 할 수 있습니다 그러나

$d[] = str_replace ($searchStr , "<span class='match'>{$searchStr}</span>" , $v); 

를, 당신이 필요 했어 검색 문자열을 매개 변수로 사용하도록 함수 정의를 업데이트하십시오.

function prDataOp1Regel(Array $data, $searchStr) { 

또한 모든 행과 열에 대해 검색 및 바꾸기를해서는 안되며, 검색중인 열에 대해서만 수행해야합니다. $ 데이터 배열이 열의 각 값에 대한 키인 열이 연결된 배열 인 경우

foreach($r as $columnName => $v) { 
    if ($columnName == 'Naam President') { 
     $d[] = str_replace ($searchStr , "<span class='match'>{$searchStr}</span>" , $v); 
    } else { 
     $d[] = $v; 
    } 
} 
+0

답변 해 주셔서 감사합니다. 당신의 대답은 내가 구글에서 발견 한 것이지만, 정확히 어디에서 그것을 바꿀지 모릅니다. 이 코드를 작성하지 않았으므로 일부 부분이 아직 명확하지 않습니다. – Paul

+0

좀 더 자세한 내용을 내 대답을 업데이트했습니다 –

+0

정말 고마워요! 너 멋지다. – Paul