2016-10-14 52 views
0

我有一個輸出HTML的PHP​​文件。由PHP創建的HTML是不按順序創建的

爲便於配置,我有一個second PHP文件,該文件包含在first PHP文件中。這包括文件只是包含一個數組定義如下:

<? 
$myArray = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3"); 
?> 

在我的第一PHP文件我有以下

<? include("second.php"); ?> 

<label>Select here: 
<select id='mySelect'> 
<? foreach ($myArray as $keyString=>$valueString) { ?> 
    <option value='<?= $keyString; ?>'><?= $valueString; ?></option> 
<? } ?> 
</select> 
</label> 

然而如下產生HTML輸出:

<label>Select here: 
<select id='mySelect'> 
</select> 
<option value='key1'>value 1</option> 
<option value='key2'>value 2</option> 
<option value='key3'>value 3</option> 
</label> 

它將顯示爲一個空的選擇下拉列表,並顯示下面顯示的選項的文本!

我敢肯定這是一件愚蠢和簡單,因爲我敢肯定,我以前做過很多次沒有問題...


[更新]

調查後事實證明只有當我在FancyBox中顯示first PHP頁面時纔會發生這種情況 - 當我直接加載時,這些選項將包含在您期望的<select>中。

的的fancybox是通過JavaScript經由圖像的onClick事件打開如下(圖像是打開的fancybox在背景頁上,它是不first.php或second.php的一部分):

function openFirstPHP() { 
    $.fancybox({ 
     href: "/first.php", 
     type: "ajax", 
     afterShow: function() { 
      // do some setting of some radio buttons' states - which works fine 
     } 
    }); 
} 

有關信息,我叫first.php這種方式,而不是在iframe或什麼是原因:

<img src="myImage.png" alt="my image" onClick="openFirstPHP();"> 
在我的JavaScript我已經(在 first.js包含在 first.php與通常 <SCRIPT>標籤)

它也與調用頁面交互,因此避免我必須引用不同的文檔對象(我認爲)。

基本上一切工作沒有問題first.php - 閱讀和餅乾的設置,與調用PHP頁面變量等不工作唯一的相互作用是這些<options>標籤的插入順序不與<select>標籤。

+0

您使用的是哪個版本的PHP? – Theraot

+0

- 版本5.5.21 –

+0

這是不可能發生:)所有應該按預期工作。你使用任何複雜的緩存或特殊配置?這是一個原始輸出還是你在瀏覽器的'console'中看到的東西?看到測試執行,它在所有的php版本都可以正常工作... https://3v4l.org/mHc2r –

回答

0

事實證明,這是一個奇怪的一個在我的HTML標記所造成的筆誤,而不是PHP或OUT-問題序列標記生成。

我的開頭<select>聲明有一個迷路/在其中。即

<select id='mySelect' />. 

由於瀏覽器儘自己所能,使畸形的HTML感,看在督察<select>之後,隨即由</select>那麼我的選擇和我的代碼收盤</select>正被完全取消,因此<option>聲明在選擇之外,因此被忽略。

但是,奇怪的是,這隻發生在FancBoxy內部調用時,直接調用頁面時,它的工作沒有問題!

刪除錯誤/在開放<select>聲明徹底解決了這個問題。

0

將您的循環從'for'更改爲'foreach'。

+0

這是一個錯字,抱歉。 –

1

你寫了一個for循環,但你把它當作一個foreach循環。

這應該工作:

<? foreach ($myArray as $keyString=>$valueString) { ?> 
    <option value='<?= $keyString; ?>'><?= $valueString; ?></option> 
<? } ?> 
+0

真正的問題應該是OP如何獲得任何輸出。該代碼是扁平化的語法錯誤,應該已經死於'意外'作爲'(T_AS)'致命的解析錯誤 –

+0

對不起,作爲一個錯字錯誤..當然,這是一個foreach ... –

0

試試這個:

<?php include_once("second.php"); 
?> 

<label>Select here: 
<select id='mySelect'> 
<?php foreach ($myArray as $keyString=>$valueString) { ?> 
    <option value='<?php echo $keyString; ?>'><?php echo $valueString; ?></option> 
<?php } ?> 
</select> 
</label>