【问题标题】:php form action php selfphp 表单动作 php self
【发布时间】:2011-10-15 07:39:16
【问题描述】:

我有一个这样的 php 表单。

<form name="form1" id="mainForm" method="post"enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>">

</form

在表单操作中,我想使用带有参数的页面名称。比如house.php?p_id=10111。但是 $_SERVER['PHP_SELF'] 只给出house.php (我的页面完整网址是house.php?p_id=10111 就像这样)请帮我解决这个问题。谢谢。

【问题讨论】:

  • 这不是完整的网址。就是 url + GET 参数。
  • @Alex Ackerman:其实是path 加上query
  • 是的。亚历克斯是正确的。我现在使用$_SERVER['PHP_SELF']."?P_id=".$id
  • 混合发布和获取参数是不好的做法。如果您要发布,则使用隐藏的表单字段来传递任何“get”类型的值。
  • 我不同意@MarcB 将查询字符串参数放在操作中是不好的做法。有许多网站使用查询字符串来确定要加载哪些内容(页面或状态)并使用 POST 的内容来携带数据。

标签: php forms action


【解决方案1】:

把它留空怎么样,有什么问题?

<form name="form1" id="mainForm" method="post" enctype="multipart/form-data" action="">

</form>

此外,您可以省略 action 属性,它会按预期工作。

【讨论】:

  • 谢谢。我认为这是最简单、最好的方法。
  • 留空会破坏 w3c 验证(以防万一)
  • @jBaron 是的,在 HTML5 中就是这种情况,但您可以完全省略空的 action="" 属性。它将按预期进行验证和工作。
  • @Shef 对同一页面使用 post 方法是不好的做法。浏览器会在刷新页面时始终提醒。
  • @Avnishalok 每当有人在提交后刷新页面时,浏览器都会发出警报。提交是在不同页面还是在同一页面上都没有关系。
【解决方案2】:

将操作值留空将导致表单回发到自身。

【讨论】:

    【解决方案3】:

    您可以将操作留空或使用以下代码:

    <form name="form1" id="mainForm" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI'];?>">
    </form>
    

    【讨论】:

      【解决方案4】:

      这是完美的。试试这个:)

      <form name="test" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      /* Html Input Fields */
      </form>  
      

      【讨论】:

      • 这允许 XSS 攻击,你需要过滤/清理 PHP_SELF
      【解决方案5】:

      您也可以使用 echo 快捷方式,而不是输入“echo blah;”如下图:

      <form method="POST" action="<?=($_SERVER['PHP_SELF'])?>">
      

      【讨论】:

      • 这允许 XSS 攻击,你需要过滤/清理 PHP_SELF
      【解决方案6】:

      如果您不喜欢依赖$_SERVER 变量,另一种(在我看来是正确的)方法是使用__FILE__ 常量。

      $parts = explode(DIRECTORY_SEPARATOR, __FILE__);
      $fileName = end($parts);
      echo $fileName;
      

      关于魔术和预定义常量:12

      【讨论】:

        【解决方案7】:

        如果您想安全,请使用:&lt;form method="post" action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?&gt;"&gt;

        【讨论】:

          【解决方案8】:

          最简单的方法是将操作留空action="" 或从表单标签中完全省略它,但这是不好的做法(如果你关心的话)。

          如果你真的关心它,你能做的最好的就是:

          <form name="form1" id="mainForm" method="post" enctype="multipart/form-data" action="<?php echo($_SERVER['PHP_SELF'] . http_build_query($_GET));?>">
          

          使用它的最大好处是,即使是数组也会被转换,因此无需对任何类型的数据执行任何其他操作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-01
            • 1970-01-01
            • 2014-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-29
            相关资源
            最近更新 更多