php表单提交时获取不到post数据的解决方法

原文:http://blog.csdn.net/whd526/article/details/53263181

博主运行PHP环境:windows+phpstorm+xampp

初学php,用echo $_POST["variable"]和var_dump($_POST) 都获取不到post数据。

解决方法如下:

1.找到php.ini 配置文件,查找enable_post_data_reading变量,确保其打开状态:

2.观察你的运行php的浏览器地址,会发现在PhpStorm中打开浏览器使用的服务端口号是63342(URL是localhost:63342/这样的形式)

因此问题的原因在于:PhpStorm默认使用的是自带的内部服务器,却不使用xampp里面的apache服务器。phpStorm这个内置服务器使用63342端口,而且服务器内部有问题,导致POST方法异常;而如果把项目放在Apache服务器的工作目录下,在地址栏输入localhost,此时使用的是Apache服务器,默认端口号为80,Apache服务器可以正常运行程序。

既然PhpStorm内部服务器有问题,那解决方法就是想办法不使用内部服务器。有两种方法:

1.将项目创建在Apache服务器的工作目录下,每次运行时在浏览器地址栏直接输入localhost地址

2.如果仍希望通过从PhpStorm中打开浏览器调试程序,可以通过更改配置实现:

(1)首先将apache服务器目录映射到本地目录

做法如下:

1. 找到 /xampp/apache/conf/httpd.conf 文件

2. 找到 <IfModule alias_module> </ifModule> 代码块

3. 在<IfModule alias_module>的子级加上如下代码:

[plain] view plain copy

  1. # /phpworkspace/ : 其它磁盘上目录的别名, 就是你想映射过来的目录的别名
  2. # "E/phpworkspace/" : 这个是目录的绝对路径
  3. Alias /phpworkspace/ "E/phpworkspace/"
  4. # 现在就可以通过 //localhost/phpworkspace/ 访问到 E盘下phpworkspace文件夹里的项目了

4.

在与 <ifModule alias_module> 同级的地方加上一段代码, 如下:

[plain] view plain copy

  1. <Directory "E/phpworkspace/">
  2. AllowOverride All
  3. Options Indexes FollowSymLinks Includes ExecCGI
  4. Require all granted
  5. </Directory>

完工. 现在重启Apache, 访问 : http://localhost/phpworkspace/ 就可以了

(2)然后在PhpStorm中,依次找到File->Settings->Build, Execution, Deployment->Deployment,初始是空的,点击绿色的加号添加本地服务器,名字localhost就好了,Type选择In place:

创建完成后,右侧Connection标签下默认的设置已经将服务器配置为80端口下的Apache服务器,即http://localhost

将其改成你映射到本地项目的工作目录:

Mappings标签下的Local path设置成你本地项目的目录:

此时从PhpStorm中点击浏览器,访问的URL已经没有了63342端口这个字段,而是使用了本地Apache服务器,相应的表单数据也可以正常接收了

参考资料:

1.知乎:木子林夕的回答

2.HolyNova的博文:Apache HTTP 服务器目录映射到本地目录

时间: 2024-10-06 00:30:41

php表单提交时获取不到post数据的解决方法的相关文章

(转)html 表单提交时,无法获取到disabled属性的input值

input的字段当为disabled是,无法获取值,无法改变值,所以在表单提交时,获取不到值.可以用randomly解决这个问题. <input name="country" id="country" size=12 value="demo" disabled="disabled" > 但是将disabled = "disabled"换成randomly="randomly"

表单提交时,更新的操作

//原程序的写法,意思就是,先查出数据库里面的记录,然后用提交过来的数据进行覆盖数据库里面的值,调用的方法是SetAttribute public IActionResult UpdateSaleAfterDTID(int id, string proname, string isupdate, IFormCollection values, int orderid) { if (!string.IsNullOrEmpty(isupdate)) { //表单提交时触发事件 var fchelpA

表单提交时如何将错误信息传递到页面中,并且保存原来提交数据

曾经何时,你还有我或许都在困惑,如何方便的将验证不通过的表单信息再返回到前台页面,例如我注册一个账号,辛辛苦苦填写了N多项,一个格式验证没有通过,一切都需要充填,虽然Ajax可以解决这个问题,但是我们总不能把所有表单提交都弄成ajax,更何况有若干人就是没事把javascript给禁止了.哎哎,好了解决方案来了,下面以用户登录为例,说说我的解决方案. 服务器端用nodejs实现: login.html 简单的提交表单 <form action="" id="loginF

表单提交时编码类型enctype详解

很早以前,当还没有前端这个概念的时候,我在写表单提交完全不去理会表单数据的编码,在action属性里写好目标URL,剩下的啊交给浏览器吧~但是现在,更多时候我们都采用Ajax方式提交数据,这种原始的方式仅仅被当成优雅降级的产物. 当我们用异步方式提交表单,就需要稍微关注一下表单数据的编码问题了.回想一下,在写回调函数时是不是有根据过请求的Content-Type写不同业务逻辑的经历,那这个Content-Type和表单的编码有什么联系吗?有没有在明明前端已经发数据给后端了,后端的小伙伴死活取不到

表单提交时submit按钮的值没有被提交

FORM表单中,submit提交的时候,有时候有值,有时候无值 FORM表单中,submit的name是Submit.如下<input type="submit" name="Submit" value="提交表单" /> 1.出现的几种情况 1.当点击submit按钮时,FORM被提交,提交后获取的数组中有Submit下标的值 2.回到FORM表单,直接敲回车提交,这时候发现获取的数组中没有Submit下标. 3.在浏览器版本低的情

使用 HttpClient 进行表单提交时,遇到的问题

问题 在开发微信支付的小微商户进件接口时,需要通过表单来上传身份证图片等数据.在微信支付接口文档也说明了,需要使用 multipart/form-data 的方式发送请求..NET 提供了 MultipartFormDataContent 类型,帮助我们构建表单请求,故有以下代码: var form = new MultipartFormDataContent() { {new StringContent("Value"),"Name}, {new ByteArrayCont

表单提交时判断

<input type="submit" id="myBtn" />换成: <input type="button" id="myBtn" />用 $("#myBtn").click(function(){   ...//判断验证}); 表单提交js: function formSubmit(){ if(flag=="1"){ $("#form"

Jquery表单提交后获取返回Json值

1.给form添加id值: <form action="/News/SaveMessage" method="post" accept-charset="utf-8" class="form" id="frm-reg" name="frm-reg"> 设置所有input标签的name属性值为数据库的字段值,即可以传值到后台 2.给提交按钮添加id值: <input cl

js实现无刷新表单提交文件,将ajax请求转换为form请求方法

最近在做项目的时候遇到一个需要上传文件的需求,因为ajax请求是无法上传二进制文件流的,所以只能用form表单提交,而form提交有一个问题就是会使页面刷新,本文解决了form表单提交文件时页面刷新的问题. 一.无刷新实现form提交文件 将form的target指向为一个iframe就可以实现无刷新提交文件了,但关键是还需要看到后台返回的数据,所以还需要为该iframe注册一个回调函数,因为iframe和该页面在同域内,所以可以在iframe里可以调用该回调函数,就可以看到后台返回的数据了.实