PHP и HTML си взаимодействат активно PHP може да генерира HTML и HTML може да предава информация към PHP. Преди да прочетете това ръководство е много важно да знаете как да предавате информация към PHP. Също така, тук са включени много примери. Обърнете внимание към това какво е register_globals.
Какво кодиране/декодиране трябва да използвам, за да изпратя информация чрез формуляр/URL?
Има няколко етапа, за които кодирането е от изключително значение. Да приемем, че имате низ $data, съдържащ низа, които вие искате да изпратите в не кодиран вид. Ето съответните етапи:
HTML интерпретиране. За да установите низ, вие трябва да го вмъкнете в двойни кавички и да го предадете като параметър на функция htmlspecialchars().
URL: състои се от няколко части. Ако искате данните ви да се интерпретират като едно цяло, трябва да ги кодирате с функцията urlencode().
Example #1 Елементът hidden от HTML формуляр
<?php
echo "<input type='hidden' value='" . htmlspecialchars($data) . "' />\n";
?>
Забележка: Ггрешка ще е да използвате функцията urlencode() за $data, защото браузърът предварително е кодирал данните. Всички добре известни браузъри правят това. Забележете, че това ще стане независимо от метода които използвате (GET или POST). Ще забележите това само в случай, че използвате метода GET, защото обикновенно POST заявките остават скрити.
Example #2 Информация добавена от клиента
<?php
echo "<textarea name='mydata'>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?>
Забележка: Данните ще бъдат показани в браузъра по начина по които са въведени, защото браузъра ще интерпретира HTML екранираните символи. При предаването на данните чрез GET или POST метода, те ще бъдат кодирани с urlencode от клиентския браузър и автоматично декодирани с urldecode от PHP. Така че, вие няма нужда да изпозвате кодиране/декодиране на данните, тъй като това ще бъде изпълнено автоматично.
Example #3 В URL адрес
<?php
echo "<a href='" . htmlspecialchars("/nextpage.php?stage=23&data=" .
urlencode($data)) . "'>\n";
?>
Забележка: На практика, вие променяте HTML GET заявката и следователно трябва да изплозвате функцията urlencode() за да кодирате данните ръчно. Ще забележите, че & в URL адреса е заменено с &. Въпреки че повечето браузъри ще открият, ако сте го забравили, това не винаги е възможно. Така че, даже и вашият URL адрес да не се генерира динамично, трябва да използвате функцията htmlspecialchars() за да го кодирате.
Опитвам да използвам <input type="image"> таг, но $foo.x и $foo.y променливите не съществуват. $_GET['foo.x'] не съществува също. Къде са те и как да получа достъп до тях?
Когато предавате данни от HTML формулярм е възможно да използвате някакво изображение вместо стандартния бутон, по следният начин:
<input type="image" src="image.gif" name="foo" />
Когато потребителя щракне някъде върху изображението, което сте сложили на мястото на стандартния бутон за изпращане на формуляра, текущият формуляр ще бъде предаден към сървъра с две допълнителни променливи: foo.x и foo.y.
Тъй като променливите foo.x и foo.y ще бъдат невалидни в PHP, те автоматично биват преименувани в foo_x и foo_y. Така получавате възможност да използвате тези променливи като всички други в PHP.
Забележка: Интервалите в имената на променливите биват превръщани в долни черти (_).
Как да създавам масиви в HTML <form>?
За да получите данни изпратени от <form> във вид масив към PHP скрипта, трябва да именувате елементите <input>, <select> или <textarea> по следния начин:
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" />
Забележете квадратните скоби след имената на променливите, точно това го прави масив. Може да групирате елементите в различни масиви, като дадете едно и също име на различните елементи:
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyOtherArray[]" /> <input name="MyOtherArray[]" />
Създават се два масива, MyArray и MyOtherArray, които се предават към PHP скрипта. Също така има възможност да присвоите различни ключове към масивите:
<input name="AnotherArray[]" /> <input name="AnotherArray[]" /> <input name="AnotherArray[email]" /> <input name="AnotherArray[phone]" />
Сега масивът AnotherArray ще съдържа следните ключове 0, 1, email и phone.
Забележка: Присвояването на ключове не е задължително в HTML. Ако не зададете ключове, данните в масивъа ще постъпят по реда им в HTML формуляра. В първият пример ключовете на масива ще са 0, 1, 2, и 3.
Вижте също Функции за масиви and Външни PHP променливи.
Как мога да взема резултатите от select с множествен избор в HTML?
Select тагът с множествен избор в HTML позволява на клиента да избира множество елементи от списък. Тези елементи биват предадени към съответният PHP скрипт. Проблемът идва в това ще всички биват изпращани с едно и също име.
<select name="var" multiple="yes">
Всяка една избрана опция ще бъде предадена на скрипта така:
Всяка стойност ще препокрие предишната стойност на $var променливата. Решението на проблема е да се използва възможността на PHP да създава масив от елемент на формуляра. Ето един пример за употребата на това:
<select name="var[]" multiple="yes">
Това казва на PHP да приема $var за масив и всяко присвояване на стойност към var[] добавя елемент към масива. Първият елемент става $var[0], следващият $var[1], и т.н. Фукцията count() може да се използва за да определите колко елемента са били избрани, а функцията sort() - за да се сортира масива, ако е необходимо.
Забележете, че ако използвате JavaScript, [] на даден елемент, може да създаде проблеми при опит да се върне елемента по име. Затова използвайте ID на даденият елемент във формуляра или следната конструкция:
Как да предам променлива от Javascriopt към PHP?
Тъй като JavaScript (обикновенно) е технология от клиентската страна на връзката, PHP (обикновенно) е технология от сървърната част на връзката, а HTTP е протокол, които не поддържа състояние, двата езика не могат директно на споделят данни.
Въпреки това е възможно да се споделят променливи между тях. Един начин това да стане е да генерирате JavaScript код с PHP, по този начин след презареждане на браузъра ще получите указаните променливи обратно към PHP. Примерът по-долу показва как точно да постигнете това -- то позволява на PHP да вземе висичината и ширината на клиентския екран, понякога това с възможно само от клиентската страна на връзката.
<?php
if (isset($_GET['width']) AND isset($_GET['height'])) {
// извежда променливите
echo "Screen width is: ". $_GET['width'] ."<br />\n";
echo "Screen height is: ". $_GET['height'] ."<br />\n";
} else {
// предава променливите
// -- POST завката трябва да се обработи по различен начин)
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();
}
?>