【问题标题】:Nested PHP blocks in HTMLHTML 中的嵌套 PHP 块
【发布时间】:2022-01-01 12:47:17
【问题描述】:

我在 MySQL 中有一个 10 行 19 列的表。我正在尝试以 HTML 格式显示表格的内容。为此,我编写了下面的代码。

<?php
.
.
.
$con = mysqli_connect($host,$user,$password,$db);
$i="select * from data where user='".$usr."'";
$result=mysqli_query($con,$i);
$matrix = mysqli_fetch_all($result);
        
            
        $row = $matrix[0];
        
        $cell = $row[1];
        echo $cell;
    }

?>

<html>
        <style>
        table {
          border:2px solid black;
          width: 100%;
          margin-left:0%;
        }
        tr, td {
          border:1px solid black;
          width: 1%;
          font-size: 20px;
          text-align:center;
        }
        </style>

        <table>
            <?php
                $b=0;
                while ($b<10) {
                    echo '
                        <tr>
                             <?php
                                $a=0;
                                while ($a<18) {
                                    echo "
                                        <td>
                                            $row[$a]
                                        </td>
                                    ";
                                    $a++;
                                }
                             ?>
                        </tr>
                    ';
                    $b++;
                }
            ?>
        </table>
</html>

代码不起作用。我还阅读了一个类似的问题,用". ." 替换内部&lt;?p ?&gt; 。我试过这个,但没有得到预期的结果。 这段代码有什么问题?

【问题讨论】:

  • 您的代码很容易受到恶劣的 SQL 注入攻击。您确实应该优先更新您的代码以正确使用参数化查询和准备好的语句,然后再打开数据以进行泄露和不可逆转的删除。
  • 更多关于您问题的核心,您能否提供一个指向您隐含声称字符串中的 PHP 代码应作为 PHP 代码评估的源的链接?不支持这样的构造并且有充分的理由(如果从不受信任的用户输入中解析字符串,您不会希望我提供包含恶意 PHP 代码的值,即shell_exec(whoami),对吗?)不清楚您在哪里明白了

标签: php html mysql html-table


【解决方案1】:

您在回声中放置了一个开放的 php 标签。相反,请将它们分开。

<table>
<?php
  $b=0;
  while ($b<10) {
    echo '<tr>';
    $a=0;
    while ($a<18) {
      echo "<td>$row[$a]</td>";
      $a++;
    }
    echo '</tr>';
  $b++;
  }?>
</table>

在你的代码中,你有这个:

...
echo '
  <tr>
     <?php
         $a=0;
         ...

... 有 3 个错误。首先,php 中单引号内的任何内容都不会被评估(解析)。所以,即使是这样的:echo 'hello $name'; 会输出输出:hello $nameecho "hello $name";(双引号)会解析变量$name 并会输出类似的东西:hello Sam

其次,当你已经在一个 php 标签中时,你正试图打开一个新的 php 标签。

第三,这真的是一个交易破坏者,你正试图在一个回显的字符串中启动一个新的逻辑块(一个循环)。这不适用于单引号或双引号。如果你看我的回答,我会关闭第一个回声以开始循环。

【讨论】:

  • 它有效。谢谢@Kinglish。但我不明白我的代码有什么问题?我想学。 tnx
  • 你打赌 - 我更新了我的答案。希望有意义
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 2012-09-17
  • 2017-09-19
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多