我已经待了很长一段时间了,我离心理病房有一天。
“个人资料”页面中有一个表单用于更新用户详细信息。表单将数据发送到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
}
?>
我检查了一切。我做错了什么?
答案 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