The full list of field-name characters that PHP converts to _ (underscore) is the following (not just dot):
chr(32) ( ) (space)
chr(46) (.) (dot)
chr(91) ([) (open square bracket)
chr(128) - chr(159) (various)
PHP irreversibly modifies field names containing these characters in an attempt to maintain compatibility with the deprecated register_globals feature.Променливи од надворешни извори
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Променливи од надворешни извори
Референца за `language.variables.external.php` со подобрена типографија и навигација.
Променливи од надворешни извори
HTML Обрасци (GET и POST)
Кога образец ќе се поднесе до PHP скрипта, информациите од тој образец автоматски се прават достапни за скриптата. Постојат неколку начини за пристап до овие информации, на пример:
Пример #1 Прост HTML образец
<form action="foo.php" method="post">
Name: <input type="text" name="username" /><br />
Email: <input type="text" name="email" /><br />
<input type="submit" name="submit" value="Submit me!" />
</form>
Постојат само два начина за пристап до податоци од HTML обрасци. Моментално достапните методи се наведени подолу:
Пример #2 Пристап до податоци од прост POST HTML образец
<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>
Користењето на GET образец е слично освен што може да се користи соодветната претходно дефинирана GET променлива. GET исто така се применува на
QUERY_STRING (информациите по '?' во URL). Значи, на пример, http://www.example.com/test.php?id=3
содржи GET податоци кои се достапни со $_GET['id']. Погледнете исто така $_REQUEST.
Забелешка:
Точките и празнините во имињата на променливите се претвораат во подвлекувања. На пример
<input name="a.b" />becomes$_REQUEST["a_b"].
PHP исто така разбира низи во контекст на образец променливи (видете ја поврзаната ЧПП). На пример, поврзани променливи може да се групираат заедно, или оваа функција може да се користи за да се добијат вредности од повеќеселективен влез. На пример, да поднесеме образец кон себе и по поднесувањето да ги прикажеме податоците:
Пример #3 Посложени образец променливи
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}
?>
<form action="" method="post">
Name: <input type="text" name="personal[name]" /><br />
Email: <input type="text" name="personal[email]" /><br />
Beer: <br />
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbräu</option>
</select><br />
<input type="submit" value="submit me!" />
</form>Забелешка: Ако името на надворешна променлива започнува со валидна синтакса на низа, последните знаци се тивко игнорирани. На пример,
<input name="foo[bar]baz">becomes$_REQUEST['foo']['bar'].
Имиња на променливи за ПОДНЕСУВАЊЕ СЛИКА
исто така не постои. Каде се тие?
<input type="image" src="image.gif" name="sub" />
Кога корисникот кликнува некаде на сликата, придружниот образец ќе биде пренесен до серверот со две дополнителни променливи, sub_x and sub_y. Тие ги содржат координатите на кликнувањето на корисникот во рамките на сликата. Искусниот може да забележи дека вистинските имиња на променливите испратени од прелистувачот содржат точка наместо подвлекување, но PHP автоматски ја претвора точката во подвлекување.
HTTP колачиња
PHP транспарентно поддржува HTTP колачиња како што е дефинирано од (PHP 4, PHP 5, PHP 7, PHP 8)Колачињата се механизам за складирање податоци во далечинскиот прелистувач и со тоа следење или идентификување на вратените корисници. Можно е да се постават колачиња со користење на setcookie() функцијата. Колачињата се дел од HTTP заглавието, така што функцијата SetCookie мора да се повика пред да се испрати каков било излез до прелистувачот. Ова е истото ограничување како и за header() функцијата. Податоците од колачињата потоа се достапни во соодветните низи со податоци за колачиња, како што се $_COOKIE како и во $_REQUEST. Погледнете ја setcookie() страницата во прирачникот за повеќе детали и примери.
Забелешка: Од PHP 7.2.34, 7.3.23 и 7.4.11, соодветно, names на дојдовните колачиња веќе не се url-декодираат од безбедносни причини.
Ако повеќе вредности треба да се доделат на една променлива за колачиња, тие можат да се доделат како низа. На пример:
<?php
setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>Ова ќе создаде две одделни колачиња иако MyCookie сега ќе биде една низа во скриптата. Ако треба да се постави само едно колаче со повеќе вредности, разгледајте ја употребата на serialize() or explode() на вредноста прво.
Имајте предвид дека колаче ќе замени претходно колаче со исто име во прелистувачот, освен ако патеката или доменот се различни. Значи, за апликација за количка за купување, бројачот може да се чува и да се пренесува. Односно
Пример #4 А setcookie() example
<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>Точки во имињата на дојдовните променливи
Типично, PHP не ги менува имињата на променливите кога тие се пренесуваат во скрипта. Сепак, треба да се забележи дека точката (период, полн запир) не е валиден знак во име на PHP променлива. За причината, погледнете го ова:
<?php
$varname.ext; /* invalid variable name */
?>Од оваа причина, важно е да се забележи дека PHP автоматски ќе ги замени сите точки во имињата на дојдовните променливи со подвлекувања.
Одредување на типови на променливи
Бидејќи PHP ги одредува типовите на променливите и ги претвора (генерално) по потреба, не е секогаш очигледно каков тип е дадена променлива во даден момент. PHP вклучува неколку функции кои откриваат каков тип е променлива, како што се: gettype(), is_array(), is_float(), is_int(), is_object()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во is_string()Бидејќи PHP ги одредува типовите на променливите и ги претвора (генерално) по потреба, не е секогаш очигледно каков тип е дадена променлива во даден момент. PHP вклучува неколку функции кои откриваат каков тип е променлива, како што се: Типови.
. Погледнете го и поглавјето за Суперглобални низи, повеќето, ако не и сите, содржини што доаѓаат $_POST and $_GET , како $_GET["var1"] ќе останат како низи. PHP нема да се обиде да ги претвори вредностите во специфичен тип. Во примерот подолу, $_GET["var2"]ќе содржи низа "null" и
/index.php?var1=null&var2=123
Дневник на промени
| Верзија | = NULL |
|---|---|
| 7.2.34, 7.3.23, 7.4.11 | На names на дојдовните колачиња веќе не се url-декодираат од безбедносни причини. |
Белешки од корисници 2 забелешки
This post is with regards to handling forms that have more than one submit button.
Suppose we have an HTML form with a submit button specified like this:
<input type="submit" value="Delete" name="action_button">
Normally the 'value' attribute of the HTML 'input' tag (in this case "Delete") that creates the submit button can be accessed in PHP after post like this:
<?php
$_POST['action_button'];
?>
We of course use the 'name' of the button as an index into the $_POST array.
This works fine, except when we want to pass more information with the click of this particular button.
Imagine a scenario where you're dealing with user management in some administrative interface. You are presented with a list of user names queried from a database and wish to add a "Delete" and "Modify" button next to each of the names in the list. Naturally the 'value' of our buttons in the HTML form that we want to display will be "Delete" and "Modify" since that's what we want to appear on the buttons' faceplates.
Both buttons (Modify and Delete) will be named "action_button" since that's what we want to index the $_POST array with. In other words, the 'name' of the buttons along cannot carry any uniquely identifying information if we want to process them systematically after submit. Since these buttons will exist for every user in the list, we need some further way to distinguish them, so that we know for which user one of the buttons has been pressed.
Using arrays is the way to go. Assuming that we know the unique numerical identifier of each user, such as their primary key from the database, and we DON'T wish to protect that number from the public, we can make the 'action_button' into an array and use the user's unique numerical identifier as a key in this array.
Our HTML code to display the buttons will become:
<input type="submit" value="Delete" name="action_button[0000000002]">
<input type="submit" value="Modify" name="action_button[0000000002]">
The 0000000002 is of course the unique numerical identifier for this particular user.
Then when we handle this form in PHP we need to do the following to extract both the 'value' of the button ("Delete" or "Modify") and the unique numerical identifier of the user we wish to affect (0000000002 in this case). The following will print either "Modify" or "Delete", as well as the unique number of the user:
<?php
$submitted_array = array_keys($_POST['action_button']);
echo ($_POST['action_button'][$submitted_array[0]] . " " . $submitted_array[0]);
?>
$submitted_array[0] carries the 0000000002.
When we index that into the $_POST['action_button'], like we did above, we will extract the string that was used as 'value' in the HTML code 'input' tag that created this button.
If we wish to protect the unique numerical identifier, we must use some other uniquely identifying attribute of each user. Possibly that attribute should be encrypted when output into the form for greater security.
Enjoy!