用内部的PHP代码回应html

时间:2012-08-30 23:26:43

标签: php html

<?php
$sample = 0;
    if($sample ==0)
    {   
        $displayinner = '<option value =' . $row['privilege_ID'] . '>' . $row['privilege_name'] . '</option>';
        $displayouter = '<td><label>Privileges:</label></td>
          <td><select name = "Privilege" id = "Privilege" multiple="multiple">
              <?php
                $PrivilegeNames = mysql_query("SELECT * FROM privilege");
                while($row = mysql_fetch_array($PrivilegeNames))
                    echo $displayinner;
              ?>
            </select></td>
          </tr>
          <tr>';
        echo $displayouter;
    }
?>

我只收到一个没有任何数据的下拉框。请帮忙,我做错了什么?

4 个答案:

答案 0 :(得分:1)

是的,这将无效 - 存在很多问题,您的“模板”代码将被解析,这将导致错误,并且您无法嵌套<?php这样的块。为了得到你想要的东西,试试这个为初学者:

$displayouter = '<td><label>Privileges:</label></td><td><select name = "Privilege" id = "Privilege" multiple="multiple">';

$PrivilegeNames = mysql_query("SELECT * FROM privilege");
while($row = mysql_fetch_array($PrivilegeNames)) {
    $displayouter .= '<option value =' . $row['privilege_ID'] . '>' . $row['privilege_name'] . '</option>';
}

$displayouter .= '</select></td></tr><tr>';

echo $displayouter;

如果您以后不需要变量$displayouter,则可以只改为echo所有内容,如果这是模板代码则完全break out of the PHP block。请注意使用.=,它将数据附加到现有变量。

这里有很多可能的安全漏洞,但希望这有助于查看一些正常工作的代码。确保在所有未知的HTML输出上使用htmlspecialchars

答案 1 :(得分:0)

<?php
$sample = 0;
if($sample == 0)
{   
    $displayPre     = '<td><label>Privileges:</label></td>
      <td><select name = "Privilege" id = "Privilege" multiple="multiple">';
    $displayPost    = '</select></td>
      </tr>
      <tr>';
    $PrivilegeNames = mysql_query("SELECT * FROM privilege");

    echo $displayPre;

    while($row = mysql_fetch_array($PrivilegeNames))
        echo '<option value =' . $row['privilege_ID'] . '>' . $row['privilege_name'] . '</option>';

    echo $displayPost;
}

?>

内部php标签未正确解析,尝试上面的代码,它实现了前后部分的表单,因此您不需要在字符串中放置新的php块

答案 2 :(得分:0)

Wesley Murch很接近,但遗漏了一些内容:围绕该值引用,并使用htmlentities来阻止XSS注入。

$displayouter = '<td><label>Privileges:</label></td><td><select name = "Privilege" id = "Privilege" multiple="multiple">';

$PrivilegeNames = mysql_query("SELECT * FROM privilege");
while($row = mysql_fetch_array($PrivilegeNames)) {
    $displayouter .= '<option value="' . htmlentities($row['privilege_ID']) . '">' . htmlentities($row['privilege_name']) . '</option>';
}

$displayouter .= '</select></td></tr><tr>';

echo $displayouter;

答案 3 :(得分:0)

我没有测试语法,但是你做了一些错位。

<?php 
$sample = 0; 
     if($sample ==0) 
     {    
          $displayinner = '<option value =' . $row['privilege_ID'] . '>' . $row['privilege_name'] . '</option>';
?>
          <td><label>Privileges:</label></td> 
             <td><select name = "Privilege" id = "Privilege" multiple="multiple"> 
<?php
                     $PrivilegeNames = mysql_query("SELECT * FROM privilege"); 
                     while($row = mysql_fetch_array($PrivilegeNames)) 
                          echo $displayinner; 
?>
                </select></td> 
             </tr> 
             <tr>
<?php
     } 
?>