【问题标题】:PHP variable as form actionPHP 变量作为表单动作
【发布时间】:2015-07-22 00:29:58
【问题描述】:

我想制作一个表单,其操作由表单中的一个选项定义。

    <form method="POST" action="../<?php echo $location?>.php">
    <label>Post to: <select project="location" id="location" name="location">
        <option value="null"></option>
        <option value="$var1">Option1</option>
        ...
    </select><br>
    <input id ="button1" type="submit" name="submit" value="Post">
</form>
<?php $location = $_POST["location"]; ?>

单击提交按钮时,它一直使用空值作为位置;有没有办法在表单选择发布位置之前存储 $location 的值?

【问题讨论】:

  • 所以您问如何根据所选选项更改表单的action 实时(无需重新加载服务器)。对我来说,这听起来更像是一个 JavaScript 问题——你在那个领域有什么经验吗?
  • 我对 JavaScript 了解不多,但我可以研究一下;我能保持目前的形式吗?
  • 移动 到表单元素之前 BUT 如果变量依赖于当前页面值,那么第一次通过 $location 将始终为空白,因为它没有 bee还没定。
  • 您是否尝试将表单提交到当前页面?行动的价值是什么?

标签: php html forms post action


【解决方案1】:

没有。

PHP 在服务器上执行。当您发布此表单时,PHP 仅在发布时知道该变量的内容。所以在第一次渲染页面时,变量当然是空的。

但你可以用 Javascript 来做到这一点:

<form id="postForm" method="POST" action="">
    <label>
        Post to:
        <select project="location" id="location" name="location">
            <option value="first"></option>
            <option value="handle-something">Option1</option>
        </select>
    </label>
    <input id="button1" type="submit" name="submit" value="Post">
</form>

<script>
    document.getElementById('location').onchange = function() {
        // maybe you can get val via this or so
        var location = document.getElementById('location').value;
        document.getElementById('postForm').action = '/' + value + '.php';
    };
</script>

不是testet。

【讨论】:

    【解决方案2】:

    虽然您可以在渲染时动态生成表单,但在提供表单后您无法使用 php 更改它。正如@copynpaste 已经显示的那样,您将需要为此使用javascript。您可以使用另一个选项。

    将表单发送到标准操作并在您决定做什么的服务器端提取变量。

    示例:

    <form method="POST" action="formaction.php">
            <label>Post to: <select project="location" id="location" name="location">
                <option value="null"></option>
                <option value="$var1">Option1</option>
                ...
            </select><br>
            <input id ="button1" type="submit" name="submit" value="Post">
    </form>
    

    formaction.php 内部

    $action = $_POST['action'];
    
    include "{$action}.php";
    

    这将包括一个基于“位置”值的文件。

    【讨论】:

      【解决方案3】:

      由于您不太可能希望根据未经处理的帖子数据将帖子数据转到可能是任意的、不受控制的文件位置,因此我喜欢检查数据值是否可接受值的想法;然后应用“默认”包罗万象来解决两种情况:(1)在没有发布数据的情况下加载表单的情况; (2) 表单加载了意外或不可接受的发布数据的情况:

      <?php 
          $location = $_POST["location"];
          switch( $location )
          {
              case 'create':
              case 'remove':
              case 'update':
              case 'delete':
                  $form_location = $location;
                  break;
              default:
                  $form_location = 'default';
                  break;
          }
      ?>
      <form method="POST" action="../<?php echo $form_location; ?>.php">
          <label>Post to: <select project="location" id="location" name="location">
          <option value="null"></option>
          <option value="$var1">Option1</option>
          ...
          </select><br>
          <input id ="button1" type="submit" name="submit" value="Post">
      </form>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-16
        • 1970-01-01
        • 1970-01-01
        • 2014-06-09
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多