Take note that all $_POST values are (string).
If your form field should accept both numeric and alphabets but exclude a value of 0, you will have a problem.
<?php
## Using Equal operator
if($_POST['myfield'] == 0){
echo 'You cannot set it to 0';
} else {
echo 'Correct';
}
# You will get the following results
// $_POST['myfield'] = 0;
// Output: You cannot set it to 0;
// $_POST['myfield'] = 1;
// Output: Correct;
// $_POST['myfield'] = 'test';
// Output: You cannot set it to 0;
## Using Identical operator
if($_POST['myfield'] === 0){
echo 'You cannot set it to 0';
} else {
echo 'Correct';
}
# You will get the following results
// $_POST['myfield'] = 0;
// Output: Correct;
// $_POST['myfield'] = 1;
// Output: Correct;
// $_POST['myfield'] = 'test';
// Output: Correct;
// You need to convert numeric values to integer and use identical operator
$_POST['myfield'] = is_numeric($_POST['myfield']) ? (int)$_POST['myfield'] : $_POST['alias'];
if($_POST['myfield'] === 0){
echo 'You cannot set it to 0';
} else {
echo 'Correct';
}
# Now you will get the following results
// $_POST['myfield'] = 0;
// Output: You cannot set it to 0;
// $_POST['myfield'] = 1;
// Output: Correct;
// $_POST['myfield'] = 'test';
// Output: Correct;
?>
$_POST
$HTTP_POST_VARS [kullanımdan kalktı]
$_POST -- $HTTP_POST_VARS [kullanımdan kalktı] — HTTP POST değişkenleri
Açıklama
HTTP POST yöntemi kullanılarak geçerli betiğe aktarılan bütünleşik değişkenler dizisi.
$HTTP_POST_VARS aynı başlangıç bilgisini içerir, fakat bir süper küresel değildir. ($HTTP_POST_VARS ve $_POST farklı değişkenlerdir ve PHP de bu şekilde ele alır.)
Sürüm Bilgisi
| Sürüm: | Açıklama |
|---|---|
| 4.1.0 | $_POST ortaya çıkmış ve $HTTP_POST_VARS kullanımdan kaldırılmıştır. |
Örnekler
Örnek 1 - $_POST örneği
<?php
echo 'Merhaba ' . htmlspecialchars($_POST["isim"]) . '!';
?>
Kullanıcının POST ile isim=Gizem gönderdiği varsayılarak
Yukarıdaki örnek şuna benzer bir çıktı üretir:
Merhaba Gizem!
Notlar
Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.
$_POST
eddyvlad at eddyvlad dot com
25-Mar-2009 03:34
25-Mar-2009 03:34
initself
23-Jan-2009 07:08
23-Jan-2009 07:08
# 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;
?>
james dot ellis at gmail dot com
15-Dec-2008 01:38
15-Dec-2008 01:38
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 (
0 => array('first_name'=>'john','last_name'=>'smith'),
1 => 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.
paul at youngish dot homelinux^org
08-Dec-2008 09:09
08-Dec-2008 09:09
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) < 1 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. ";
}
?>
jairhumberto at gmail dot com
31-Jul-2008 01:26
31-Jul-2008 01:26
<?php
foreach($_POST as $k=>$v) $$k=$v;
//to use $_POST["example"] as $example
foreach($_GET as $k=>$v) $$k=$v;
//to use $_GET["example"] as $example
//or better:
foreach(${"_" . $_SERVER["REQUEST_METHOD"]} as $k=>$v) $$k=$v;
//to use $_GET["example"] or $_POST["example"] as $example
?>
php dot net at bigbadaboom dot net
15-Jul-2008 08:06
15-Jul-2008 08:06
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">
paul dot chubb at abs dot gov dot au
19-Jun-2008 11:49
19-Jun-2008 11:49
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.
telconstar99 at hotnospampleasemail dot com
20-May-2008 12:49
20-May-2008 12:49
<?
//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="<?=$_SERVER['PHP_SELF']?>" method="POST">
<input type="text" name="name"><br>
<input type="submit" value="submit" name="submitMe">
</form>
<?
}
?>
