输入的关键字服务器中没找到相应的产品,php就给返回个undefind,怎么解决才能让关键字找不到的时候php不返回任何东西?

发布于 2022-09-04 02:05:47 字数 1775 浏览 18 评论 0

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

<form action="">
    <lable for="psearch"></lable>
    <input class="psearch" name="psearch" type="search">
    <div class="suggest">
        <ul></ul>
    </div>
</form>

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 "<li>$hname</li>";
}

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

毁我热情 2022-09-11 02:05:47

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>";
}
年华零落成诗 2022-09-11 02:05:47

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

希望对你有帮助!

初见 2022-09-11 02:05:47
$('.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;
}
将军与妓 2022-09-11 02:05:47
for($i=0; $i<@mysqli_affected_rows($result); $i++){
    $hname = $list[$i][0];
    echo "<li>$hname</li>";
}

希望对你有所帮助

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文