文字

$_POST

$HTTP_POST_VARS [已弃用]

$_POST -- $HTTP_POST_VARS [已弃用]HTTP POST 变量

说明

通过 HTTP POST 方法传递给当前脚本的变量的数组。

$HTTP_POST_VARS 包含相同的信息,但它不是一个超全局变量。 (注意 $HTTP_POST_VARS $_POST 是不同的变量,PHP 处理它们的方式不同)

更新日志

版本 说明
4.1.0 引入 $_POST ,弃用 $HTTP_POST_VARS

范例

Example #1 $_POST 范例

<?php
echo  'Hello '  htmlspecialchars ( $_POST [ "name" ]) .  '!' ;
?>

假设用户通过 HTTP POST 方式传递了参数 name=Hannes

以上例程的输出类似于:

Hello Hannes!

注释

Note:

“Superglobal”也称为自动化的全局变量。这就表示其在脚本的所有作用域中都是可用的。不需要在函数或方法中用 global $variable; 来访问它。

参见

  • 处理外部变量
  • 过滤器扩展

用户评论:

[#1] darren_wheatley at hotmail dot com [2015-08-13 03:08:07]

I know it's a pretty basic thing but I had issues trying to access the $_POST variable on a form submission from my HTML page. It took me ages to work out and I couldn't find the help I needed in google. Hence this post.

Make sure your input items have the NAME attribute. The id attribute is not enough! The name attribute on your input controls is what $_POST uses to index the data and therefore show the results.

[#2] Mohammad Tawaha [2014-03-31 05:02:07]

but to make this $_Post work 
You Must write in the .HTML file in the form ( action="http://example.php")
<form action="http://example.php" method="post">
....
</form>
if you Do Not put http:// before the .php file it will Not work with you>>>
Thanks!

[#3] CXJ [2014-03-10 20:18:29]

Note that $_POST is NOT set for all HTTP POST operations,  but only for specific types of POST operations.  I have not been able to find documentation, but here's what I've found so far.

$_POST _is_ set for:

Content-Type: application/x-www-form-urlencoded

In other words,  for standard web forms.

$_POST is NOT set for:

Content-Type:text/xml

A type used for a generic HTTP POST operation.

[#4] perdondiego at mailinator dot com [2011-05-24 13:05:19]

In response to "php dot net at bigbadaboom dot net", adding the value attr to the image submit button may not work in older browser (Opera 9.x for example).

A better solution would be to add a hidden input (<input name="hidden" .... /> in the form to handle both cases: when we have a submit button or an image button for submitting

[#5] yesk13 at gmail dot com [2010-03-21 23:25:52]

you may have multidimensional array in form inputs

HTML Example:

<input name="data[User][firstname]" type="text" />
<input name="data[User][lastname]" type="text" />
...

Inside php script
after submit you can access the individual element like so:

$firstname = $_POST['data']['User']['firstname'];
...

[#6] initself [2009-01-23 11:08:52]

# This will convert $_POST into a query string

<?php
$query_string 
"";
if (
$_POST) {
  
$kv = array();
  foreach (
$_POST as $key => $value) {
    
$kv[] = "$key=$value";
  }
  
$query_string join("&"$kv);
}
else {
  
$query_string $_SERVER['QUERY_STRING'];
}
echo 
$query_string;
?>

[#7] james dot ellis at gmail dot com [2008-12-14 17:38:45]

One feature of PHP's processing of POST and GET variables is that it automatically decodes indexed form variable names.

I've seem innumerable projects that jump through extra & un-needed processing hoops to decode variables when PHP does it all for you:

Example pseudo code:

Many web sites do this:

<form ....>
<input name="person_0_first_name" value="john" />
<input name="person_0_last_name" value="smith" />
...

<input name="person_1_first_name" value="jane" />
<input name="person_1_last_name" value="jones" />
</form>

When they could do this:

<form ....>
<input name="person[0][first_name]" value="john" />
<input name="person[0][last_name]" value="smith" />
...
<input name="person[1][first_name]" value="jane" />
<input name="person[1][last_name]" value="jones" />
</form>

With the first example you'd have to do string parsing / regexes to get the correct values out so they can be married with other data in your app... whereas with the second example.. you will end up with something like:
<?php
var_dump
($_POST['person']);
//will get you something like:
array (
=> array('first_name'=>'john','last_name'=>'smith'),
=> array('first_name'=>'jane','last_name'=>'jones'),
)
?>


This is invaluable when you want to link various posted form data to other hashes on the server side, when you need to store posted data in separate "compartment" arrays or when you want to link your POSTed data into different record handlers in various Frameworks.

Remember also that using [] as in index will cause a sequential numeric array to be created once the data is posted, so sometimes it's better to define your indexes explicitly.

[#8] paul at youngish dot homelinux^org [2008-12-08 01:09:56]

For a page with multiple forms here is one way of processing the different POST values that you may receive.  This code is good for when you have distinct forms on a page.  Adding another form only requires an extra entry in the array and switch statements. 

<?php

 
if (!empty($_POST))
 {
    
// Array of post values for each different form on your page.
    
$postNameArr = array('F1_Submit''F2_Submit''F3_Submit');        

    
// Find all of the post identifiers within $_POST
    
$postIdentifierArr = array();
        
    foreach (
$postNameArr as $postName)
    {
        if (
array_key_exists($postName$_POST))
        {
             
$postIdentifierArr[] = $postName;
        }
    }

    
// Only one form should be submitted at a time so we should have one
    // post identifier.  The die statements here are pretty harsh you may consider
    // a warning rather than this. 
    
if (count($postIdentifierArr) != 1)
    {
        
count($postIdentifierArr) < or
            die(
"\$_POST contained more than one post identifier: " .
               
implode(" "$postIdentifierArr));

        
// We have not died yet so we must have less than one.
        
die("\$_POST did not contain a known post identifier.");
    }
         
    switch (
$postIdentifierArr[0])
    {
    case 
'F1_Submit':
       echo 
"Perform actual code for F1_Submit.";
       break;

    case 
'Modify':
       echo 
"Perform actual code for F2_Submit.";
       break;
           
    case 
'Delete':
       echo 
"Perform actual code for F3_Submit.";
       break;
    }
}
else 
// $_POST is empty.
{
    echo 
"Perform code for page without POST data. ";
}
?>

[#9] php dot net at bigbadaboom dot net [2008-07-15 01:06:25]

Make sure your submit buttons (ie. <input type="submit"> etc) have a 'value' attribute.  If they don't, the value won't appear in $_POST and so isset($_POST["submit"]) won't work either.

Example:

<input type="submit" name="submit">

isset($_POST["submit"]) returns false

<input type="submit" name="submit" value="Next">

isset($_POST["submit"]) returns true.

This might seem obvious for text buttons since they need a label anyway.  However, if you are using image buttons, it might not occur to you that you need to set a value attribute as well.  For example, the value attribute is required in the following element if you want to be able to detect it in your script.

<input type="image" name="submit" src="next.gif" value="Next">

[#10] paul dot chubb at abs dot gov dot au [2008-06-19 16:49:26]

Nasty bug in IE6, Apache2 and mod_auth_sspi. Essentially if the user presses the submit button too quickly, $_POST (and the equivalents) comes back empty. The workaround is to set Apache's KeepAliveTimeout to 1. This would mean that the user would need to push submit within a second to trigger the issue.

[#11] telconstar99 at hotnospampleasemail dot com [2008-05-19 17:49:45]

<?php
//If we submitted the form
if(isset($_POST['submitMe']))
{
     echo(
"Hello, " $_POST['name'] . ", we submitted your form!");
}
//If we haven't submitted the form
else
{
?>

<form action=" <?php=$_SERVER['PHP_SELF']?> " method="POST">
<input type="text" name="name"><br>
<input type="submit" value="submit" name="submitMe">
</form>
<?php
}
?>

上一篇: 下一篇: