空的PHP POST变量

时间:2011-08-19 02:32:09

标签: php apache

背景

基于网络的联系表单。

问题

$_POST数组为空。启用错误时,未找到任何错误(空数组值除外)。代码经过测试并在一个点上工作,然后保持不变,直到我发布了这个问题。主机可能已执行升级。

软件

  • PHP 5.2.17
  • Apache 2.0.63
  • SSI

HTML表格

HTML表单如下:

<form method="post" action="contact.php" id="commentForm">
  <label for="name">Name</label>
  <input type="text" name="name" id="name" maxlength="64" /><br />

  <label for="email">Email</label>
  <input type="text" name="email" id="email" maxlength="320" /><br />

  <label for="message">Message</label>
  <textarea name="message" rows="10" cols="40" id="Message"></textarea><br />

  <label for="human">40 + 2 =</label>
  <input type="text" name="human" id="human" size="10" maxlength="3" /><br />

  <p align="center">
  <input type="submit" name="submit" value="Send" class="submit-button" />
  </p>
</form>

PHP代码

提交表单时会调用以下代码:

$reason = 'default';

error_reporting( 0 );
ini_set( 'display_errors', 0 );
ini_set( 'register_globals', 0 );
ini_set( 'allow_url_fopen', 0 );
ini_set( 'expose_php', 0 );
ini_set( 'magic_quotes_gpc', 0 );

function not_contacted() {
  global $reason;

  // Redirects to computer, name, email, or message.
  //
  header( 'Location: ../error-'.$reason.'.shtml' );
}

function wms_error_handler($errno, $errstr, $errfile, $errline) {
  not_contacted();
  return true;
}

function wms_shutdown() {
  if( is_null( $e = error_get_last() ) === false ) {
    not_contacted();
  }
}

set_error_handler( "wms_error_handler" );
register_shutdown_function( 'wms_shutdown' );

$name = trim( stripslashes( $_POST["name"] ) );

登录

echo $_SERVER["REQUEST_METHOD"]; == GET

print_r( $_GET ); == Array ( )

print_r( $_POST ); == Array ( )

print_r( $_REQUEST ); ==

Array ( [__utma] => 181723617.1357984856.1311884601.1313715852.1313720411.12 [__utmz] => 181723617.1313720411.12.10.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=jigo [__utmc] => 181723617 [__utmb] => 181723617.3.10.1313720411 ) `

file_get_contents('php://input') ==清空

问题

  1. 什么可能导致PHP POST变量值为空?
  2. 为什么POST方法被转化为GET方法?
  3. 我认为这是一个php.ini或httpd.conf冲突,但无法确定(它是托管域名)。

    谢谢。

    更新

    以下测试有效。

    test.shtml中

    <html>
    <body>
    <form method="post" action="test.php">
    <input type="hidden" name="test" value="test" />
    <input type="submit" name="submit" value="submit" />
    </form>
    </body>
    </html>
    

    test.php的

    <?
    echo $_POST["test"];
    ?>
    

    解决方案

    .htaccess文件中删除了以下行:

    RewriteRule ^(.*)$ http://www.whitemagicsoftware.com/$1 [R=301,L]
    

2 个答案:

答案 0 :(得分:3)

当您查看firebug中的网络视图选项卡时会发生什么?是否涉及到javascript?是否有任何重写规则正在发挥作用?看起来不像是php问题。

答案 1 :(得分:0)

我也有类似的问题。

问题是数据被发布到http网址,但是重定向到网址的https版本。 $ _POST中的数据在重定向期间丢失。

我希望这可以帮助别人