ajax-返回值 - 输入的关键字服务器中没找到相应的产品,php就给返回个undefind,怎么解决才能让关键字找不到的时候php不返回任何东西?
ringa_lee
ringa_lee 2017-04-10 17:32:00
[PHP讨论组]

1.我在input中输入关键字要找到服务器中的相关产品显示在下方:

    2.php如下:

    $kw = $_REQUEST['kw'];
    include('config.php'); 
    $conn = mysqli_connect($db_url, $db_user, $db_pwd, $db_name, $db_port);
    $sql = "SET NAMES UTF8";
    mysqli_query($conn,$sql);
    $sql = "SELECT hname FROM media_hot WHERE hname LIKE '%$kw%'";
    $result = mysqli_query($conn,$sql);
    //从查询结果集中获取数据
    $list = mysqli_fetch_all($result);
    //[ ['XXXX'],['YYYY'] ]
    for($i=0; $i<5; $i++){
        $hname = $list[$i][0];
        echo "
  • $hname
  • "; }

    3.JS代码如下

    $('.psearch').on('keyup',function(){
        var k=$(this).val();
        if(!k){ //用户没有任何输入
            $('.suggest').css('display','none');
            return; 
            }
        $.ajax({
            url: 'data/product_search.php?kw='+k,
            success: function(html){
            $('.suggest').css('display','block');
            $('.suggest>ul').html(html);
            };
        });
    });

    4.问题是如果我的 kw=asdaf (服务器中找不到的关键字) 则php返回如下代码,会显示在我的html上,怎么解决让关键字找不到的时候php不返回值。

    Notice: Undefined offset: 0 in C:xampphtdocsselef_projectMediadataproduct_search.php on line 19

    Notice: Undefined offset: 1 in C:xampphtdocsselef_projectMediadataproduct_search.php on line 19

    Notice: Undefined offset: 2 in C:xampphtdocsselef_projectMediadataproduct_search.php on line 19

    Notice: Undefined offset: 3 in C:xampphtdocsselef_projectMediadataproduct_search.php on line 19

    Notice: Undefined offset: 4 in C:xampphtdocsselef_projectMediadataproduct_search.php on line 19

    ringa_lee
    ringa_lee

    ringa_lee

    全部回复(4)
    PHPz

    php没有输出undefind,是php报错了。
    没查询到内容的时候$list数组为空,后面$list[$i][0]是不存在的,所以报错。

    另外
    1、请使用preparebind_param防止注入。
    2、需要多少条就查询多少条,不要全部查询出来再循环取要的条数。

    $kw= '%'.urldecode($_REQUEST['kw']).'%';
    include('config.php'); 
    $conn = mysqli_connect($db_url, $db_user, $db_pwd, $db_name, $db_port);
    $sql = "SET NAMES UTF8";
    mysqli_query($conn,$sql);
    $sql = "SELECT hname FROM media_hot WHERE hname LIKE ? limit 5";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("s",$kw);
    $stmt->execute();
    $result = $stmt->get_result();
    while ($row = $result->fetch_array()) {
        $hname = $row['hname'];
        echo "<li>$hname</li>";
    }
    伊谢尔伦

    最好养成在查询结果之后加判断是否为空再行操作的习惯
    4中说的Notice取决于php.ini或者代码里面的报错级别,可以在php.ini中修改或者设置error_reporting
    所以解决方法有两种
    1、修改报错级别,关闭notice提示。(这里最好趁机把关于error_reporting的部分给过一遍)
    2、判断结果集是否为空再操作。(个人推荐这种)

    希望对你有帮助!

    ringa_lee
    $('.psearch').on('keyup',function(){
        var k=$(this).val();
        if(!k){ //用户没有任何输入
            $('.suggest').css('display','none');
            return; 
            }
        $.ajax({
            url: 'data/product_search.php?kw='+k,
            success: function(html){
            if(html){
                $('.suggest').css('display','block');
                $('.suggest>ul').html(html);
            }else{
                //不处理
                return false;
            }
            
            };
        });
    });

    php

    $sql = "SELECT hname FROM media_hot WHERE hname LIKE '%$kw%'";
    $result = mysqli_query($conn,$sql);
    if($result){
        $list = mysqli_fetch_all($result);
    //[ ['XXXX'],['YYYY'] ]
    for($i=0; $i<5; $i++){
        $hname = $list[$i][0];
        echo "<li>$hname</li>";
    }
    }else{
        return false;
    }
    PHP中文网
    for($i=0; $i<@mysqli_affected_rows($result); $i++){
        $hname = $list[$i][0];
        echo "<li>$hname</li>";
    }
    

    希望对你有所帮助

    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号