【问题标题】:Why is button considered pressed on page refresh and page access?为什么在页面刷新和页面访问时按钮被认为是按下的?
【发布时间】:2020-01-30 12:44:23
【问题描述】:

我在index.php 有一个简单的提交表单:

<?php
    include('inputs.php');
?>
        <form method="post" action= "/index.php">
            <input class="button" id="restart_device" name="restart_device" type="submit" value="Restart Display" />
        </form>

以及inputs.php 文件中的操作:

if(isset($_POST['restart_device'])) {
    shell_exec("sudo /var/www/html/restart_device.sh");
}

问题是每次页面刷新或每次访问页面时都会执行此代码。我不想要这种行为。我只想在按下按钮时执行shell_exec("sudo /var/www/html/restart_device.sh");,而不是在页面访问或页面刷新时执行。

我也尝试过使用&lt;form method="post" action= ""&gt;,但没有成功。

【问题讨论】:

  • 您在刷新页面时检查了 $_POST['restart_device'] 值吗?因为当不提交表单时,这个参数不会设置值。
  • 我不明白你想说什么。这就是涉及输入表单的整个代码。

标签: php forms post button


【解决方案1】:

当刷新加载了 POST 请求的页面时,大多数浏览器会询问您是否要重新发出请求,从而再次触发操作。要阻止此提示出现追加

header("Location: /");
die();

在 shell_exec 之后。这将在操作完成后将浏览器重定向到同一页面,导致它切换到不带任何参数的 GET。

【讨论】:

  • 如果我在同一页面上有多个提交表单怎么办? header("Location: /"); die(); 会让其他表单无法提交值吗?
  • 它基本上会停止整个执行并在触发时重新加载页面。如果您的其他表单的逻辑是正确的,这应该不是问题
  • 太棒了。我在if(isset($_POST['restart_device'])) { } 中添加了这些行,它可以工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
相关资源
最近更新 更多