【问题标题】:Form not posting all values表单未发布所有值
【发布时间】:2020-05-15 20:06:24
【问题描述】:

我写了一个带有表单的html页面; <form action="" method="post">。如您所见,此表单应发布到放置表单的相同 url。我正在使用 PHP 来捕获帖子;

if(isset($_POST['submit'])) {
    // do stuff
}

在表单中有一个带有正确名称属性的提交按钮<button type="submit" name="submit">Send</button>。如果我记录 post 变量,我会从表单中获取所有命名字段,但我没有得到这些字段的正确值。

我将添加一个稍微缩写的表单:

<form action="" method="post">
  <table class="table my-5" id="table">
    <?php foreach($parameters as $key => $value): ?>
      <tr>
        <td>
          <h6><?= $key ?></h6>
        </td>
        <td>
        <?php 
          switch($key){
            case 'Origin':
              echo '<select class="param" name="Origin">';
              foreach($ports as $port){
                echo '<option>' . $port . '</option>';
              }
              echo '</select>';
              break;
            case 'OriginDepartureDate':
              echo '<input class="param" name="OriginDepartureDate" type="text" value="' . $value . '">';
              break;
            case 'Limit':
              echo '<input class="param" data-key="Limit" name="Limit" type="text" placeholder="' . $value . '">';
              break;
            default:
              echo '<span class="param">'. $value . '</span>';
              break;
          } ?>
        </td>
      </tr>
    <?php endforeach ?>
  </table>
  <button type="submit" name="submit">Send</button>
</form>

以及用于构建表单的参数:

$parameters['Origin'] = null;
$parameters['OriginDepartureDate'] = null;

$orderbyArr = ['DRS','GRQ','LGG',...];

奇怪的是,有些值确实通过了,而另一些则没有,Origin 值通过了,Limit 值也通过了,但是(不是“DestinationDepartureDate”而是:) OriginDepartureDate 没有。

我这几天一直在查看我的代码,但我在逻辑中找不到任何明显错误的地方。如果一些新鲜的眼睛能看到我看不到的东西,那就太好了。

【问题讨论】:

  • "I'll add a slightly abbreviated version of the form" - 您可以通过发布的内容复制该问题作为自己的测试吗?
  • 你在哪里/如何定义$orderbyArr数组?
  • @CarlBinalla 抱歉,我的意思是“OriginDepartureDate”,将修改问题。
  • @mitkosoft $orderbyArr 变量是 $ports 变量的有序版本,将修改问题,谢谢...
  • 祝调试顺利!

标签: php html post


【解决方案1】:

当你注入 PHP 代码以在你的 HTML 中显示某个值时,你必须 echo 值本身,所以:

代替:

<input class="param" name="OriginDepartureDate" type="text" value="<?php $value ?>">

你需要:

<input class="param" name="OriginDepartureDate" type="text" value="<?php echo $value ?>">

【讨论】:

  • 很好,我的意思是使用简写来回显:&lt;?= ... ?&gt;,但显然忘记了。我没有将此标记为正确答案的唯一原因是因为在提交表单之前该值总是会发生变化。仍然没有实现价值。
【解决方案2】:

我相信您忘记设置选项值。你可以在这里阅读更多关于它的信息Using $_POST to get select option value from HTML

// options need to have a value
<option value="<?=$orderby?>"><?= $orderby ?></option>

【讨论】:

  • 注意我的反对意见,但是如果没有在 option 元素上设置值,则将使用 TEXT 值,因此在这种情况下,值和文本都是相同的,可以从option 中省略value 属性
  • 明确为您的选择赋予价值始终是最佳实践。
  • 我倾向于同意
  • @alithedeveloper,这是一个很好的观点,即使它不是我的问题的原因。即使收益同样微乎其微,但为期权增加价值并不费力......
【解决方案3】:

这里:If isset $_POST

这里:Avoid using isset ...

您可以阅读更多内容。简单地说,测试变量的内容更安全。 我可以推荐使用

 <input type="submit" name="sent" value="send/OK" />

这为您提供了 isset() 的预期行为。

【讨论】:

  • 通常我会针对 !empty() 结尾进行测试,然后测试 post 变量的内容,但由于这不是关键代码或面向用户,所以我不能被嘲笑......
猜你喜欢
  • 1970-01-01
  • 2013-12-18
  • 2013-01-29
  • 2013-09-19
  • 2019-09-04
  • 2021-08-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多