使用php从html表单中检索数据

时间:2014-02-17 17:53:45

标签: php jquery html mysql html5

我正在进行一项任务,我应该构建一组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">
                &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 个答案:

答案 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">
                &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