2015-11-19 64 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