【问题标题】:if (isset($_POST not working for Internet Explorerif (isset($_POST 不适用于 Internet Explorer
【发布时间】:2014-02-25 04:42:17
【问题描述】:

我有一个提交到同一页面的表单提交,以通过 php 删除服务器上的图片。此页面上有多个表单和提交,由于某种原因,它无法使用 Internet Explorer。适用于 Chrome 和 Firefox。点击提交后,页面执行第一个 if (isset($_POST not the correct one.

HTML

<form action="owner.php" method="post" class="registration_form">

 <input type="text" name="album_name" />
 <input type="text" name="album_code" />
 <input type="hidden" name="add_album" value="TRUE" />
 <input type="submit" value="Create Album" />
</form>

<form action="owner.php" method="post" class="registration_form">
  <input type="hidden" name="albumdelete" value="TRUE" />
  <input type="radio" name="album" value="'.$album[$key_Number].'">
  <input type="submit" value="Delete">
</form>

<form action="owner.php" method="post">
  <input type="hidden" value="true" name="picdelete">
  <input type="hidden" name="picture" value="'+d[o].src+'">
  <input type="submit" value="Delete This Picture" >
</form>

PHP

if (isset($_POST['add_album'])) {
  all of my add album code      
  **********This is the code it runs*****

} else if (isset($_POST['albumdelete'])) {


}else if (isset($_POST['picdelete'])) {

  *********This is the code it should run*********
  Works fine on all browsers I test except IE. Tried multiple computers
}

【问题讨论】:

  • 您是否有任何嵌套表单/错误终止的表单结束标签?查看是否所有&lt;form&gt;标签都有对应的&lt;/form&gt;标签
  • isset 不可能是问题,因为它的服务器端脚本与您使用的任何客户端无关.. 在您的 if(isset.. 尝试 print_r(@$_POST); 之前,看看你得到了什么.
  • 我在任何地方都看不到name="add_album",仅适用于您的picdelete,因此它将适用于您的else if 条件,因为第一个条件没有得到满足。所以,这不是IE thing,而是你的代码;如果这就是你所拥有的。另外,PHP 是服务器端的,而不是客户端的。
  • 有趣的是,尽管它得到的所有废话,IE 是(并且一直是)更严格地使用/呈现无效的 HTML
  • @Fred-ii- 我假设add_album 字段是在 OP 的其他 “多种形式并提交” 之一中定义的。逻辑很好,我想说 Scuzzy 在第一条评论中一针见血。 IE 非常不能容忍错误的标记

标签: php forms


【解决方案1】:

使用 isset($_POST['submit']) 检查表单是否已发布或提交是不好的做法,因为它与 Internet Explorer 不兼容。

此方法依赖于 $_POST 数组中存在的表单的提交按钮。问题是,如果用户按下回车键提交表单,Internet Explorer 不会将提交按钮作为 post 变量发送。

这是一个典型的例子:

PHP 代码

<?php 

    if(isset($_POST['submit'])) 
    { 
        // a form was submitted (POSTED) 
    } 

?>

即使是中级以上的程序员,我也经常看到这种情况。问题可能在于许多质量低劣或过时的在线 PHP 教程可用。

如果您依赖此方法并且用户使用回车键提交表单,那么很可能会发生的情况是页面似乎只是刷新。显然,这可能会让用户非常沮丧,特别是如果它是一个长表格。这是可访问性故障,用户应该始终能够使用回车键提交表单。一个例子是一个特殊的浏览器,它适合不能使用鼠标的残疾用户,或者使用任何浏览器但没有鼠标的用户。

解决方案

检查表单是否已提交的最佳做法是使用服务器变量 REQUEST_METHOD。如果提交了表单,则此变量将设置为 POST(假设表单具有 POST 方法。以下是使用 PHP 检测表单提交的最佳实践。

PHP 代码

<?php 

    if($_SERVER['REQUEST_METHOD'] == 'POST') 
    { 
        // a form was submitted (POSTED) 
    } 

?>

以上内容适用于所有浏览器,因为它不依赖于 post 变量中存在的提交按钮。

【讨论】:

  • 可以修改这个以知道发布了哪个表单吗?也许 if($_SERVER['REQUEST_METHOD'] == '$POST[form_name]') ?????
  • if 条件下,我们正在检查请求方法!尝试打印 $POST 变量的值以检查 if 条件内的内容。
  • 我的情况的问题是我的表单被设置在脚本中。我将
    移到了
    之外,在那里我调用了包含表单信息的脚本。现在IE很高兴,我也很高兴。感谢您的帮助并为我指明正确的方向
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 2014-07-04
  • 2015-03-05
  • 1970-01-01
  • 2016-04-03
相关资源
最近更新 更多