我正在进行一项任务,我应该构建一组Web表单,以便您可以将数据提交到数据库并向特定表添加条目。我构建了一个字段,帮助用户通过php请求从数据库中检索建议,基本上当用户输入字段时,弹出一个建议列表,他/她可以选择一个选项。
假设我在'books'表中添加了一个新条目,我只能使用'authors'表中的元素填充'author'表单(因此用户不能放任意作者)。为此,我使用了自动提示方法。
'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">
</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,然后插入正确的数据,但我认为可能有一种方法可以利用我已经检索过的查询建议清单。我只是不知道如何。
如果我没有把问题弄清楚,请问我什么,我会尽力做得更好。提前感谢您的时间。
答案 0 :(得分:1)
我会在php脚本中返回aut_id,例如
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">
</div>
</div>
使用Javascript:
function fill(thisValue, autId) {
$('#inputAuthor').val(thisValue);
$('#hiddenAutId').val(autId);
setTimeout("$('#suggestions').hide();", 200);
}
另外看看这个问题,如果你以JSON格式返回你的作者,你可以跳过隐藏的字段。