2014-02-17 9 views
0

나는 데이터를 데이터베이스에 제출하고 특정 테이블에 항목을 추가 할 수 있도록 웹 양식 세트를 작성해야하는 과제를 수행하고 있습니다. 기본적으로 사용자가 필드에 입력하는 동안 php 요청을 통해 db에서 검색된 제안을 사용자에게 제공하는 필드를 만들었습니다. 제안 목록이 나타나고 옵션을 선택할 수 있습니다.PHP로 html 폼에서 데이터 가져 오기

'books'테이블에 새 항목을 추가하고 '작성자'테이블의 요소만으로 작성자 양식을 채울 수 있습니다 (사용자가 임의 작성자를 지정할 수 없도록). 그렇게하기 위해 자동 노출 방법을 사용했습니다.

'books'테이블에는 'authors'테이블의 id 속성 (기본 키) 인 외래 키 'aut_id'가 있습니다.

필자는 전에 php를 사용하여 제안 목록 (저자 이름, 저자 성 및 저자 ID)을 검색하고 있습니다. 그러나 사용자가 제안을 클릭하면 웹 양식이 작성자 이름과 성으로 채워지고 사용자가 "제출"을 클릭 할 때 aut_id 필드가 올바르게 채워지도록이 쿼리를 활용하는 방법을 모르겠습니다. I가 사용하고 PHP는

<script type="text/javascript"> 
    function lookup(inputAuthor) { 
     if(inputAuthor.length == 0) { 
      // Hide the suggestion box. 
      $('#suggestions').hide(); 
     } else { 
      $.post("suggestionRetriever.php", {queryString: ""+inputAuthor+""}, function(data){ 
       if(data.length >0) { 
        $('#suggestions').show(); 
        $('#autoSuggestionsList').html(data); 
       } 
      }); 
     } 
    } // lookup 

    function fill(thisValue) { 
     $('#inputAuthor').val(thisValue); 
     setTimeout("$('#suggestions').hide();", 200); 
    } 
</script> 

... 더 hrml ... 여기

 <div class="form-group"> 
     <label for="inputAuthor">Author</label> 
     <input type="text" class="form-control" id="inputAuthor" placeholder="Author name" onkeyup="lookup(this.value);" onblur="fill();"> 
    </div> 

    <div class="suggestionsBox" id="suggestions" style="display: none;"> 
      <div class="suggestionList" id="autoSuggestionsList"> 
       &nbsp; 
      </div> 
    </div> 

그리고있다 :

나는 몇 가지 코드를 넣을 수 있습니다, 여기에 HTML + 스크립트입니다 추천 목록 검색 :

if(!$db) { 
    echo 'ERROR: Could not connect to the database.'; 
} else { 
    if(isset($_POST['queryString'])) { 
     $queryString = $db->real_escape_string($_POST['queryString']);   
     if(strlen($queryString) >0) { 

      $query = $db->query("SELECT aut_name, aut_surname, aut_id FROM author WHERE aut_name LIKE '$queryString%' LIMIT 10"); 
//I could echo the aut_id but I wouldn't know how to retrieve it on Submit with php 
      if($query) { 
       while ($result = $query ->fetch_object()) { 
        if(!$result->aut_surname){ 
         echo '<li onClick="fill(\''.$result->aut_name.'\'); return false"><a href="">'.$result->aut_name.'</a></li>'; 
        }else{ 
         echo '<li onClick="fill(\''.$result->aut_name.' ' .$result->aut_surname.'\'); return false"><a href="">'.$result->aut_name.' ' .$result->aut_surname.'</a></li>'; 
        } 
       } 
      } else { 
       echo 'ERROR: There was a problem with the query.'; 
      } 
     } else { 
      // Dont do anything. 
     } 
    } else { 
     echo 'There should be no direct access to this script!'; 
    } 
} 

양식에 올바른 이름과 성을 입력했는데 필요한 것이 아닙니다. 그래서 나는 다른 필드에 대한 것처럼 $ _POST PHP 함수를 사용할 수 없습니다. 어떻게 든이 문제를 해결할 수 있지만 가장 적절한 방법을 알고 싶습니다. PHP를 처음 접했기 때문에 뭔가 빠져있을 수도 있습니다. DOM을 사용하여 올바른 내용을 검색하는 사람들을 읽었습니다. 나는 사용자가 입력 한 글쓴 ID를 찾아 적절한 데이터를 INSERT 할 수 있도록 DB에 다른 쿼리를 할 수는 있지만 이미 검색 한 쿼리를 활용할 수있는 방법이있을 것이라고 생각한다. 제안 목록. 나는 방법을 모른다.

내가 문제를 분명히하지 않으면 아무 것도 묻지 말고 더 잘하려고 노력할 것입니다. 시간 내 주셔서 감사드립니다.

나는 PHP 스크립트에 aut_id을 반환

답변

1

같은

PHP :

if($query) { 
       while ($result = $query ->fetch_object()) { 
        if(!$result->aut_surname){ 
         echo '<li onClick="fill(\''.$result->aut_name.'\', \'' + $result->aut_id + '\''); return false"><a href="">'.$result->aut_name.'</a></li>'; 
        }else{ 
         echo '<li onClick="fill(\''.$result->aut_name.' ' .$result->aut_surname.'\', \'' + $result->aut_id + '\''); return false"><a href="">'.$result->aut_name.' ' .$result->aut_surname.'</a></li>'; 
        } 
       } 

당신은 당신이 숨겨진 필드의 값을 설정합니다 양식에 다음 숨겨진 필드를 추가 할 수 fill 기능

HTML :

<div class="form-group"> 
     <label for="inputAuthor">Author</label> 
     <input type="text" class="form-control" id="inputAuthor" placeholder="Author name" onkeyup="lookup(this.value);" onblur="fill();"> 
     <input type="hidden" id="hiddenAutId"/> 
    </div> 

    <div class="suggestionsBox" id="suggestions" style="display: none;"> 
      <div class="suggestionList" id="autoSuggestionsList"> 
       &nbsp; 
      </div> 
    </div> 

자바 스크립트 : 당신이 숨겨진 필드를 건너 뛸 수 있습니다 JSON 형식으로 저자를 반환하는 경우

function fill(thisValue, autId) { 
     $('#inputAuthor').val(thisValue); 
     $('#hiddenAutId').val(autId); 
     setTimeout("$('#suggestions').hide();", 200); 
    } 

는 또한,이 질문에 대해 살펴 있습니다.

how to set id in jquery ui autocomplete source event

+0

감사합니다! 좋아하는 일을했습니다.제 생각에는 이것에 충실 하겠지만 JSON 형식 대신 숨겨진 필드를 사용하는 것은 나쁜 습관이라고 생각합니까? – G4bri3l

+1

전적으로 귀하에게 달려 있습니다. JSON을 통해 데이터를 보낼 것입니다. 필드 자체 또는 숨겨진 필드를 채우는 것은 사용자에게 달려 있습니다. 링크 된 응답에서 (리디렉션되지 않은 경우) 일단 선택되면 실제로 표시된 '값'은 분명히 사용자에게 표시하려는 항목이 아닌 항목의 ID가되므로 사용자가 가지고 있어야 할 항목입니다. 어떤 경우 든 숨겨진 필드. –

관련 문제