【问题标题】:Can I insert php & html inside a multi line php variable?我可以在多行 php 变量中插入 php 和 html 吗?
【发布时间】:2017-07-18 12:52:46
【问题描述】:

所以我是一个完全的初学者,我正在做一个创建动态下拉表单的项目。我已经编写了一些代码,现在想知道是否可以在多行 php 变量中插入 php 和 html。下面的代码是我刚刚尝试过的[此处未包含 javascript],但 php 显示错误。这根本不可能,还是我的一些错误?提前致谢。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>php & html inside a multi line php variable</title>
</head>
<body>
    <?php 
    $chooseroom=<<<HERE
    <div class="select-boxes">
        <?php
        //Include database configuration file
        include('dbConfig.php');

        //Get all occupation data
        $query = $db->query("SELECT * FROM occupations WHERE status = 1 ORDER BY occupation_name ASC");

        //Count total number of rows
        $rowCount = $query->num_rows;
        ?>
        <select name="occupation" id="occupation">
            <option value="">Select occupation</option>
            <?php
            if($rowCount > 0){
                while($row = $query->fetch_assoc()){ 
                    echo '<option value="'.$row['occupation_id'].'">'.$row['occupation_name'].'</option>';
                }
            }else{
                    echo '<option value="">occupation not available</option>';
                }
            ?>
        </select>

        <select name="specification" id="specification">
            <option value="">Select occupation first</option>
        </select>

        <select name="expertise" id="expertise">
            <option value="">Select specification first</option>
        </select>
    </div>
    HERE;
    echo $chooseroom;
</body>
</html>

按照你们中的一些人的要求,这是我的 JAVASCRIPT:

<script src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#occupation').on('change',function(){
    var occupationID = $(this).val();
    if(occupationID){
        $.ajax({
            type:'POST',
            url:'ajaxData.php',
            data:'occupation_id='+occupationID,
            success:function(html){
                $('#specification').html(html);
                $('#expertise').html('<option value="">Select specification first</option>'); 
            }
        }); 
    }else{
        $('#specification').html('<option value="">Select occupation first</option>');
        $('#expertise').html('<option value="">Select specification first</option>'); 
    }
});

$('#specification').on('change',function(){
    var specificationID = $(this).val();
    if(specificationID){
        $.ajax({
            type:'POST',
            url:'ajaxData.php',
            data:'specification_id='+specificationID,
            success:function(html){
                $('#expertise').html(html);
            }
        }); 
    }else{
        $('#expertise').html('<option value="">Select specification first</option>'); 
    }
});
});
</script>

【问题讨论】:

  • 不能真正得到,你想把什么放进那个变量?你能用它代替&lt;&lt;&lt;HERE吗?
  • 是的,请发布更多代码(最好包含 javascript),因为现在,我看到您打开了一个 php 标签,然后是 html,这会破坏您的脚本,然后是 @987654325 @ 在 php 标签之外不是有效的 php 或 html。
  • 不,您不能将 PHP 控制结构放在 heredoc 块中。您可以插入现有变量,但仅此而已。
  • @Danielius - &lt;&lt;&lt;HERE 是字符串的开头;这是HEREDOC 语法。查看echo $chooseroom; 上方,您会看到关闭HERE;
  • 谢谢大家,我已经包含了我的javascript,如果这可以帮助你帮助我!..再次感谢

标签: javascript php html forms variables


【解决方案1】:

是的,可以将多行 html 和 php 添加到变量中。您可以在选项中添加多个条目,如下所示

while($row = $query->fetch_assoc()){

 /* here . operator is used to append
 to the existing value of $chooseroom */

$chooseroom .= '<option value="'.$row['occupatio_id'].'">'.$row['occpation_name'].'</option>';
}

在需要的地方打印这个变量

<?php echo $chooseroom; ?>

【讨论】:

  • 谢谢萨米尔!会看到的
【解决方案2】:

你不能以你正在尝试的方式去做你正在尝试的事情;您要做的是在 HEREDOC 块内运行 PHP 代码。

但是,您可以放置​​ PHP 代码,并创建您的一组选项,该块之前,只需在需要的地方插入它(您甚至不需要将 HEREDOC 块分配给变量, 你可以用 echo 出来):

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>php & html inside a multi line php variable</title>
</head>
<body>

<?php
//Include database configuration file
include('dbConfig.php');

//Get all occupation data
$query = $db->query("SELECT * FROM occupations WHERE status = 1 ORDER BY occupation_name ASC");

//Count total number of rows
$rowCount = $query->num_rows;

// Create an HTML options string
$htmlOptions = "";
if($rowCount > 0) {
    while($row = $query->fetch_assoc()){ 
        $htmlOptions .= '<option value="'.$row['occupation_id'].'">'.$row['occupation_name'].'</option>';
    }
} else {
    $htmlOptions .= '<option value="">occupation not available</option>';
}

// Output
echo <<<HERE
<div class="select-boxes">
<select name="occupation" id="occupation">
<option value="">Select occupation</option>
$htmlOptions
</select>

<select name="specification" id="specification">
    <option value="">Select occupation first</option>
</select>

<select name="expertise" id="expertise">
    <option value="">Select specification first</option>
</select>
</div>
HERE;
?>

</body>
</html>



不过,老实说,整个 HEREDOC 的事情在这里有点多余,因为您可以跳出 PHP 并在需要它们的地方回显您的选项 - 也可以更好地分离 PHP 和 HTML 代码:

<?php
//Include database configuration file
include('dbConfig.php');

//Get all occupation data
$query = $db->query("SELECT * FROM occupations WHERE status = 1 ORDER BY occupation_name ASC");

//Count total number of rows
$rowCount = $query->num_rows;

// Create an HTML options string
$htmlOptions = "";
if($rowCount > 0) {
    while($row = $query->fetch_assoc()){ 
        $htmlOptions .= '<option value="'.$row['occupation_id'].'">'.$row['occupation_name'].'</option>';
    }
} else {
    $htmlOptions .= '<option value="">occupation not available</option>';
}

// OUTPUT
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>php & html inside a multi line php variable</title>
</head>
<body>

<div class="select-boxes">
<select name="occupation" id="occupation">
<option value="">Select occupation</option>
<?= $htmlOptions; ?>
</select>

<select name="specification" id="specification">
    <option value="">Select occupation first</option>
</select>

<select name="expertise" id="expertise">
    <option value="">Select specification first</option>
</select>
</div>

</body>
</html>

【讨论】:

    【解决方案3】:

    我自己一直很喜欢这个解决方案:

    <?php
    
    include('dbConfig.php');
    $query = $db->query("SELECT * FROM occupations WHERE status = 1 ORDER BY occupation_name ASC");
    $rowCount = $query->num_rows;
    
    ob_start();
    
    if ( $rowCount > 0 ) {
    
        while( $row = $query -> fetch_assoc() ){ 
    
            echo '<option value="'.$row['occupation_id'].'">'.$row['occupation_name'].'</option>';
    
        }
    
    } else {
    
        echo '<option value="">occupation not available</option>';
    
    }
    
    $values = ob_get_clean();
    
    ?>
    
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>php & html inside a multi line php variable</title>
    </head>
    
    <body>
    <div class="select-boxes">
    <select name="occupation" id="occupation">  
    <option value="">Select occupation</option>     
    <?php echo $values; ?>
    </select>
    
    <select name="specification" id="specification">
        <option value="">Select occupation first</option>
    </select>
    
    <select name="expertise" id="expertise">
        <option value="">Select specification first</option>
    </select>
    </div>
    </body>
    </html>
    

    【讨论】:

    • 感谢 John bell 的反馈...会尝试你的风格!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多