2015-11-19 61 views
-3

我已经看过关于此问题的其他问题,但没有人对我有任何答案。我有这行代码:在HTML输入标签中运行PHP函数

foreach ($categories as $category){ 

echo '<label><input type="checkbox" id="type-'. $category->name . '" value="'. $category->name . '" class="shopping" name="top_level[]" <?php checked('. $category->name . ', $current) ?>>'. $category->name . '</label>'; 
} 

当我运行该文件时,正确的字段显示,但在文本前有一个'>'。 Firebug将HTML输出显示为:

<input type="checkbox" id="type-Fashion" value="Fashion" class="shopping" name="top_level[]" <?php="" echo="" checked(fashion,="" $current)="" ?=""> 

为什么在整个PHP代码中都有这些=""

checked()函数是Wordpress并返回HTML属性checked='checked',但我相信问题在于在HTML标记中使用PHP。

该文件与.php一起保存,我在我的WampServer上运行PH P5.5.12。

我试过很多事情,以及别人的建议:

foreach ($categories as $category){ 
?> 
    <label><input type="checkbox" id="type-<?php echo $category->name; ?> value="<?php echo $category->name; ?>" class="shopping" name="top_level[]" <?php if(in_array($category->name, $current)){ echo 'checked="checked"';} ?>><?php echo $category->name; ?> </label> 
    <?php 
    } 

得到这个错误:

WARNING: IN_ARRAY() EXPECTS PARAMETER 2 TO BE ARRAY, BOOLEAN GIVEN

$current是一个数组。

另一个帖子建议使用等号<?= ..... ?>。这并没有改变任何事情。

如果我从输入标签中删除PHP代码,一切正常。

我很感激任何帮助。提前致谢!

+0

你显然错了'$ current'是一个数组。在循环之前放入'var_dump($ current)'。 – Barmar

回答

2

在执行文字输出时(在使用?>退出脚本模式之后),而不是在执行PHP程序代码时,只需要使用<?php。如果您处于echo声明中,那么您正在执行PHP代码。按照连接变量的方式连接函数调用。

echo '<label><input type="checkbox" id="type-'. $category->name . '" value="'. $category->name . '" class="shopping" name="top_level[]"' . checked($category->name, $current) . '>'. $category->name . '</label>'; 
+0

可能想在这里重新考虑你的言论 –

+1

@Pamblam不确定你的意思。我添加了一些澄清。 – Barmar

+0

换句话说,'<?php'带你离开一个普通的html上下文并进入一个PHP上下文。但OP已经*在PHP上下文中**和**在字符串中。所以'<?php'只是被回显的文本的一部分,而不是进入PHP上下文。 –

2

请注意上面的颜色突出显示。你缺少一个"

[..snip..]id="type-<?php echo $category->name; ?> value="<?[..snip..] 
               ^---here 

所以id属性不会终止后,才value=,导致所有的key = value对要出不同步。

你看到的是你的浏览器试图清理你生成的错误HTML。

+0

谢谢。这摆脱了错误。不过,我仍然想知道原始的echo语句不解析php。 – user1554726

+0

@ user1554726'<?php'不在字符串内部分析。您回应的所有内容仅发送给浏览器。 – Barmar