2014-02-17 184 views
0

我正在處理一個作業,我應該創建一組Web表單,以便您可以將數據提交到數據庫並將條目添加到特定表格。我建立了一個字段,幫助用戶通過php請求從數據庫中獲取建議,基本上,當用戶鍵入字段時,會彈出一個建議列表,並且他/她可以選擇一個選項。假設我在「書籍」表中添加了一個新條目,並且只能使用「作者」表中的元素填充「作者」表單(因此用戶不能放置任意作者)。爲此,我使用了自動消毒方法。從php中檢索數據使用php

'books'表有一個外鍵'aut_id',它是'authors'表的id屬性(主鍵)。

正如我前面說過的,我使用php來檢索建議(作者姓名,作者姓氏和作者ID)列表。但是一旦用戶點擊了一個建議,Web表單就會填充作者姓名,我不知道如何利用這個查詢,這樣當用戶點擊「提交」時,aut_id字段就會被正確填充。

我會把一些代碼,這裏是HTML +腳本:

<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> 

,這裏是我使用的PHP檢索建議列表:

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,然後插入適當的數據,但我認爲可能有一種方法可以利用我已經做過的查詢來檢索建議列表。我只是不知道如何。

如果我沒有把問題弄清楚,請問我什麼,我會盡力做得更好。在此先感謝您的時間。

回答

1

我將返回aut_id在PHP腳本如

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> 

的Javascript:

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

也有看看這個問題,如果你返回JSON格式的作家,你可以跳過隱藏字段。

how to set id in jquery ui autocomplete source event

+0

謝謝!工作麗卡魅力!我想我會堅持這一點,但你認爲使用隱藏字段而不是JSON格式是不好的做法嗎? – G4bri3l

+1

這完全取決於你。我會在任何情況下通過JSON發送數據,但無論您填充字段本身還是隱藏字段取決於您。在鏈接的答案中(如果沒有重定向),一旦選擇,實際顯示的「值」將成爲該項目的ID,有時不是你想要顯示給用戶的明顯原因,所以你將不得不任何情況下的隱藏字段。 –