2012-01-25 76 views
7

我有最简单的形式,我想要做的就是回应无论在文本框中写的任何东西。

HTML:

<form action="" method="post"> 
    <input type="text" name="firstname"> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

PHP:

if(isset($_POST['submit'])){ 
    $test = $_POST['firstname']; 
    echo $test; 
} 

问题是,它不工作,我的服务器上(它在另一台服务器上)。有没有人有一个想法可能是错的?服务器上还有其他表单,并且工作正常。

+4

我一直建议'action'属性有一个值... – ChrisW

+4

做什么你会得到,如果你'var_dump($ _ POST)'?并且,'var_dump($ _ REQUEST)' – DaveRandom

+0

您的服务器运行的是哪个版本的PHP? –

回答

14

,你可以做几件事:

  1. 请确保您的窗体上的“动作”属性导致到正确的目的地。
  2. 尝试使用$ _REQUEST []而不是$ _ POST,看看是否有任何变化。
  3. [可选]尝试既包括“名称”和“id”属性例如

    <input type="text" name="firstname" id="firstname"> 
    

  4. 如果你是在Linux环境中,检查是否有两个读/写权限的文件。

此外,这也link可能帮助。

编辑:

你也可以替代 if(isset($_POST['submit'])){ 本: if($_SERVER['REQUEST_METHOD'] == "POST"){。这始终是检查表单是否已被提交

+6

You don不需要身份证。 – PiTheNumber

+0

谢谢,我已经尝试了几乎所有的链接。没有成功。 – ptinca

+0

试过#4。还是一样。 – ptinca

-3

尝试获得,而不是用于测试的最佳方式方面的原因

<form action="#?name=test" method="GET"> 
    <input type="text" name="firstname" /> 
    <input type="submit" name="submit" value="Submit" /> 
</form> 

if(isset($_GET)){ 
    echo $_GET['name'] . '<br>'; 
    echo $_GET['firstname']; 
} 
+1

没什么。就好像忍者吃了这个价值。 – ptinca

+0

为什么这会有所作为? – kapa

+0

巨大的安全风险。只获取你需要的东西。 – Frankline

0

没有什么不对您的代码。这个问题在这里不可见。

  1. 检查提交后,脚本是否被调用。

  2. 看一看被提交的内容:var_dump($_REQUEST)

0

尝试做var_dump($_GLOBALS)

一个潜在原因可能是有你之前运行的脚本会取消全局变量。如:

unset($_REQUEST); 

或甚至。

unset($GLOBALS); 

这可以通过php.ini配置中的auto_prepend_file选项完成。

3

而不是使用$ _ POST的,使用$ _REQUEST:

HTML:

<form action="" method="post"> 
    <input type="text" name="firstname"> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

PHP:

if(isset($_REQUEST['submit'])){ 
    $test = $_REQUEST['firstname']; 
    echo $test; 
} 
3

我也有这个问题。错误是在htaccess中。如果您有重写规则影响动作url,则无法读取POST变量。

要解决这个问题增加,必须添加此规则htaccess的,刚开始时,为了避免重写URL:

重写规则^ my_action.php - [PT]

9

我有类似的东西今天晚上,这是驾驶着我的屁股。提交表单给了我$ _REQUEST中的值,而不是$ _POST。

最后我注意到实际上有两个请求在Firebug的网络选项卡上进行;首先是一个带有301响应的POST,然后是带有200响应的GET。

狩猎关于interwebs它听起来像大多数人认为这是与mod_rewrite导致POST请求重定向,从而更改为GET。

在我的情况下,这不是mod_rewrite的责任,这是更简单的事情......我的POST的URL还包含一个GET查询字符串,该字符串在URL上没有结尾的斜杠。这是导致Apache重定向。

现货的差异...

坏:http://blah.de.blah/my/path?key=value&otherkey=othervalue
好:http://blah.de.blah/my/path/?key=value&otherkey=othervalue

底部一个不会导致重定向并给了我$ _ POST!

+0

我有一个'action =“booking.php”'的表单,它不起作用。原来,这是因为我的.htaccess重写.php地址来删除扩展名。改变'动作=“预订”'诀窍 – binaryfunt

+0

你的回答为我节省了很多时间。就我而言,我不得不形式'动作=“mysite.com/somefolder'和导致该'$ _POST'是空的。但是,当我改变了行动'mysite.com/somefolder /'它的工作如预期。谢谢很多 – Ahmad

-1
  1. HTML文件和PHP文件都应该位于在C htdocs文件夹:\ Apache2的(如果你使用Apache网络服务器)。
  2. 通过输入http://“localhost/html_file_name.html”打开html文件
  3. 现在在字段中输入您的数据..您的代码将运行..
3

转储全局变量,找出你所拥有的页面范围:

var_dump($GLOBALS); 

这会告诉你“什么”和“在哪里”关于你的页面上的数据。

2

试试这个
HTML代码

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
      <input type="text" name="firstname"> 
      <input type="submit" name="submit" value="Submit"> 
     </form> 

PHP代码:

if(isset($_POST['Submit'])){ 
$firstname=isset($_POST['firstname'])?$_post['firstname']:""; 
echo $firstname; 

}