Structuri de control
Instrucțiuni condiționale if / else / elseif în PHP
Instrucțiunile condiționale sunt folosite pentru a lua decizii în cod, adică pentru a executa anumite bucăți de
cod doar atunci când o condiție este adevărată. În PHP, cele mai des folosite sunt if,
else și elseif.
Instrucțiunea if
Se folosește pentru a verifica o condiție. Dacă este adevărată (true), codul din interior se
execută.
<?php
$varsta = 20;
if ($varsta >= 18) {
echo "Ai voie să intri pe site.";
}
?>
Instrucțiunea if / else
Dacă condiția if nu este adevărată, atunci se execută ramura else.
<?php
$varsta = 15;
if ($varsta >= 18) {
echo "Acces permis.";
} else {
echo "Acces interzis. Trebuie să ai cel puțin 18 ani.";
}
?>
Instrucțiunea if / elseif / else
Când există mai multe condiții posibile, putem folosi elseif pentru a le verifica pe rând.
În codul de mai jos se verifică prima condiție $nota >= 9. Dacă e adevărată, se afișează
„Foarte bine!” și codul nu mai verifică restul.
- Dacă nu, trece la
elseifși verifică următoarea condiție. - Dacă niciuna nu e adevărată, se execută ramura
else.
<?php
$nota = 7;
if ($nota >= 9) {
echo "Foarte bine!";
} elseif ($nota >= 7) {
echo "Bine!";
} elseif ($nota >= 5) {
echo "Suficient.";
} else {
echo "Insuficient.";
}
?>
Exemple practice cu instrucțiuni condiționale în PHP
Iată câteva situații reale în care folosim if / else / elseif pentru a lua decizii în aplicații:
Exemplu 1: Verificarea autentificării utilizatorului
Vrem să verificăm dacă un utilizator este logat sau nu. Dacă este logat, îi afișăm un mesaj de bun venit, altfel îl rugăm să se conecteze.
<?php
$esteLogat = false;
if ($esteLogat) {
echo "Bun venit în contul tău!";
} else {
echo "Te rugăm să te conectezi pentru a continua.";
}
?>
Exemplu 2: Reducere în funcție de vârstă
Un magazin oferă reducere pentru elevi și pensionari. Folosim if / elseif / else pentru a stabili
reducerea aplicată.
<?php
$varsta = 70;
if ($varsta < 18) {
echo "Primești reducere de 20% (elev).";
} elseif ($varsta >= 65) {
echo "Primești reducere de 30% (pensionar).";
} else {
echo "Nu se aplică reducere.";
}
?>
Exemplu 3: Verificarea parolei introduse
Aici simulăm verificarea unei parole introduse de utilizator. Dacă parola este corectă, afișăm un mesaj de succes, altfel afișăm o eroare.
<?php
$parolaCorecta = "1234";
$parolaIntrodusa = "123";
if ($parolaIntrodusa === $parolaCorecta) {
echo "Parolă corectă! Ai acces.";
} else {
echo "Parolă incorectă! Te rugăm să încerci din nou.";
}
?>
Exemplu 4: Clasificarea notelor școlare
În funcție de nota elevului, afișăm o apreciere. Acesta este un exemplu clasic pentru elseif.
<?php
$nota = 8;
if ($nota >= 9) {
echo "Excelent!";
} elseif ($nota >= 7) {
echo "Foarte bine!";
} elseif ($nota >= 5) {
echo "Ai trecut!";
} else {
echo "Din păcate, ai picat examenul.";
}
?>
Instrucțiunea switch în PHP
Instrucțiunea switch este o alternativă la utilizarea mai multor if / elseif / else.
Ea se folosește atunci când dorim să comparăm o singură valoare cu mai multe opțiuni posibile.
Astfel, codul devine mai ordonat și mai ușor de citit.
Sintaxa generală a lui switch
Forma de bază arată astfel:
<?php
switch (expresie) {
case valoare1:
// cod executat dacă expresia == valoare1
break;
case valoare2:
// cod executat dacă expresia == valoare2
break;
case valoare3:
// cod executat dacă expresia == valoare3
break;
default:
// cod executat dacă expresia nu se potrivește cu niciun caz
}
?>
Explicație:
expresie- este variabila sau valoarea pe care dorim să o verificăm.case- definește o valoare posibilă. Dacă expresia este egală cu acea valoare, se execută codul corespunzător.break- oprește execuția și „scoate” programul dinswitch. Dacă lipsește, codul „curge” și în cazurile următoare (comportament numit fall-through).default- se execută doar dacă niciuncasenu a fost adevărat (echivalent cuelsela if-uri).
Exemplu practic: zilele săptămânii
Vrem să afișăm ce zi a săptămânii este în funcție de un număr (1 = Luni, 2 = Marți etc.).
<?php
$zi = 3;
switch ($zi) {
case 1:
echo "Luni";
break;
case 2:
echo "Marți";
break;
case 3:
echo "Miercuri";
break;
case 4:
echo "Joi";
break;
case 5:
echo "Vineri";
break;
case 6:
echo "Sâmbătă";
break;
case 7:
echo "Duminică";
break;
default:
echo "Valoare invalidă! Ziua trebuie să fie între 1 și 7.";
}
?>
Exemplu cu „fall-through” (fără break)
Dacă nu folosim break, execuția continuă și în cazurile următoare. Uneori acest lucru este
intenționat.
<?php
$nota = 10;
switch ($nota) {
case 10:
case 9:
echo "Excelent!";
break;
case 8:
case 7:
echo "Foarte bine!";
break;
case 6:
case 5:
echo "Ai trecut!";
break;
default:
echo "Ai picat examenul.";
}
?>
Aici, atât nota 10 cât și nota 9 duc la același rezultat (Excelent!), fără să duplicăm codul.
Exemplu: Meniu dinamic generat cu PHP și switch
În loc să scriem manual opțiunile în HTML, putem să le păstrăm într-un array PHP. Astfel, codul devine mai flexibil și mai ușor de actualizat.
<?php
// Definim opțiunile într-un array asociativ
$meniu = [
1 => "Afișează profilul",
2 => "Setări cont",
3 => "Ieșire"
];
?>
<!-- Formular HTML generat de PHP -->
<form method="post">
<label for="optiune">Alege o opțiune din meniu:</label><br><br>
<select name="optiune" id="optiune">
<?php
// Generăm automat opțiunile din array
foreach ($meniu as $cheie => $valoare) {
echo "<option value='$cheie'>$valoare</option>";
}
?>
</select><br><br>
<button type="submit">Trimite</button>
</form>
<?php
// Procesăm alegerea utilizatorului
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$optiune = $_POST["optiune"];
echo "<h3>Rezultat:</h3>";
switch ($optiune) {
case 1:
echo "Ai ales să vezi profilul.";
break;
case 2:
echo "Ai ales să modifici setările contului.";
break;
case 3:
echo "Programul se închide... La revedere!";
break;
default:
echo "Opțiune invalidă.";
}
}
?>
<?php
// Definim opțiunile într-un array asociativ
$meniu = [
1 => "Afișează profilul",
2 => "Setări cont",
3 => "Ieșire"
];
?>
<!-- Formular HTML generat de PHP -->
<form method="post">
<label for="optiune">Alege o opțiune din meniu:</label><br><br>
<select name="optiune" id="optiune">
<?php
// Generăm automat opțiunile din array
foreach ($meniu as $cheie => $valoare) {
echo "<option value='$cheie'>$valoare</option>";
}
?>
</select><br><br>
<button type="submit">Trimite</button>
</form>
<?php
// Procesăm alegerea utilizatorului
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$optiune = $_POST["optiune"];
echo "<h3>Rezultat:</h3>";
switch ($optiune) {
case 1:
echo "Ai ales să vezi profilul.";
break;
case 2:
echo "Ai ales să modifici setările contului.";
break;
case 3:
echo "Programul se închide... La revedere!";
break;
default:
echo "Opțiune invalidă.";
}
}
?>
Avantajele acestei metode
- Dacă vrei să adaugi o opțiune nouă, trebuie doar să pui o linie în array-ul
$meniuși apare automat în formular. - Codul HTML rămâne curat și scurt, chiar dacă ai multe opțiuni.
- Separă clar datele (array-ul cu opțiuni) de logica de procesare (instrucțiunea switch).
Când alegem switch în loc de if / elseif?
- Când avem de verificat o singură variabilă cu mai multe valori posibile.
- Când codul devine greu de urmărit cu prea multe
elseif. - Când vrem să grupăm mai multe cazuri care au același rezultat.
Buclele while în PHP
O buclă while este folosită atunci când vrem să repetăm o anumită instrucțiune atâta timp cât o
condiție este adevărată. Practic, PHP verifică condiția la fiecare iterație și, dacă rezultatul
este true, execută codul din interiorul buclei. Când condiția devine false, bucla se
oprește.
Sintaxa buclei while
while (condiție) {
// cod care se execută cât timp condiția este adevărată
}
Exemplu practic cu while
<?php
$contor = 1;
while ($contor <= 5) {
echo "Numărul este: $contor <br>";
$contor++;
}
?>
Explicație pas cu pas
- 1. Am creat o variabilă
$contorși i-am dat valoarea 1. - 2. Bucla
whileverifică dacă$contor <= 5. Atâta timp cât această condiție este adevărată, codul din interior se execută. - 3. În interior, folosim
echopentru a afișa valoarea curentă a lui$contor. - 4. La final, incrementăm variabila cu
$contor++, pentru a evita o buclă infinită. - 5. Când
$contorajunge la 6, condiția nu mai este adevărată și bucla se oprește.
Unde este utilă bucla while?
Bucla while se folosește atunci când nu știm dinainte câte iterații sunt necesare. De exemplu:
citirea datelor dintr-un fișier până la sfârșit, parcurgerea rezultatelor dintr-o interogare SQL sau așteptarea
unei condiții externe.
Buclele do...while în PHP
O buclă do...while este asemănătoare cu while, dar are o diferență importantă:
codul din interior se execută cel puțin o dată, indiferent dacă condiția este adevărată sau
falsă. Abia după prima execuție, condiția este verificată pentru următoarele iterații.
Sintaxa buclei do...while
do {
// cod care se execută cel puțin o dată
} while (condiție);
Exemplu practic cu do...while
<?php
$contor = 6;
do {
echo "Numărul este: $contor <br>";
$contor++;
} while ($contor <= 5);
?>
Explicație pas cu pas
- 1. Am setat
$contorla valoarea6. - 2. Bucla
do...whileexecută codul din interior fără să verifice condiția la început, deci"Numărul este: 6"va fi afișat. - 3. După prima execuție, condiția
$contor <= 5este verificată. Cum$contorare deja valoarea 7, condiția estefalse, iar bucla se oprește.
Când folosim do...while?
Se folosește atunci când vrem să rulăm codul cel puțin o dată, chiar dacă ulterior condiția nu este îndeplinită. Exemple practice: afisarea unui meniu interactiv, cererea repetată a datelor de la utilizator până când introduce o valoare corectă.
Buclele for în PHP
Bucla for este una dintre cele mai utilizate în PHP. Ea este ideală atunci când știm dinainte
de câte ori vrem să repetăm o instrucțiune. Spre deosebire de while sau
do...while, care verifică doar o condiție, bucla for are trei componente esențiale:
Sintaxa buclei for
for (inițializare; condiție; incrementare/decrementare) {
// codul care se repetă
}
- Inițializare - stabilește valoarea de start (ex:
$i = 1). - Condiție - bucla rulează atâta timp cât această expresie este adevărată.
- Incrementare / Decrementare - stabilește cum se modifică variabila contor la
fiecare iterație (ex:
$i++sau$i--).
Exemplu practic simplu cu for
<?php
for ($i = 1; $i <= 5; $i++) {
echo "Valoarea contorului este: $i <br>";
}
?>
Explicație pas cu pas
- 1. Inițializarea:
$i = 1. - 2. Condiția: verifică dacă
$i <= 5. Dacă este adevărată, codul din interior se execută. - 3. După fiecare execuție,
$ise incrementează ($i++). - 4. Bucla continuă până când condiția nu mai este adevărată (în cazul nostru, când
$idevine 6, bucla se oprește).
Când folosim bucla for?
Este utilă pentru situații clare în care știm numărul exact de iterații: afișarea numerelor, parcurgerea unei liste cu lungime fixă, generarea de tabele sau structuri repetitive.
Buclele foreach în PHP
Bucla foreach este special concepută pentru a lucra cu array-uri și
colecții. Ea parcurge fiecare element dintr-un array fără să fie nevoie să știm dinainte câte
elemente există. Astfel, este cea mai simplă și elegantă metodă de a itera prin liste de valori.
Sintaxa buclei foreach
foreach ($array as $valoare) {
// cod care folosește $valoare
}
foreach ($array as $cheie => $valoare) {
// cod care folosește $cheie și $valoare
}
- $valoare - reprezintă elementul curent din array.
- $cheie - indexul sau cheia asociată acelui element (opțional).
Exemplu practic simplu
<?php
$fructe = ["mere", "pere", "banane"];
foreach ($fructe as $fruct) {
echo "Îmi place să mănânc $fruct <br>";
}
?>
Exemplu cu chei și valori
<?php
$preturi = [
"mere" => 3,
"pere" => 4,
"banane" => 5
];
foreach ($preturi as $fruct => $pret) {
echo "Prețul pentru $fruct este $pret lei <br>";
}
?>
Modificarea elementelor direct în foreach
Dacă vrem să modificăm elementele unui array în timpul iterării, putem folosi referințe:
<?php
$fructe = ["mere", "pere", "banane"];
foreach ($fructe as &$fruct) {
$fruct = strtoupper($fruct); // transformăm fiecare element în majuscule
}
unset($fruct); // important pentru a evita referințe neașteptate
print_r($fructe);
/* Array
(
[0] => MERE
[1] => PERE
[2] => BANANE
)
*/
?>
Foreach cu array multidimensional
Parcurgerea array-urilor multidimensionale se face prin foreach-uri imbricate:
<?php
$users = [
["nume" => "Ioan", "varsta" => 28],
["nume" => "Ana", "varsta" => 25],
];
foreach ($users as $user) {
echo "Nume: ".$user['nume'].", Varsta: ".$user['varsta']."<br>";
}
?>
Foreach cu obiecte
Foreach funcționează și cu obiecte pentru a itera proprietățile acestora:
<?php
class User {
public $nume;
public $email;
public function __construct($nume, $email) {
$this->nume = $nume;
$this->email = $email;
}
}
$user = new User("Ioan", "ioan@example.com");
foreach ($user as $proprietate => $valoare) {
echo "$proprietate: $valoare <br>";
}
?>
De ce să folosim foreach?
Este foarte eficient atunci când lucrăm cu array-uri sau obiecte. În loc să folosim un for clasic
cu un contor, foreach face codul mai simplu, mai ușor de citit și reduce riscul erorilor.
Bune practici pentru foreach
- Folosește referințe cu atenție și dezactivează-le după folosire cu
unset(). - Evita modificarea array-ului pe parcursul iterării dacă nu este necesar.
- Folosește cheile pentru claritate când array-ul este asociativ sau multidimensional.
- Foreach este de preferat față de for pentru array-uri, deoarece codul devine mai curat și mai ușor de întreținut.
Compararea tipurilor de bucle în PHP
PHP oferă mai multe tipuri de bucle pentru a repeta instrucțiuni. Alegerea buclei potrivite depinde de situație: știm sau nu numărul exact de iterații, lucrăm cu array-uri, sau vrem să executăm codul măcar o dată.
1. Bucla for
Se folosește atunci când știm de la început câte repetări sunt necesare. Este ideală pentru numărători sau parcurgerea unor intervale numerice.
<?php
for ($i = 1; $i <= 5; $i++) {
echo "Valoarea lui i este: $i <br>";
}
?>
2. Bucla foreach
Special concepută pentru array-uri și obiecte. Parcurge automat fiecare element, fără a avea nevoie de contor explicit.
<?php
$fructe = ["mere", "pere", "banane"];
foreach ($fructe as $fruct) {
echo "Fruct: $fruct <br>";
}
?>
3. Bucla while
Execută instrucțiuni atâta timp cât condiția este adevărată. Se folosește atunci când nu știm dinainte câte iterații vor fi.
<?php
$contor = 1;
while ($contor <= 5) {
echo "Numărul este: $contor <br>";
$contor++;
}
?>
4. Bucla do...while
Similară cu while, dar execută codul cel puțin o dată, chiar dacă condiția este
falsă de la început.
<?php
$contor = 6;
do {
echo "Numărul este: $contor <br>";
$contor++;
} while ($contor <= 5);
?>
Tabel comparativ între bucle
| Tip buclă | Când o folosim | Caracteristici |
|---|---|---|
for |
Când știm numărul exact de pași | Folosește contor numeric (inițializare, condiție, incrementare) |
foreach |
Pentru array-uri și obiecte | Nu necesită contor, parcurge direct elementele |
while |
Când numărul de iterații nu este cunoscut | Verifică condiția înainte de fiecare execuție |
do...while |
Când vrem ca blocul să ruleze cel puțin o dată | Condiția este verificată după prima execuție |
Validarea simplă a unui formular în PHP
Validarea formularelor este esențială pentru a te asigura că utilizatorul introduce date corecte și complete înainte de procesare. Vom crea un formular cu nume și email, iar PHP va verifica dacă aceste câmpuri sunt completate și dacă email-ul este valid.
Formular HTML
<form method="post" action="">
<label for="nume">Nume:</label>
<input type="text" id="nume" name="nume"><br><br>
<label for="email">Email:</label>
<input type="text" id="email" name="email"><br><br>
<input type="submit" value="Trimite">
</form>
Script PHP pentru validare
<?php
// Inițializare variabile pentru erori și valori
$nume = $email = "";
$eroareNume = $eroareEmail = "";
// Verificăm dacă formularul a fost trimis
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Validare nume
if (empty($_POST["nume"])) {
$eroareNume = "Numele este obligatoriu!";
} else {
$nume = htmlspecialchars($_POST["nume"]);
}
// Validare email
if (empty($_POST["email"])) {
$eroareEmail = "Email-ul este obligatoriu!";
} elseif (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
$eroareEmail = "Email-ul nu este valid!";
} else {
$email = htmlspecialchars($_POST["email"]);
}
// Dacă nu sunt erori, afișăm datele
if (empty($eroareNume) && empty($eroareEmail)) {
echo "<p>Formular trimis cu succes!</p>";
echo "<p>Nume: $nume</p>";
echo "<p>Email: $email</p>";
}
}
?>
Afișarea mesajelor de eroare lângă câmpuri
<form method="post" action="">
<label for="nume">Nume:</label>
<input type="text" id="nume" name="nume" value="<?php echo $nume; ?>">
<span style="color:red;"><?php echo $eroareNume; ?></span><br><br>
<label for="email">Email:</label>
<input type="text" id="email" name="email" value="<?php echo $email; ?>">
<span style="color:red;"><?php echo $eroareEmail; ?></span><br><br>
<input type="submit" value="Trimite">
</form>
<?php
// Inițializare variabile
$nume = $email = "";
$eroareNume = $eroareEmail = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["nume"])) {
$eroareNume = "Numele este obligatoriu!";
} else {
$nume = htmlspecialchars($_POST["nume"]);
}
if (empty($_POST["email"])) {
$eroareEmail = "Email-ul este obligatoriu!";
} elseif (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
$eroareEmail = "Email-ul nu este valid!";
} else {
$email = htmlspecialchars($_POST["email"]);
}
if (empty($eroareNume) && empty($eroareEmail)) {
echo "<p>Formular trimis cu succes!<p>";
echo "<p>Nume: $nume<p>";
echo "<p>Email: $email<p>";
}
}
?>
<form method="post" action="">
<label for="nume">Nume:</label>
<input type="text" name="nume" value="<?php echo $nume; ?>">
<span style="color:red;"><?php echo $eroareNume; ?></span><br><br>
<label for="email">Email:</label>
<input type="text" name="email" value="<?php echo $email; ?>">
<span style="color:red;"><?php echo $eroareEmail; ?></span><br><br>
<input type="submit" value="Trimite">
</form>
Explicație pas cu pas
- Folosim
$_SERVER["REQUEST_METHOD"]pentru a verifica dacă formularul a fost trimis prin POST. - Fiecare câmp este verificat cu
empty(). Dacă nu este completat, afișăm mesaj de eroare. - Email-ul este validat folosind
filter_var()cuFILTER_VALIDATE_EMAIL. - Funcția
htmlspecialchars()se folosește pentru a preveni atacuri XSS prin convertirea caracterelor speciale în entități HTML. - Dacă nu există erori, datele sunt afișate pe pagină.
- Mesajele de eroare sunt afișate lângă câmpurile respective, iar valorile completate rămân în input-uri pentru a nu fi pierdute la trimitere.
🧠 Quiz - Structuri de control în PHP