【问题标题】:Php search function displaying nullphp搜索功能显示空
【发布时间】:2023-03-30 07:12:01
【问题描述】:

大家好,我只是第一次使用学习 php 并建立自己的网站等来尝试一下。我有一个食谱数据库。对于每个食谱,它都有一个成分列表。每个食谱将有不同的数量。所以一个会有 5 个,另一个可以有 3 个等等。我的代码的问题是。如果有人搜索食谱并找到它,它将返回成分,但有时如果它的 div 比我放在那里的更多,它会返回一些空值。我也了解 sql 注入等以及不好的做法,但我只是先玩它。我想让它工作,然后再修复那个部分:)

PHP:

                <div class="panel panel-default">
                    <div class="panel-heading"><b>' . htmlentities($rN, ENT_QUOTES) . '</b></div>
                                </a>

    }

?>

现在我很确定在我的白色循环中我想在 div 标签之后做一个 if 语句并说如果 value == null 然后不显示,但我已经尝试过但没有任何效果,所以在这个问题上的任何帮助都会厉害了

谢谢

【问题讨论】:

  • 一切正常,只是我在 while 循环中添加了额外的 div,因为有些食谱有超过 3 种成分
  • @fusion3k 所以搜索功能一切正常,就像我说的,有些食谱超过 3 个,它会在第 4 和第 5 项显示空
  • 所以我只需要在第 4 和第 5 个 div 周围使用 if 语句来检查它是否为空而不是发布它
  • 是的。请参阅我的答案以获得一般解决方案。

标签: php html mysql sql mysqli


【解决方案1】:

如果遇到空值是个问题,这只会打印出您的行包含的成分。

    while($row = mysql_fetch_array($query)) {
        $rN = $row['recipeName'];
        $i=1;
        $recipes = '';
        if (isset($row['recipe_ing'.$i]) {
            while(isset($row['recipe_ing'.$i]) {
                $value =  htmlentities($row['recipe_ing'.$i], ENT_QUOTES);
                $recipes .= <<< EOT
<div class="food-graph">
    <span class="food-graph-title">$value</span>
</div>                
EOT;
                $i++;
            }

            $output .= <<< EOT
<div class="panel panel-default">
    <div class="panel-heading"><b>' . htmlentities($rN, ENT_QUOTES) . '</b></div>
        <div class="panel-body">
            <div class="pull-left col-xs-12 col-sm-4">
                <a href="#">
                    <img class="img-thumbnail img-responsive" src="Image/green.jpg">
                </a>
                <a class="btn btn-success btn-block btnrec" href="#">View Recipe</a>
            </div>
            <div class="col-xs-12 col-sm-6 col-md-6">
                <div class="media-body">
                    <h3 class="media-heading">INGREDIENTS:</h3>
$recipes
                </div>
            </div>
        </div>
    </div>
    <div class="panel-footer">Rating</div>
</div>
EOT;
        }
    }

编辑:另外,我正在使用 Heredocs 设置字符串。带有 EOT; 的行前面不能有空格或代码。它必须在行首。也没有代码可能在它后面的同一行。否则,您的文档将变成一个巨大的字符串。

【讨论】:

  • while(isset($row['recipe_ing'.$i]) {
  • 暂时忘记了括号。再试一次
  • 现在试试看
  • 显示一切正常,但以下仍显示 0
  • 我很困惑,成分显示很好,明白了。什么仍然显示 0?
【解决方案2】:

您的成分 HTML 似乎在重复,因此您可以解决空的 &lt;div&gt; 问题并使用 for 循环和 if 条件缩短您的代码:

$output .= '<div class="panel panel-default">
            (...)
            <h3 class="media-heading">INGREDIENTS:</h3>';

for( $i=1; $i < 7; $i++ )
{
    if( ${"rI$i"} )
    {
        $output .= '<div class="food-graph">
            <span class="food-graph-title">' . htmlentities(${"rI$i"}, ENT_QUOTES) . '</span>
        </div>';
    }
}

$output .= ' (...) ';

【讨论】:

  • 抱歉,这是用 whiile 循环代替吗?>
  • 如果可能的话,我知道它很麻烦,但你可以复制并粘贴整个代码吗?如果这是假设的,因为我正在努力让它工作
  • 啊,这太棒了,非常感谢您的帮助