PHP表单似乎是发送空POST数据

时间:2018-04-10 13:00:59

标签: php html forms post

我已经待了很长一段时间了,我离心理病房有一天。

“个人资料”页面中有一个表单用于更新用户详细信息。表单将数据发送到update.php文件,该文件执行其余操作。问题是没有数据到达update.php脚本

这是表格

<form action="update.php" method="POST">
<div class="form-group">
    <label>Username</label>
    <input class="form-control" type="text" value="<?php echo $username; ?>" disabled="">
</div>

<div class="form-group">
    <label>E-Mail</label>
    <input class="form-control" name="email" type="text" value="<?php echo $email; ?>" disabled="">
</div>

<div class="form-group">
    <label>Hobbies</label>

    <select class="form-control select-mini" name="hobby">
        <option value="Swimming">Swimming</option>
        <option value="Jumping">Jumping</option>
    </select>
</div>

<div class="form-group">
    <label>House Address</label>
    <input class="form-control" type="text" name="address" value="<?php echo $acc_no; ?>">
</div>

<div class="form-group">
    <input type="submit" value="Update Account" class="btn btn-success btn-sm">
</div>
</form>

这是update.php脚本

<?php

require 'php_file.php';
print_r($_POST); // check if post data ever arrived. Guess what? It never did :(
if (
    !empty($_POST['hobby'])||
    !empty($_POST['address'])){

        $hobby = $_POST['hobby'];
        $address = $_POST['address'];
        $email = $_POST['email'];

        //Do something else with post data

    }

?>

我检查了一切。我做错了什么?

1 个答案:

答案 0 :(得分:0)

显然我用来隐藏脚本的.php扩展名的HTACCESS规则是罪魁祸首。

以下这些规则基本上将所有请求重定向到非.php版本。

RewriteRule ^(.+)\.php$ /$1 [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,END]

但是我忘记了他们的工作做得非常好并且重定向了每个请求,包括表单提交。因此,当存在重定向时,HTTP请求方法可以改变。在这种情况下,我发送了一个带有我的表单和我的update.php脚本的POST请求。到了update.php脚本时,问题才出现了,这是一个GET请求。

Cbroe指出了这一点,在检查Firefox devtools上的网络选项卡时,我看到了302重定向。

解决方案:我只是将操作从 update.php 更改为更新。这停止了​​任何重定向,我的POST数据最终被发送到我的update.php脚本。

感谢评论部分的每个人都说了一句话,最重要的是感谢CBroe