Firefox和IE中的PHP $ _POST索引未定义,适用于Chrome

时间:2013-02-28 15:57:02

标签: php internet-explorer google-chrome firefox undefined-index

我有两个文件,一个主页面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)并且缺少网站名称。

我搜索了只出现在Firefox和IE中的$ _POST问题,但没有找到任何有用的东西。有人提到没有按下提交按钮,但这绝对不是问题,因为与页面交互的唯一方法是按输入按钮。变量网站在哪里迷失了?

编辑:我最初有点不清楚。表单包含多个输入,因此更准确:

<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>

2 个答案:

答案 0 :(得分: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>

编辑2:将其添加到HTML中以包含jQuery:

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

答案 1 :(得分:0)

如果预期的值是&#34;都柏林&#34;那么输入类型应该是text。 - Chrome可能足够敏锐,可以识别出输入实际上是文本,而FF和IE可能更容易上瘾,甚至没有尝试设置变量。