PHP и HTML
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
PHP и HTML
Референца за `faq.html.php` со подобрена типографија и навигација.
PHP и HTML
PHP и HTML многу често соработуваат: PHP може да генерира HTML, а HTML може да предава информации на PHP. Пред да ги прочитате овие ЧПП, важно е да научите како да ги преземете променливи од надворешни извори. Страницата во прирачникот на оваа тема вклучува многу примери.
- Какво кодирање/декодирање ми е потребно кога предавам вредност преку форма/URL?
- I'm trying to use an <input type="image"> tag, but the $foo.x and $foo.y variables aren't available. $_GET['foo.x'] isn't existing either. Where are they?
- Како да креирам низи во HTML <form>?
- Како да ги добијам сите резултати од HTML ознака select multiple?
- Како можам да предадам променлива од Javascript на PHP?
- Какво кодирање/декодирање ми е потребно кога предавам вредност преку форма/URL?
-
Постојат неколку фази за кои кодирањето е важно. Претпоставувајќи дека имате string $data, што ја содржи низата што сакате да ја предадете на не-кодиран начин, овие се релевантните фази:
-
HTML интерпретација. За да специфицирате случајна низа, вие must ќе ја вклучите во двојни наводници, и htmlspecialchars() целата вредност.
-
URL: URL се состои од неколку делови. Ако сакате вашите податоци да бидат интерпретирани како една ставка, вие must ќе ги кодирате со urlencode().
Пример #1 Скриен HTML елемент од форма
<?php
echo '<input type="hidden" value="' . htmlspecialchars($data) . '" />'."\n";
?>Забелешка: , бидејќи е одговорност на прелистувачот да urlencode() $dataподатоците. Сите популарни прелистувачи го прават тоа правилно. Имајте предвид дека ова ќе се случи без оглед на методот (т.е. GET или POST). Ова ќе го забележите само во случај на GET барање, бидејќи POST барањата обично се скриени. urlencode() Пример #2 Податоци за уредување од корисникот
Податоците се прикажуваат во прелистувачот како што е наменето, бидејќи прелистувачот ќе ги интерпретира HTML избегнатите симболи.
<?php
echo "<textarea name='mydata'>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?>Забелешка: The data is shown in the browser as intended, because the browser will interpret the HTML escaped symbols. Податоците се прикажуваат во прелистувачот како што е предвидено, бидејќи прелистувачот ќе ги толкува HTML-избегнатите симболи.
При поднесување, или преку GET или POST, податоците ќе бидат urlencoded од прелистувачот за пренос, и директно urldecoded од PHP. Така на крајот, не треба да правите никакво urlencoding/urldecoding сами, сето тоа се ракува автоматски.
<?php
echo '<a href="' . htmlspecialchars("/nextpage.php?stage=23&data=" .
urlencode($data)) . '">'."\n";
?>Забелешка: Пример #3 Во URL urlencode() Всушност, вие симулирате HTML GET барање, затоа е неопходно рачно
Забелешка: податоците. htmlspecialchars() Вие треба даhtmlspecialchars() целиот URL, бидејќи URL се појавува како вредност на HTML атрибут. Во овој случај, прелистувачот прво ќе го од- urlencode()вредноста, а потоа ќе го предаде URL. PHP ќе го разбере URL правилно, бидејќи вие податоците.
&Ќе забележите дека&во URL е заменето со need to htmlspecialchars() . Иако повеќето прелистувачи ќе се опорават ако заборавите ова, ова не е секогаш можно. Значи, дури и ако вашиот URL не е динамичен, вие -
- URL. $foo.x and $foo.y Се обидувам да користам <input type="image"> таг, но $_GET['foo.x'] променливите не се достапни.
-
исто така не постои. Каде се тие?
При поднесување на форма, можно е да се користи слика наместо стандардното копче за поднесување со таг како: foo.x and foo.y.<input type="image" src="image.gif" name="foo" />
Кога корисникот ќе кликне некаде на сликата, придружната форма ќе биде предадена на серверот со две дополнителни променливи: foo.x and foo.y Бидејќи foo_x and foo_yби направиле невалидни имиња на променливи во PHP, тие автоматски се претвораат во променливи од надворешни извори. На пример, $_GET['foo_x'].
Забелешка:
При поднесување, или преку GET или POST, податоците ќе бидат urlencoded од прелистувачот за пренос, и директно urldecoded од PHP. Значи, на крајот, не треба да правите никакво urlencoding/urldecoding сами, сè се управува автоматски.
- Како да креирам низи во HTML <form>?
-
За да го добиете вашиот <form> резултат испратен како array до вашата PHP скрипта, именувајте ги елементите <input>, <select> или <textarea> вака:
Забележете ги квадратните загради по името на променливата, тоа го прави низа. Можете да ги групирате елементите во различни низи со доделување на исто име на различни елементи:<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" />
Ова произведува две низи, MyArray и MyOtherArray, кои се испраќаат до PHP скриптата. Исто така е можно да се доделат специфични клучеви на вашите низи:<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyOtherArray[]" /> <input name="MyOtherArray[]" />
Низата AnotherArray сега ќе ги содржи клучевите 0, 1, email и phone.<input name="AnotherArray[]" /> <input name="AnotherArray[]" /> <input name="AnotherArray[email]" /> <input name="AnotherArray[phone]" />
Забелешка:
Наведувањето клучеви на низата е опционално во HTML. Ако не ги наведете клучевите, низата се пополнува по редоследот по кој се појавуваат елементите во формата. Нашиот прв пример ќе содржи клучеви 0, 1, 2 и 3.
Види исто така Функции за низи and Променливи од надворешни извори.
- Како да ги добијам сите резултати од HTML ознака select multiple?
-
Тагот select multiple во HTML конструкција им овозможува на корисниците да изберат повеќе ставки од листа. Овие ставки потоа се предаваат на ракувачот со дејства за формата. Проблемот е што сите се предаваат со исто име на виџет. Односно,
Секоја избрана опција ќе пристигне до ракувачот со дејства како:<select name="var" multiple="yes">
Секоја опција ќе ги презапише содржините на претходната $var променлива. Решението е да се користи PHP функцијата "низа од елемент на форма". Треба да се користи следново:var=option1 var=option2 var=option3Ова му кажува на PHP да третира $var како низа и секое доделување вредност на var[] додава ставка во низата. Првата ставка станува $var[0], следната $var[1], итн. count() функцијата може да се користи за да се одреди колку опции биле избрани, а sort() функцијата може да се користи за сортирање на низата со опции ако е потребно.<select name="var[]" multiple="yes">
Забележете дека ако користите JavaScript
[]на името на елементот може да ви предизвика проблеми кога се обидувате да се повикате на елементот по име. Користете го неговиот нумерички ID на елементот на формата наместо тоа, или ставете го името на променливата во единечни наводници и користете го тоа како индекс во низата на елементи, на пример:variable = document.forms[0].elements['var[]'];
- Како можам да предадам променлива од Javascript на PHP?
-
Просторите во имињата на променливите за барање се претвораат во подвлекувања.
Бидејќи Javascript е (обично) технологија од страна на клиентот, а PHP е (обично) технологија од страна на серверот, и бидејќи HTTP е „без состојба“ протокол, двата јазика не можат директно да споделуваат променливи.
Сепак, можно е да се пренесат променливи помеѓу двете. Еден начин да се постигне ова е да се генерира Javascript код со PHP, и да се освежи самиот прелистувач, враќајќи специфични променливи назад до PHP скриптата. Примерот подолу покажува токму како да се направи ова -- тој му овозможува на PHP кодот да ја фати висината и ширината на екранот, нешто што нормално е можно само од страна на клиентот.
<?php
if (isset($_GET['width']) AND isset($_GET['height'])) {
// output the geometry variables
echo "Screen width is: ". $_GET['width'] ."<br />\n";
echo "Screen height is: ". $_GET['height'] ."<br />\n";
} else {
// pass the geometry variables
// (preserve the original query string
// -- post variables will need to handled differently)
echo "<script language='javascript'>\n";
echo " location.href=\"{$_SERVER['SCRIPT_NAME']}?{$_SERVER['QUERY_STRING']}"
. "&width=\" + screen.width + \"&height=\" + screen.height;\n";
echo "</script>\n";
exit();
}
?>