1

我有兩個文件,一個主頁面scada.php和一個子頁面site.php。 Scada.php包含像這樣的鏈接:

<FORM action="site.php" method="post"> 
<li><td class="normal"><input type="image" name="sitename" 
value="Dublin" src="radiotower.jpg" alt="Dublin" title="Dublin"/> 
Dublin 
</td></li> 
</form> 

Site.php訪問該網站在這裏的名字:

<?php 
$site = $_POST["sitename"]; 
echo "<title id='title'>".$site."</title>"; 
?> 

然後用JS獲取它顯示在頁面上,在數據庫查詢中使用:

<script> 
var site = document.getElementById("title").innerHTML; 
document.getElementById("alert").innerHTML = "<h2>"+site+"</h2>"; 
</script> 

我查了網站名稱的字符串長度,以確保它僅包括名稱(「都柏林」),而不是HTML標題標籤的字符,長度爲6個字符正確。

這在Chrome中正常工作;一切順利,按預期運行。在IE和Firefox中,它會發出一個錯誤,指出「sitename」是一個未定義的索引。我在site.php的全局變量上運行了vardump,結果是Chrome變成了3個變量(sitename_x,sitename_y和sitename)。 Firefox和IE瀏覽器只出現了兩個(sitename_x和sitename_y),並且sitename丟失了。

我搜索了$ _POST問題,只發生在Firefox和IE中,並沒有發現任何有用的東西。有人提到沒有按下提交按鈕,但這絕對不是問題,因爲與頁面交互的唯一方式是按下輸入按鈕。在地球上哪裏可變sitename迷路了?

編輯:我最初有點不清楚。該表格包含多個輸入,所以這是更準確:

<FORM action="site.php" method="post"> 
<li><td class="normal"><input type="image" name="sitename" value="Dublin" 
src="radiotower.jpg" alt="Dublin" title="Dublin"/> 
Dublin 
</td></li> 
<li><td class="normal"><input type="image" name="sitename" value="Temple" 
src="radiotower.jpg" alt="Temple" title="Temple"/> 
Temple 
</td></li> 
</FORM> 
+1

我不認爲這些都包含了價值,不能以這種方式依賴圖像表單輸入。讓自己的生活變得簡單,將添加到表單中並使用該變量($ _POST ['site']):) – niaccurshi 2013-02-28 16:01:30

+1

同意niaccurshi - Chrome行爲實際上不符合標準。看到[這篇文章](http://stackoverflow.com/questions/5681837/cant-find-an-input-type-image-value-in-post) – 2013-02-28 16:03:05

回答

2

圖像窗體輸入應該只返回點擊它的x和y座標。我想說的Chrome是在這裏,而不是錯誤的下面通過返回的名稱和值對以及座標標準

作出站點名稱單獨隱藏的輸入,你會好到哪裏去,如:

<form> 
    <input type="hidden" name="sitename" value="Dublin" /> 
    <input type="image" name="siteimg" src="radiotower.jpg" /> 
</form> 

編輯: 如果使用jQuery是沒有問題的,我想你會像這樣

<form action="" method="post" id="form"> 
    <div><img src="radiotower.jpg" alt="Dublin" title="Dublin" class="location" /></div> 
    <div><img src="radiotower.jpg" alt="Temple" title="Temple" class="location" /></div> 
    <div><input type="hidden" name="sitename" id="sitename" value="" /></div> 
</form> 

<script> 
$(function() { 
    $('.location').click(function() { 
     var site = $(this).attr('alt'); 
     $('#sitename').val(site); 

     $('#form').submit(); 
    }); 
}); 
</script> 

EDIT 2的方法更好:添加到您的HTML包括jQuery的:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

+0

這適用於一個單一的項目,因爲你有,但我我的網頁上列出了約18個網站。我是否需要爲每個表單創建一個單獨的表單?這似乎有點笨拙。 – 2013-02-28 16:16:52

+0

你能解釋一下你想要達到的目標嗎?我可能會建議一個更簡單的解決方案。編輯:剛剛看到您的編輯,裸露在我身邊,我會編輯我的答案 – Andy 2013-02-28 16:28:16

+0

Scada.php基本上是一個網站的圖像與相關的網站名稱。當用戶點擊一個,它會將它們帶到site.php,它顯示從該網站收集的數據(網站狀態爲打開或關閉等)。最終,主網格還會與數據庫進行交談,以便它顯示網站問題「實時」(例如,它將輪詢新數據,並將給定站點的顯示框的顏色更改爲橙​​色以表示問題或紅色表示問題)。如果這是一個問題,我可以刪除radiotower.jpg;我只是認爲它使網格看起來更整潔,不像牆壁文字。 – 2013-02-28 16:31:12

0

切切實實的輸入類型應該是text如果預期值是「都柏林」 - 鍍鉻可能是菜刀,足以認識到,輸入實際上是文本,而FF和IE可能更容易受騙,甚至不會嘗試設置變量。

相關問題