不提取任何数据

时间:2014-09-28 16:19:06

标签: javascript php jquery mysql ajax

我有这个ajax请求,我试图找到一些标签并将其添加到搜索结果

当我尝试使用我的php脚本找到某些内容然后找不到任何内容时出现问题

<div>
<form action="search()" method="post">
    <label for="tagsearch">Search tags: </label>
    <input type="text" id="tagSearch" name="tagsearch"/>
    <input type="button" id="tagenter" value="Add tag"/>
</div>
<div id="tagHolder">
    <!--Tags here-->
</div>
</div>
<script type="text/javascript">
    $(document).ready(function(){
        function search(){
            var tag=$("tagSearch").val();

            if(tag!=""){
                $("#tagHolder").html();
                $.ajax({
                   type:"post",
                    url:"gettag.php",
                    data:"tag="+encodeURIComponent(tag),
                    success:function(data){
                        $("#tagHolder").html(data);
                        $("#tagSearch").val("");
                    }
                });
            }
        }

        $("#tagenter").click(function(){
            search();
        });

        $('#tagSearch').keyup(function(e){
            if(e.keyCode == 13){
                search();
            }
        });
    });
</script>

上面的代码是ajax请求。

这是php脚本

//Connect to database
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

//Check if connection is up
if(mysqli_connect_errno()){
    echo "Couldn't connect". mysqli_connect_error($con);
}

$tag = $_POST["tag"];

$result=mysqli_query($con, "SELECT * FROM tags WHERE tag = '".$tag."'");
$found=mysqli_num_rows($result);

if($found>0){
    while($row=mysqli_fetch_array($result)){
        echo "<div>". $row['tag'] . "</div>";
    }
}else{
    echo "<div>No suggestions</div>";
}

mysqli_close($con);

我将“无建议”作为搜索结果。我的猜测是SQL查询错误或$ found变量错误。

2 个答案:

答案 0 :(得分:1)

这里有几个重大问题。

  1. 作为Jeff cryptically points out,您无法正确地从tagSearch获取价值,因为$("tagSearch")会查找带有标记名称的元素tagSearch,而不是id tagSearch。要使用id,请将#添加到您的选择器中:var tag=$("#tagSearch").val();这是您所描述问题的主要原因,但请继续阅读,还有很多工作要做。< / p>

  2. 您对SQL注入攻击持开放态度。 Humorous example

    enter image description here

    详细了解他们here,以及如何防御他们here

  3. ajax来电中,data:"tag="+tag错误。它应该是data:{tag:tag}(首选)或data:"tag="+encodeURIComponent(tag)。使用原始代码,如果tag包含任何在URI编码中没有直接有效的字符(松散地,在URL中),那么您的PHP页面将无法完全接收您发送的内容。当使用一个对象(我的第一个例子)时,jQuery将为你处理它的编码;否则,请使用encodeURIComponent进行编码。

  4. 正如Fred -ii-所指出的那样,您的表单操作有误,当用户按下文本字段中的Enter键时,某些浏览器尝试使用它。它应该是action="javascript:search()",而不仅仅是action="search()"。后者将被视为URL。

  5. 同样Fred -ii-指出,您可能希望关闭form元素,</form>以上</div>


  6. 检查错误

    您也没有检查代码中的任何错误,例如error reportingmysqli_error()

    这些是您在开发过程中应该使用的重要工具。

答案 1 :(得分:0)

var tag=$("tagSearch").val(); 试试var tag=$("#tagSearch").val(); 如果你想选择哪个ID是&#34; tagSearch&#34;,请使用$(&#34; #tagSearch&#34;) jquery中有更多关于selector的内容 http://www.w3schools.com/jquery/jquery_selectors.asp