Sunteți pe pagina 1din 13

Curs: Advanced PHP programming - Building Web Applications

Modul: Programarea web


Unitate: Controalele PHP şi HTML

Dinamica în HTML

Prin exemplele de până acum, ne-am folosit de mai multe ori de HTML
pentru a influenţa formatizarea ieşirii aplicaţiei noastre. În primul rând,
am lucrat cu tag-urile cele mai de bază (cel mai adesea cu tagul <br>,
pentru rând nou).

Fiindcă întregul HTML este pur şi simplu un text, este clar că


implementarea PHP-ului în codul HTML subînţelege, de fapt, emiterea
la ieşire a unui conţinut textual formatat într-un mod specific. Prin
HTML determinăm cum va arăta acest conţinut, iar prin PHP
determinăm cum va funcţiona.

PHP poate fi implementat în HTML în mai multe feluri, în funcţie de


stilul şi dorinţele programatorului.

De exemplu, putem să emitem HTML din PHP:

<?php
echo "<b>test</b>";
?>

sau PHP poate fi cuprins de HTML:

<b>
<?php
echo "test";
?>
</b>

Deşi diametral diferite prin înfăţişare, aceste două coduri vor produce

© Copyright Link group 1 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

un rezultat identic în browser.

Aceasta înseamnă că, în momentul generării paginii HTML, nu este


important cum vom obţine un rezultat, ci doar cum va arăta acest
rezultat. Prin urmare, putem genera controale într-un mod cu totul
dinamic. De exemplu, să luăm un control text box despre care, înainte
de obţinerea unor date, nu putem fi siguri ce valoare va fi în acest
text-box:

<input type="text" value="valoarea nu se stie" />

Folosind PHP, acest control poate fi umplut cu date. Singurul lucru


important este ca, într-o parte a codului, înainte de desenarea
controlului, să obţinem datele dorite. În acest caz, la începutul codului
am atribuit variabilei $x valoarea "proba". Tagul php este închis şi,
între acest tag şi controlul text box, în câmpul pentru valoare,
introducem tagul PHP şi executăm emiterea conţinutului dorit. Fiindcă
tot ceea ce se află în cadrul tagurilor PHP este prelucrat de interpretor,
rezultatul acestui cod se va reduce la ceea ce dorim să emitem. În
acest caz, în text box se va scrie stringul "proba":

<?php
$x="proba";
?>
<input type="text" value="<?php echo $x; ?>" />

Fireşte că, în controlul însuşi, puteam să punem şi o logică mult mai


complexă:

<input type="text" value="<?php


//indiferent de cantitatea de text continuta in partea
//php, in html se va afla doar ceea ce a fost emis in

© Copyright Link group 2 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

//mod explicit din php


$x="proba";
echo $x;
?>" />

Acum se pune problemaa scopului desenării acestui text box şi, ca o


soluţie mai bună, se impune funcţia care va face aceasta la cererea
noastră.

Întâi creăm funcţia care desenează controlul:

<?php
function box()
{
echo "<input name=\"\" type=\"text\" value=\"proba\"
/>";
}
?>

...şi apoi, oriunde în cod, apelăm acest control:

<form id="form1" name="form1" method="post" action="">


<?php
box();
?>
</form>

Acum avem construirea aproape complet dinamică a controlului în


documentul HTML. Spunem aproape complet, deoarece acest control

© Copyright Link group 3 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

nu poate să facă nimic pentru că nu are nici un identificator.


Conţinutul său nu poate fi acceptat prin metodele standard de
trimitere a valorii prin http.

Însă, dacă facem o mică modificare şi parametrizăm funcţia box(),


astfel încât să acceptăm atributele pe care dorim să le numim, ca
parametrii ei:

<?php
function box($name,$value)
{
echo "<input name=\"".$name."\" type=\"text\"
value=\"".$value."\" />";
}
?>

obţinem un control care poate fi iniţializat într-un mod simplu, vizibil şi


rapid. Dacă punem un astfel de control într-un fişier separat (de ex.
controale.php.inc), vom putea schimba într-o singură funcţie
controalele de la nivelul întregii aplicaţii.

În următoarele lecţii vom învăţa cum să preluăm date din control prin
formă şi cum să o procesăm mai departe.

Date şi controalele HTML

Ca să obţinem date avem nevoie de sursă. Până acum ne-am


familiarizat cu XML, iar în lecţiile următoare vom cunoaşte şi bazele de
date, care sunt două dintre cele mai obişnuite surse de date pentru
aplicaţii web. Pentru nevoile noastre curente, spre a simplifica

© Copyright Link group 4 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

lucrurile, nu vom folosi nici una nici alta, ci vom crea manual un şir cu
câţiva membrii:

<?php
$?ir=array("romania"=>"bucuresti","franta"=>"paris","an
glia"=>"londra","spania"=>"madrid","germania"=>"berlin"
);
?>

Să presupunem că dorim să punem conţinutul acestui şir într-un


anumit option box:

<select>
<?php
foreach($sir as $stat => $oras)
{
?>
<option value="<?php echo $oras; ?>"><?php echo $stat;
?></option>
<?php
}
?>
</select>

Observăm că tagul PHP poate fi "tăiat" prin HTML în orice moment, şi


continuat într-un alt loc şi că procesul (în acest caz, bucla foreach) va
continua să fie activ. A trebuit chiar să închidem bucla, pentru că altfel
PHP ar fi semnalat o eroare.

În acest exemplu, de asemenea, vedem modul de umplere a option


box cu date. Trebuie să ştim că, în procesul de trimitere a datelor, ca
valoare actuală va fi considerată valoarea din câmpul value (orase), şi

© Copyright Link group 5 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

numai dacă aceasta nu există, valoarea actuală va fi valoarea


elementului (stat).

Pentru a seta selecţie pe o anumită valoare a câmpului (de exemplu,


dorim să selectăm Paris-Franta), trebuie să adăugăm mai mult cod
PHP în option tag şi să-l schimbăm astfel încât să arate aşa:

<option <?php if ($oras=="paris") { ?>


selected="selected" <?php } ?> value="<?php echo $oras;
?>"><?php echo $stat; ?></option>

Avem în vedere că elementul option box (select) al controlului posedă


atributul selected care, dacă valoarea lui este "selected", setează
selecţia pe acest element. În cursul executării buclei, de altfel,
verificăm şi dacă membrul actual al şirului este acela care dorim să fie
selectat. Dacă este, prin comanda PHP scriem atributul şi îi acordăm
valoarea dorită.

Dacă am pune toate acestea într-o funcţie, am obţine un cod mai clar
şi cu o funcţionalitate ameliorată:

<?php
function option($sir,$selectie)
{
echo "<select>";
foreach($sir as $stat => $oras)
{
echo "<option ";
if ($oras==$selectie)
echo "selected=\"selected\"";
echo "value=\"". $oras ."\">";
echo $stat . "</option>";
}
echo "</select>";
}

© Copyright Link group 6 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

?>

Acum putem expedia oriunde în cod orice şir de perechi în această


funcţie, inclusiv capitala statului care dorim să fie selectată:

<?php
$sir=array("romania"=>"bucuresti","franta"=>"paris","an
glia"=>"londra","spania"=>"madrid","germania"=>"berlin"
);
option($sir,"madrid");
?>

În plus, putem să creăm în mod simplu o cantitate nelimitată de acest


fel de controale, fiecare dintre ele având un set de date diferit. De
exemplu, dacă am avea un şir bidimensional:

<?php
$siruri=array(
array("romania"=>"bucuresti","franta"=>"paris","anglia"
=>"londra","spania"=>"madrid","germania"=>"berlin"),
array("dacia"=>"logan","peugeot"=>"peugeot
406","ford"=>"taunus","seat"=>"ibiza","bmw"=>"353"),
);
?>

am putea, fără nici o problemă, să creăm controalele pentru subşiruri


în două linii de cod:

<?php

© Copyright Link group 7 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

foreach($secvcente as $secventa)
option($secventa,"");
?>

Dacă copiaţi, de probă, de câteva ori subşirurile şirurului $siruri şi


restartaţi scriptul, veţi vedea că numărul de controale va creşte.

Controalele acestea sunt, în forma aceasta, inutilizabile pentru


expedierea datelor, pentru că nu au identificatori şi nu sunt mărginite
de formă. Aceasta se poate rezolva foarte simplu prin adăugarea unui
alt parametru în funcţia option(), în care veţi expedia în mod dinamic
şi identificatori pentru controale.

De asemenea, nu trebuie obligatoriu să folosiţi ghilimele în crearea


controalelor HTML prin comanda echo. În locul lor puteţi folosi şi
apostrofuri, la care nu va trebui să introduceţi marcajul escape în faţa
fiecărui semn de ghilimele, care trebuie tratată ca string (").

În acest mod putem crea şi propriul nostru control grid:

<?php
$sir=array("romania"=>"bucuresti","franta"=>"paris","an
glia"=>"londra","spania"=>"madrid","germania"=>"berlin"
);
?>
<table width="100%" height="10" border="0"
cellpadding="0" cellspacing="0">
<?php
$numarator=0;
foreach($sir as $stat => $oras)
{
?>
<tr <?php if($numarator%2==0) echo
"style=\"background-color:#D7F7FF;\"";
else echo "style=\"background-color:#9BD7FF;\""; ?>>

© Copyright Link group 8 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

<td valign="top"><?php echo $stat; ?></td>


<td valign="top"><?php echo $oras; ?></td>
</tr>
<?php
$numarator++;
}
?>
</table>

Aici, pentru desenare folosim rândurile tabelului. (Această abordare nu


este foarte apreciată, şi în loc de tabele se recomandă lucrul cu
tagurile DIV). După iniţializarea şirului (ceea ce am făcut în toate
exemplele de până acum), începem desenarea tabelului. Tabelul nu se
va repeta în buclă şi de aceea punem blocul PHP în interiorul său. Ceea
ce dorim să se repete în tabel sunt rândurile. De aceea, în fiecare
iteraţie a buclei punem câte un rând (tr) şi două coloane în el. Înaintea
buclei punem numărătorul, prin care vom controla dacă rândul este
par sau impar şi în funcţie de aceasta emitem o anumită culoare. În
coloane (td) stocăm datele actuale din buclă.

Modurile de codare procesate în lecţia aceasta sunt destul de clare în


exemple mai mici, dar este foarte greu să ne descurcăm dacă este
vorba de cantităţi mari de cod. De aceea, din ce în ce mai mult, se
potenţează separarea codurilor HTML şi PHP în unităţi separate.
Aceasta depinde de gustul şi posibilităţile programatorului.
Tehnica procesată în această lecţie se mai numeşte şi Codare Inline
sau spaghetti code, iar separarea codurilor HTML şi PHP în unităţi
separate se mai numeşte - Code behind.

De reţinut din lecţie:

© Copyright Link group 9 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

1. PHP poate fi încuibat în HTML.

2. PHP poate să emită HTML.

3. Controalele HTML pot fi procesate şi emise prin funcţii PHP.

4. Depunerea codului HTML în funcţii PHP contribuie la


funcţionalitate, încapsulare şi vizibilitate.

5. Codarea Inline sau spaghetti code este procesarea HTML-ului şi a


codului de server (PHP) în acelaşi document.

6. Procesarea codului de server şi a HTML-ului în documente


separate se numeşte Code behind.

© Copyright Link group 10 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

APHP_03 - Advanced PHP Programming


1. Procesarea codului de server şi codului de client într-un
singur document se numeşte:
a) programarea off line
b) programarea in line
c) programarea new line
d) programarea code behind
2. Linia <input type="text" value="<?php echo "test"; ?>" />
va da următorul rezultat în codul sursă al paginii:
a) va semnala o eroare
b) <input type="text" value="test" />
c) <input type="text" value="" />
d) <input type="text" value="<?php echo "test"; ?>" />
3. Procesarea codului de server şi a codului de client în
documente separate se numeşte:
a) programarea off line
b) programarea in line
c) programarea new line
d) programarea code behind
4. Presupunând că în cod există deja variabilele $value şi
$name, linia: echo "<input name="".$name."" type="text"
value="".$value."" />"; va:
a) semnala o eroare
b) va afişa un control
c) nu va semnala nicio eroare şi nu va afişa niciun control
d) va afişa un control numai dacă valorile $value şi $name
nu sunt vide
5. Dacă un tag PHP se întrerupe în cursul executării buclei
între paranteze acolade, bucla va mai fi valabilă dacă
redeschidem tagurile php şi o închidem cu o paranteză

© Copyright Link group 11 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

acoladă.
a) Adevărat
b) Fals
c) Adevărat, doar dacă nu există un cod HTML între tagurile
respective
d) Adevărat, doar dacă există un cod HTML între tagurile
respective
6. PHP poate fi încuibat în cod HTML.
a) Adevărat, dacă codul HTML este valabil
b) Adevărat
c) Fals
d) Fals, dacă aceasta nu se accentuează în mod explicit în
codul HTML
7. Din codul PHP pot fi emise controale HTML complete.
a) Fals
b) Adevărat
c) Adevărat, dar numai dacă sunt folosite apostrofuri
d) Adevărat, dacă controalele au identificatori

© Copyright Link group 12 / 13


Curs: Advanced PHP programming - Building Web Applications
Modul: Programarea web
Unitate: Controalele PHP şi HTML

1. Procesarea codului de server şi codului de client într-un


singur document se numeşte:
b
2. Linia <input type="text" value="<?php echo "test"; ?>" />
va da următorul rezultat în codul sursă al paginii:
b
3. Procesarea codului de server şi a codului de client în
documente separate se numeşte:
d
4. Presupunând că în cod există deja variabilele $value şi
$name, linia: echo "<input name="".$name."" type="text"
value="".$value."" />"; va:
a
5. Dacă un tag PHP se întrerupe în cursul executării buclei
între paranteze acolade, bucla va mai fi valabilă dacă
redeschidem tagurile php şi o închidem cu o paranteză
acoladă.
a
6. PHP poate fi încuibat în cod HTML.
b
7. Din codul PHP pot fi emise controale HTML complete.
b

© Copyright Link group 13 / 13

S-ar putea să vă placă și