2014-02-17 77 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,有时不是你想要显示给用户的明显原因,所以你将不得不任何情况下的隐藏字段。 –