$ _POST是PHP中的空数据

时间:2012-09-13 21:21:44

标签: php forms codeigniter post

我有一个奇怪的问题,我的$ _POST数据没有通过。首先,这在我的本地主机上工作正常,但在我的网络共享主机上不起作用。这是表格:

<form action="/add" method="POST" enctype="multipart/form-data">

<div>
    Name : <input type='text' name='form[name]' class='form-text ' value="" style='width: 350px' placeholder="I.E. Boulder Vote Bus" maxlength="30"/>
</div>
<div>
    Description : <textarea name='form[description]' class='form-bigbox '/></textarea>
</div>
<div class='clearfix pull-left'>
    Logo: <input type="file" name='form[image_name]' class='' value="" accept="image/jpeg, image/jpg, image/png"/>
</div>
<div class='clearfix'></div>
<div>
    <span id='date' class='change'>
        Date : <input type='text' name='form[date]' id='datepicker' class='form-text ' placeholder="mm/dd/yyyy" value="" style='width: 160px;'/> 
    </span>
    Time : <input type='text' name='form[hr]' class='form-text ' style='width: 40px;' placeholder="01" value=""/> : <input type='text' style='width: 40px;' name='form[min]' class='form-text ' placeholder="00" value=""/> <select name='form[ampm]' class='form-text form-select' style='width: 60px;'><option value='am' >AM</option><option value='pm' >PM</option></select>
</div>
<div>
    Your Email : <input type='text' name='form[email]' class='form-text '  value="" style='width: 350px' placeholder="hero@voterides.com"/>
</div>
<div>
    Zip code : <input type='text' name='form[zipcode]' class='form-text '  value="" placeholder="80304"/> Radius : <input type='text' name='form[radius]' class='form-text '  value="" placeholder="25" style='width:50px;'/> mi
</div>
                    <div>
                            <input type='submit' class='form-submit btn-warning' value='Create a Ride' />
</div>
</form>

问题是,在我提交表单后,我没有$ _POST数据。如果我echo serialize($_POST);,我会a:0:{}。但是,如果我这样做,echo file_get_contents('php://input');我得到以下内容:

------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[name]"



Some Name

------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[description]"



Some Description

------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[image_name]"; filename=""

Content-Type: application/octet-stream





------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[date]"





------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[hr]"





------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[min]"





------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[ampm]"



am

------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[email]"





------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[zipcode]"





------WebKitFormBoundaryLCabCxfMMHCvWsAO

Content-Disposition: form-data; name="form[radius]"





------WebKitFormBoundaryLCabCxfMMHCvWsAO--

此外,和odder一样,如果我将表格简化为3个元素,它就可以了。任何3个元素都可以,但4个并不起作用。此外,网站上的其他表单(超过3个元素)工作正常。就是这个。

以下是我共享主机的一些相关PHP设置:

PHP Version 5.3.16
max_execution_time  300 
max_file_uploads    20  
max_input_time  -1  -1
max_input_vars  1000    1000
memory_limit    128M    128M
post_max_size   500M    500M 

如果是服务器设置,任何想法可能是什么?看起来像一个大小问题,但传递的数据并不多(所有这些都是小值)。

我有一个htaccess,但我认为它不相关(我使用的是codeigniter,它是标准的CI htaccess,我的其他表单提交了一个好的):

AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

这是print_r($ _ SERVER)产生的内容(为安全起见略微编辑):

Array
(
    [CONTENT_LENGTH] => 1077
    [CONTENT_TYPE] => multipart/form-data; boundary=----WebKitFormBoundarydBnbAkAUNJntI6dz
    [DOCUMENT_ROOT] => [redaced]
    [GATEWAY_INTERFACE] => CGI/1.1
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_CONNECTION] => keep-alive
    [HTTP_COOKIE] => vrsession=8pO1KwOg4OPzCYqsJHX0Qr6FPfLteTimRjIKQPRC%2F83GlFRTepX%2FnrfE1yDxYxDXiPa2JcX4kQviV6lezxrXmJHjqVbWMe%2FgRne%2Bp9P4%2FfxlZrxta2Zl4DACs2C2nsp1SkqYj6k6xhP6Wc9Zlpxgsma752%2BGxHkvwnT6%2F%2FTey699wnV5je99kZe%2FIhSa04DZvoGXoFc6bx1%2B%2FZRtSvojD86ktpWK91AUFUvltcoj8%2F31jeX0h%2BR7VEOPMZLBeqJrcn7qZGeQ6N2XvCIsh6gqTRZIPdsvyAIW%2FTTibBiY0qUvh50yE5MH060D8utqsiv4S54UrXypBsCP3H2w66pLXHTQKKrK%2FAsn1SEWb2pew%2BEOE4prm%2BJKGxcAq0efCGhkpsHZoP9ZDKDekMzaJTIxUin99RUeXVZTF0yqsMD5A%2FFF0AdZuz343VWsJcV9zru4hPHaAky5NMoZa6R1be9PwA%3D%3D; __utma=74945813.1164249566.1347560100.1347560100.1347560100.1; __utmb=74945813.176.10.1347560100; __utmc=74945813; __utmz=74945813.1347560100.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
    [HTTP_HOST] => [redacted]
    [HTTP_ORIGIN] => [redacted]
    [HTTP_REFERER] => [redacted]/add
    [HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
    [PATH] => /bin:/usr/bin
    [PHPRC] => [redacted]
    [QUERY_STRING] => 
    [REDIRECT_QUERY_STRING] => /add
    [REDIRECT_STATUS] => 200
    [REDIRECT_UNIQUE_ID] => UFJZCUoyAC0AAE5v7ps
    [REDIRECT_URL] => /add
    [REMOTE_ADDR] => [redacted]
    [REMOTE_PORT] => 48098
    [REQUEST_METHOD] => POST
    [REQUEST_URI] => /add
    [SCRIPT_FILENAME] => [redacted]/index.php
    [SCRIPT_NAME] => /index.php
    [SERVER_ADDR] => [redacted]
    [SERVER_ADMIN] => [redacted]
    [SERVER_NAME] => [redacted]
    [SERVER_PORT] => 80
    [SERVER_PROTOCOL] => HTTP/1.1
    [SERVER_SIGNATURE] => <ADDRESS>Apache/1.3.42 Server at [redacted] Port 80</ADDRESS>

    [SERVER_SOFTWARE] => Apache/1.3.42 (Unix) Sun-ONE-ASP/4.0.2 Resin/2.1.13 mod_fastcgi/2.4.6 mod_log_bytes/1.2 mod_bwlimited/1.4 mod_auth_passthrough/1.8 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.7a
    [UNIQUE_ID] => UFJZCUoyAC0AAE5v7ps
    [PHP_SELF] => /index.php
    [REQUEST_TIME] => 1347574025
    [argv] => Array
        (
            [0] => /add
        )

    [argc] => 1
)

6 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

  1. 我在我的服务器上运行此表单并且没有任何问题。
  2. 我将表单复制到test.php
  3. 将formdata发送至test2.php
  4. 显示var_dump($_POST)
  5. 的输出
  6. 已更改:action="/add" (顺便说一句,这看起来像是我的目录)

    收件人:action="test2.php"

  7. 其中产生了以下输出:

    array(1) { ["form"]=> array(9) { ["name"]=> string(0) "" ["description"]=> string(0) "" ["date"]=> string(0) "" ["hr"]=> string(0) "" ["min"]=> string(0) "" ["ampm"]=> string(2) "am" ["email"]=> string(0) "" ["zipcode"]=> string(0) "" ["radius"]=> string(0) "" } }

  8. 尝试将输出发送到其他脚本,即"test2.php"

答案 2 :(得分:0)

我读到你的评论:&#34;没有变化。我使用的是codeigniter,所以我在htaccess中有标准的301。&#34;某处。如果您使用301,那么您将被永久重定向(有时候&#34;永远#34;)。检查您的浏览器对服务器的响应(尝试保留日志)并查看您的帖子是否被重定向。如果是这样,您的POST数据将会丢失。

How to preserve POST data via ajax request after a .htaccess redirect?

答案 3 :(得分:0)

<form action="/add"

使用目标页面名称更改'/ add'部分:example.php

答案 4 :(得分:-1)

我认为使用相同的POST子阵列,PHP可能会出现文件输入和非文件输入问题。即有一个名为'form [image_name]'的文件上传和其他名为'form [something_else]'的字段不起作用。尝试使用不同的文件上传字段名称,看看它是否有效。

PHP: Common Pitfalls - File Uploads

答案 5 :(得分:-1)

请记住:当您从表单中读取时,输入的名称区分大小写! 例如:

<form>
  <input name="hello" />
</form>

假设它包含值 bob 。在我写的php文件中:

<?
   $var = $_POST['Hello'];
?>

它什么都不读,因为对于php解释器 hello 不是 Hello - 这是两个不同的值/字段名称。