在 html 中嵌套的回显中显示 php

displaying php in an echo nested in html

我正在尝试回显其中嵌套了 PHP 的一段文本,有人知道怎么做吗?我试过这样:

function update_category(){

    global $connection;

    if (isset($_GET['edit'])) {
        $edit_cat_key = $_GET['edit'];

        $query = "SELECT * FROM categories WHERE cat_id = {$edit_cat_key }";
        $edit_cat_query = mysqli_query($connection, $query);

        echo    '<form action="categories.php" method="post">
                    <div class="form-group">
                        <label for="new-cat-title">New name of category</label>
                            <input value="<?php if(isset($cat_title)){echo $cat_title;} ?>" type="text" class="form-control" name="new-cat-title">
                    </div>
                    <div class="form-group">
                        <input class="btn btn-primary" type="submit" name="submit" value="Rename Category">
                    </div>
                </form>';

            
        while($row = mysqli_fetch_assoc($edit_cat_query)) {
            $cat_title = $row['cat_title'];
            $cat_id = $row['cat_id'];
        }
    }

}

它打印:<?php if(isset($cat_title)){echo $cat_title;} ?>

我试过这样:

<input value="' . <?php if(isset($cat_title)){echo $cat_title;} ?> . '" type="text" class="form-control" name="new-cat-title">

我会这样做(只显示 php 代码中的回显部分):

echo '<form action="categories.php" method="post">
                <div class="form-group">
                    <label for="new-cat-title">New name of category</label><input value="';

if(isset($cat_title)){echo $cat_title;};
echo '" type="text" class="form-control" name="new-cat-title"></div>
                <div class="form-group">
                    <input class="btn btn-primary" type="submit" name="submit" value="Rename Category">
                </div>
</form>';

这回显了两个字符串(在单引号中)和它们之间的变量取决于条件,保持 double-quote 对属性值完整。

Echo 是一个 php 语句。你用它来显示一个输出,作为一个字符串。您需要的是,将 echo ' 替换为 ?>,将 </form>'; 替换为 </form><?php。这些结束 (?>) 和开始 (<?php) 标签让您决定文档的哪一部分应该作为 PHP 处理。所以 PHP 将忽略文档的其余部分。

根据 Johannes 的回答,我找到了答案。我需要关闭 PHP 标签,而不是回显希望的结果,而是将其放在 while 循环中。

像这样:

    function update_category(){
    
        global $connection;
    
        if (isset($_GET['edit'])) {
            $edit_cat_key = $_GET['edit'];
    
            $query = "SELECT * FROM categories WHERE cat_id = {$edit_cat_key }";
            $edit_cat_query = mysqli_query($connection, $query);
        
            while($row = mysqli_fetch_assoc($edit_cat_query)) {
                $cat_title = $row['cat_title'];
                $cat_id = $row['cat_id'];
    
                ?>
                    <input value="<?php echo $cat_title; ?>" type="text" class="form-control" name="cat_title">
                <?php
        }
    }

}