问题
SOLVED: I omitted the name attribute on the input fields. I have a simple html/php -form. And I submit it. The $_POST is always empty. If I try a get then the GET is always empty. Same for $_REQUEST and php://input. I get nothing in return.
There a lot of posts with this subject, yet I have not found the solution for my problem. I do not have a rewrite or redirect. The method_request is POST. There is no clash with id's in the form, php://input is empty as well, REQUEST is empty as well. I have put Suhosin.simulation to on, which means that it is not working. POST_MAX_SIZE = 16M. Should be sufficient for two small texts.
The php.ini variables request_order and variable_order are GP and GPS respectively. Magic_quotes_gpc is Off. Default mime-type = text/html and every page has charset UTF-8. Result of the function php_sapi_name() is apache2handler.
PHPVersion = 5.3, Suhosin - patch 0.9.1. OS = Ubuntu 12.04 LTS, Apache = 2.2.22.
Here are two files. I have simplified them a little, but normally they work without any problem. I have similar files for the GET-method.
<?php
$tmpHeader = "<!DOCTYPE html><html><head>\n";
$tmpHeader .= "<meta charset=\"UTF-8\"> <meta http-equiv=\"Content-Type\" content=\"application/x-www-form-urlencoded; charset=utf-8\">\n";
$tmpHeader.= "<title>testPost</title>\n";
$tmpHeader.= "<link rel=\"stylesheet\" href=\"/css/layout.css\">\n";
$tmpHeader.= "<link rel=\"stylesheet\" href=\"/css/semantics.css\">\n";
$tmpHeader.= "<link rel=\"stylesheet\" href=\"/css/defaults.css\">\n";
$tmpHeader.="</head>";
$tmpBody = "<body id=\"defaultBody\"><section id=\"page\">\n";
$tmpBody .= "<div id=\"container\">\n";
$tmpBody .= "<form id=\"pagewrap\" name=\"pagewrap\" method=\"POST\" action=\"http://www.thuis.lb/testPost_2.php\" enctype=\"application/x-www-form-urlencoded\">\n";
$tmpBody .= "<input type=\"hidden\" id=\"context_id\" value=\"testPost\">\n";
$tmpBody.="<header id=\"pageHeader\">\n";
$tmpBody.="<div id=\"leftHeader\"><img src=\"".clientSideImages."Homerus.jpg\" alt=\"homerus\"></div>\n";
$tmpBody.="<div id=\"centralHeader\"><h1>Slogan</h1></div>\n";
$tmpBody.="</header>\n";
$pageData = "<section id=\"doc_content\">\n";
$pageData.= "<fieldset><legend>testPost</legend>\n";
$pageData.= "<div class=\"fourcolumns_odd\"><label for=\"username\">username</label></div>\n";
$pageData.= "<div class=\"fourcolumns_even\"><input type=\"text\" id=\"username\" value=\"\"></div>\n";
$pageData.= "<div class=\"fourcolumns_odd\"><label for=\"password\">password</label></div>\n";
$pageData.= "<div class=\"fourcolumns_even\"><input type=\"text\" id=\"password\" value=\"\"></div>\n";
$pageData.= "<div class=\"onecolumn\"><input type=\"submit\" id=\"submitButton\" value=\"inloggen\"></div>\n";
$pageData.= "</fieldset>\n";
$pageData.= "<input type=\"hidden\" id=\"passwordHash\" value=\"\">\n";
$pageData.="</section><!--end of section doc_content -->\n";
$tmpBody .= "<div id=\"leftWing\"><img src=\"".clientSideImages."IronPillarDelphi.jpg\" alt=\"homerus\"></div>\n";
$tmpBody.= "<div id=\"centerField\" class=\"centerVertically\">".$pageData."</div>\n";
$tmpBody.= "<div id=\"rightWing\"><img src=\"".clientSideImages."IronPillarDelphi.jpg\" alt=\"homerus\"></div>\n";
$tmpBody.="</form>\n";
$tmpBody.= "</div><!-- end of container -->\n";
$tmpBody.="</section><!-- end of page -->\n";
$tmpBody.="</body></html>\n";
logStatement('requestheaders: ');
$testpostdata = file_get_contents("php://input");
log_r($testpostdata);
print $tmpHeader.$tmpBody;
?>
The other file to which the $_POST data should be sent:
<!DOCTYPE html><html><head>
<meta charset="UTF-8"> <meta http-equiv="Content-Type" content="application/x-www-form-urlencoded; charset=utf-8">
<title>testPost_II</title>
<link rel="stylesheet" href="/css/layout.css">
<link rel="stylesheet" href="/css/semantics.css">
<link rel="stylesheet" href="/css/defaults.css">
</head><body id="defaultBody"><section id="page">
<div id="container">
<form id="pagewrap" name="pagewrap" method="POST" action="http://www.thuis.lb/testPost.php" enctype="application/x-www-form-urlencoded">
<header id="pageHeader">
<div id="leftHeader"><img src="/images/Homerus.jpg" alt="homerus"></div>
<div id="centralHeader"><h1>Slogan</h1><span>Special for ><?php print getValue('username','nothing found');?></span></div>
</header>
<div id="leftWing"><img src="/images/IronPillarDelphi.jpg" alt="homerus"></div>
<div id="centerField" class="centerVertically"><section id="doc_content">
<input type="text" id="context_id" value="<?php var_dump($_POST);?>">
<fieldset><legend>testPost_2</legend>
<div class="fourcolumns_odd"><label for="username">username</label></div>
<div class="fourcolumns_even"><input type="text" id="username" value="<?php print getValue('username','Noname');?>"></div>
<div class="fourcolumns_odd"><label for="password">password</label></div>
<div class="fourcolumns_even"><input type="text" id="password" value="<?php echo getValue('password','Secret');?>"></div>
<div class="fourcolumns_odd"><label for="request_method">request method</label></div>
<div class="fourcolumns_even"><input type="text" id="username" value="<?php print $_SERVER['REQUEST_METHOD'];?>"></div>
<div class="onecolumn"><input type="submit" id="submitButton" value="inloggen"></div>
</fieldset>
</section><!--end of section doc_content -->
</div>
<div id="rightWing"><img src="/images/IronPillarDelphi.jpg" alt="homerus"></div>
</form>
</div><!-- end of container -->
</section><!-- end of page -->
</body></html>
www.thuis.lb is a name of a local server. It has IP 127.0.0.1. Thuis is Dutch for at home. Is there anything that I have forgotten or that I am doing wrong?
EDIT: Some more information. In the more complex first php there is an exchange of information with a database. That works like a charm. No problem at all. Therefor do I think that the problem is a security issue. I will add the virtual host file for www.thuis.lb. Although it is almost like the default virtualhost, it might be the problem.
<VirtualHost thuis.lb:80>
ServerName www.thuis.lb
ServerAlias thuis.lb *.thuis.lb
ServerAdmin lbergman@loekbergman.nl
DocumentRoot /var/www/thuis
RewriteEngine On
RewriteOptions Inherit
<Directory /var/www/thuis/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/thuis/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel debug
CustomLog /var/log/apache2/thuis/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
EDIT II: I can add more information. In the access log there is for instance this line: 127.0.0.1 - - [04/Apr/2013:11:13:43 +0200] "POST /testPost_2.php HTTP/1.1" 200 2020 "http://www.thuis.lb/testPost.php" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0". That shows imo that apache2 is receving the post in good order. But the $_POST in PHP is still completely empty. In the display of Firebug>Net>Headers is Content Length 0.
回答1:
Do all your form input fields have a name attribute or just an id attribute? It might be as simple as adding a name attribute to each input field.
<input type="text" id="afield" value="a value">
Is not the same as
<input type="text" id="afield" name="afield" value="a value">
$_POST['afield'] should only return a value with the second example above
来源:https://stackoverflow.com/questions/15776911/post-get-and-request-empty