ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… источников

HTML-Ρ„ΠΎΡ€ΠΌΡ‹. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ GET ΠΈ POST

PHP-скрипт автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΡ‹ послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ скрипту. Π”Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ нСсколькими способами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΎΡΡ‚Π°Ρ HTML-Ρ„ΠΎΡ€ΠΌΠ°

<form action="foo.php" method="post">
    Имя:  <input type="text" name="username" /><br />
    Email: <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="ΠžΡ‚ΠΏΡ€Π°Π²ΡŒ мСня!" />
</form>

Доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ HTML-Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ двумя способами. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ эти способы:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 Доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ нСслоТной HTML-Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ POST

<?php
echo $_POST['username'];
echo
$_REQUEST['username'];

GET-Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ вмСсто ΡΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ POST ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ ΡΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ GET. Π‘ΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ пСрСмСнная GET Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с элСмСнтом QUERY_STRING (информация Π² URL-адрСсС послС Π·Π½Π°ΠΊΠ° вопроса Β«?Β»). Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, адрСс http://www.example.com/test.php?id=3 содСрТит GET-Π΄Π°Π½Π½Ρ‹Π΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ доступ Ρ‡Π΅Ρ€Π΅Π· $_GET['id']. О ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… HTTP-запроса рассказываСт Ρ€Π°Π·Π΄Π΅Π» $_REQUEST.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

Π’ΠΎΡ‡ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°ΠΊΠΈ подчёркивания. НапримСр, <input name="a.b" /> станСт $_REQUEST["a_b"].

PHP Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ массивы Π² контСкстС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡ‹ (смотритС Ρ€Π°Π·Π΄Π΅Π» PHP ΠΈ HTML). БвязанныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ значСния ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° с мноТСствСнным Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΡƒ сами сСбС ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #3 Π‘ΠΎΠ»Π΅Π΅ слоТныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹

<?php

if ($_POST) {
echo
'<pre>';
echo
htmlspecialchars(print_r($_POST, true));
echo
'</pre>';
}

?>
<form action="" method="post">
Имя: <input type="text" name="personal[name]" /><br />
Email: <input type="text" name="personal[email]" /><br />
Пиво: <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="ΠžΡ‚ΠΏΡ€Π°Π²ΡŒ мСня!" />
</form>

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: PHP Π±Π΅Π· прСдупрСТдСния ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ символы, Ссли имя внСшнСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ синтаксиса массива. НапримСр, <input name="foo[bar]baz"> станСт $_REQUEST['foo']['bar'].

ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠ½ΠΎΠΏΠΊΠΈ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹

Π§Ρ‚ΠΎΠ±Ρ‹ Ρƒ Ρ„ΠΎΡ€ΠΌΡ‹ вмСсто стандартной ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ появилось ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Π΅Π³ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ:

<input type="image" src="image.gif" name="sub" />

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‰Ρ‘Π»ΠΊΠ½Π΅Ρ‚ ΠΏΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ пСрСдаст Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° сСрвСр с двумя Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ β€” sub_x ΠΈ sub_y. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ содСрТат ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ мСста, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠ°Π» Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, содСрТат Ρ‚ΠΎΡ‡ΠΊΡƒ, Π° Π½Π΅ ΠΏΠΎΠ΄Ρ‡Ρ‘Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ PHP автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΏΠΎΠ΄Ρ‡Ρ‘Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅.

HTTP Cookies

PHP ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… cookies ΠΏΠΎ HTTP-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Π² соотвСтствии с трСбованиями стандарта » RFC 6265. Cookies β€” ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ сСрвСр отслСТиваСт ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Π½Π° сайт. Cookies ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ setcookie(). Cookies β€” Ρ‡Π°ΡΡ‚ΡŒ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, поэтому Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SetCookie трСбуСтся Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ. Π­Ρ‚ΠΎ ΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ касаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ header(). Π”Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранят cookie, доступны Π² массивах Π΄Π°Π½Π½Ρ‹Ρ… cookie Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΡΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… $_COOKIE ΠΈΠ»ΠΈ $_REQUEST. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π°Ρ‘Ρ‚ описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setcookie().

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Начиная с PHP 7.2.34, 7.3.23 ΠΈ 7.4.11 ΠΏΠΎ сообраТСниям бСзопасности ΠΈΠΌΠ΅Π½Π° входящих cookie большС Π½Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ· URL-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строки.

Когда ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ cookie трСбуСтся ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния, значСния ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ массив. НапримСр:

<?php
setcookie
("MyCookie[foo]", 'Testing 1', time() + 3600);
setcookie("MyCookie[bar]", 'Testing 2', time() + 3600);

Π’Π°ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² создаст Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… cookie, хотя Π² скриптС пСрСмСнная MyCookie Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΈΠΌ массивом. Если трСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… cookie с нСсколькими значСниями, сначала ΠΎΠ±Π΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ Π²Ρ‹Π·ΠΎΠ² для Ρ‚Π°ΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ serialize() ΠΈΠ»ΠΈ explode().

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… cookie Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… cookie с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡƒΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠΌΠ΅Π½ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. Π’Π°ΠΊ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ с ΠΊΠΎΡ€Π·ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ количСство Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #4 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setcookie()

<?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; /* ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ */
Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $varname, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ΄Ρ‘Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ голая строка (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ строка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΈ которая Π½Π΅ соотвСтствуСт Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΈΠ»ΠΈ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… слов) Β«extΒ». ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ это Π½Π΅ даст ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ PHP Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ Π² ΠΈΠΌΠ΅Π½Π°Ρ… входящих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° символы подчёркивания.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PHP опрСдСляСт Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏΡ‹ (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ) ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ пСрСмСнная Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. PHP содСрТит нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: gettype(), is_array(), is_float(), is_int(), is_object() ΠΈ is_string(). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ PHP, рассказываСт Ρ€Π°Π·Π΄Π΅Π» Β«Π’ΠΈΠΏΡ‹Β».

HTTP β€” тСкстовый ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΈ большая, Ссли Π½Π΅ вся, Ρ‡Π°ΡΡ‚ΡŒ содСрТимого, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΡΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ массивы Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ $_POST ΠΈ $_GET, останСтся Π² Π²ΠΈΠ΄Π΅ строк. PHP Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ значСния Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ элСмСнт $_GET["var1"] Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ строку Β«nullΒ», Π° элСмСнт $_GET["var2"] β€” строку Β«123Β».

/index.php?var1=null&var2=123

Бписок измСнСний

ВСрсия ОписаниС
7.2.34, 7.3.23, 7.4.11 По сообраТСниям бСзопасности ΠΈΠΌΠ΅Π½Π° входящих cookie большС Π½Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ· URL-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строки.
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 2 notes

up
11
Anonymous ΒΆ
18 years ago
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.
up
9
krydprz at iit dot edu ΒΆ
21 years ago
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!