猿问

将 PHP 代码添加到动态生成的 HTML 数据中

我正在尝试创建一个网站,该网站基本上有很多按钮,这些按钮将在单击时执行特定的 PHP 文件,并在同一屏幕上的空框中显示其结果。这些 PHP 文件位于test_scripts与index.php.


我认为显而易见的步骤是创建一个循环来迭代这些文件并动态创建它们的用户界面。所以我在中间写了下面的PHP代码index.php


#Index.php

...

 <?php

    $dir_itr = new DirectoryIterator("test_scripts");

    foreach ($dir_itr as $file) {

        if ($file->isFile()) {


            $filename = $file->getFilename();

            $formattedFileName =

                '<button

                     class="box button is-large is-fullwidth is-primary is-light"

                     onclick="loadScriptFileData($filename)">

                               $filename

                 </button>';

            print $formattedFileName;

        }

    }

?>

...

这loadScriptFileData()是一个用 head 中的 script 标签编写的 JavaScript 函数:


<!--index.php-->


<script>

    function loadScriptFileData(filename) {

        alert(filename);

    }

</script>

foreach循环运行正常,但 JavaScript 函数和生成的 HTML 无法正常工作。页面上有预期数量的按钮,但每个按钮只有名称作为单词"$filename",而不是实际预期的文件名。JavaScript 的情况更糟,它直接不起作用并在控制台中给出错误,如下所示Uncaught ReferenceError: $filename is not defined at HTMLButtonElement.onclick ((index):71)


为什么 $variable 没有转换为字符串?我什至尝试了 toString() 函数,但仍然不好。我做错了吗?


茅侃侃
浏览 105回答 3
3回答

慕标5832272

使用单引号时不会解析/解释变量。代替$formattedFileName=&nbsp;'<button&nbsp; &nbsp;&nbsp;class="box&nbsp;button&nbsp;is-large&nbsp;is-fullwidth&nbsp;is-primary&nbsp;is-light"&nbsp; &nbsp;&nbsp;onclick="loadScriptFileData($filename)">$filename</button>';和$formattedFileName=&nbsp;"<button&nbsp; &nbsp;&nbsp;class=\"box&nbsp;button&nbsp;is-large&nbsp;is-fullwidth&nbsp;is-primary&nbsp;is-light\"&nbsp; &nbsp;&nbsp;onclick=\"loadScriptFileData('$filename')\">$filename</button>";

小唯快跑啊

另一种选择(这是我个人的偏好)是在输出 HTML 时结束 PHP 块,并在需要时回显 PHP 变量:if ($file->isFile()) {&nbsp; &nbsp; $filename = $file->getFilename();&nbsp; &nbsp; // Let's end the PHP block&nbsp; &nbsp; ?>&nbsp; &nbsp; &nbsp; &nbsp; <button class="box button is-large is-fullwidth is-primary is-light"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onclick="loadScriptFileData('<?= $filename ?>')">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <?= $filename ?>&nbsp; &nbsp; &nbsp; &nbsp; </button>&nbsp; &nbsp; <?php // Open the PHP block again}这样做的好处是 IDE 会在语法上正确突出显示代码(大多数 IDE 不会对 PHP 中的 HTML 内引号执行此操作)。您也不需要转义引号或手动打印内容,因为它会立即输出。

喵喵时光机

这是个人喜好,但我建议使用串联或花括号:使用大括号(注意:必须用双引号括起来):$formattedFileName =&nbsp; &nbsp; "<button&nbsp; &nbsp; &nbsp; &nbsp; class="box button is-large is-fullwidth is-primary is-light"&nbsp; &nbsp; &nbsp; &nbsp; onclick="loadScriptFileData({$filename})">&nbsp; &nbsp; &nbsp; &nbsp; {$filename}&nbsp; &nbsp; </button>";使用串联:$formattedFileName =&nbsp; &nbsp; '<button&nbsp; &nbsp; &nbsp; &nbsp; class="box button is-large is-fullwidth is-primary is-light"&nbsp; &nbsp; &nbsp; &nbsp; onclick="loadScriptFileData(' . $filename . ')">&nbsp; &nbsp; &nbsp; &nbsp; ' . $filename . '&nbsp; &nbsp; </button>';是的,如果使用双引号,则可以在 PHP 的字符串中使用变量,而且肯定有很多人喜欢这样做。对我来说,使用这两种方法之一似乎更干净且不易出错。使用双引号会导致您对 HTML 属性使用单引号或强制您转义它们。如果您不希望变量后面有空格,则不使用连接或花括号可能会导致问题:$var = 'Pizza';echo "$vars are awesome!" // Not the best example, but you get the idea归根结底,这是个人喜好。但正如另一个答案中所述,如果用单引号括起来,则不能在字符串中使用变量。
随时随地看视频慕课网APP

相关分类

Html5
我要回答