FAQ
PHP Manual

PHP и HTML

PHP и HTML си взаимодействат активно PHP може да генерира HTML и HTML може да предава информация към PHP. Преди да прочетете това ръководство е много важно да знаете как да предавате информация към PHP. Също така, тук са включени много примери. Обърнете внимание към това какво е register_globals.

  1. Какво кодиране/декодиране трябва да използвам, за да изпратя информация чрез формуляр/URL?
  2. Опитвам да използвам <input type="image"> таг, но $foo.x и $foo.y променливите не съществуват. $_GET['foo.x'] не съществува също. Къде са те и как да получа достъп до тях?
  3. Как да създавам масиви в HTML <form>?
  4. Как мога да взема резултатите от select с множествен избор в HTML?
  5. Как да предам променлива от Javascriopt към PHP?

Какво кодиране/декодиране трябва да използвам, за да изпратя информация чрез формуляр/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 адреса е заменено с &amp;. Въпреки че повечето браузъри ще открият, ако сте го забравили, това не винаги е възможно. Така че, даже и вашият 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=option1
var=option2
var=option3

Всяка стойност ще препокрие предишната стойност на $var променливата. Решението на проблема е да се използва възможността на PHP да създава масив от елемент на формуляра. Ето един пример за употребата на това:

<select name="var[]" multiple="yes">

Това казва на PHP да приема $var за масив и всяко присвояване на стойност към var[] добавя елемент към масива. Първият елемент става $var[0], следващият $var[1], и т.н. Фукцията count() може да се използва за да определите колко елемента са били избрани, а функцията sort() - за да се сортира масива, ако е необходимо.

Забележете, че ако използвате JavaScript, [] на даден елемент, може да създаде проблеми при опит да се върне елемента по име. Затова използвайте ID на даденият елемент във формуляра или следната конструкция:


variable = documents.forms[0].elements['var[]'];

Как да предам променлива от 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();
}
?>


FAQ
PHP Manual