Skip to content
SilverPC Blog

SilverPC Blog

Tech

Az elsődleges attribútumok nyomában: Funkcionális függőségek elemzése egy relációs sémában
  • Tech

Az elsődleges attribútumok nyomában: Funkcionális függőségek elemzése egy relációs sémában

2025.10.03.
Hálózati detektívmunka: Hogyan találj meg egy eszközt a hálózaton, ha csak a portját ismered?
  • Tech

Hálózati detektívmunka: Hogyan találj meg egy eszközt a hálózaton, ha csak a portját ismered?

2025.10.03.
A folyamatos hang titka: Így működik az audio stream bufferelése a háttérben
  • Tech

A folyamatos hang titka: Így működik az audio stream bufferelése a háttérben

2025.10.03.
Álmaid böngészős játéka: Milyen technológiákkal vágj bele, és miért lehet a Java a tökéletes backend választás?
  • Tech

Álmaid böngészős játéka: Milyen technológiákkal vágj bele, és miért lehet a Java a tökéletes backend választás?

2025.10.03.
Érdemes belevágni? A PLC programozás valós piaci értéke és a szükséges háttértudás
  • Tech

Érdemes belevágni? A PLC programozás valós piaci értéke és a szükséges háttértudás

2025.10.03.
Miért idegenkednek a Peer-to-Peer megoldásoktól a tech óriások? A centralizáció rejtett előnyei
  • Tech

Miért idegenkednek a Peer-to-Peer megoldásoktól a tech óriások? A centralizáció rejtett előnyei

2025.10.03.

Express Posts List

De ce am un subwoofer fără bass? Cauze comune și soluții rapide
  • Roman

De ce am un subwoofer fără bass? Cauze comune și soluții rapide

2025.10.03.
Ah, frustrarea! Ai investit într-un subwoofer nou sau ai un sistem audio excelent, dar când vine vorba...
Bővebben Read more about De ce am un subwoofer fără bass? Cauze comune și soluții rapide
Lumină spectaculoasă: Tot ce trebuie să știi despre o alimentare de Neon corectă și sigură
  • Roman

Lumină spectaculoasă: Tot ce trebuie să știi despre o alimentare de Neon corectă și sigură

2025.10.03.
Upgrade audio neconvențional: Ghid practic despre cum să pui alte boxe în căruță
  • Roman

Upgrade audio neconvențional: Ghid practic despre cum să pui alte boxe în căruță

2025.10.03.
Ecran negru la laptop? Ghid de depanare pentru un conector de display la Ideapad Y700
  • Roman

Ecran negru la laptop? Ghid de depanare pentru un conector de display la Ideapad Y700

2025.10.03.
Alegerea perfectă pentru casa ta: Cum selectezi un releu pentru comandă becuri cu 1, 2 sau 3 canale?
  • Roman

Alegerea perfectă pentru casa ta: Cum selectezi un releu pentru comandă becuri cu 1, 2 sau 3 canale?

2025.10.03.
Primary Menu
  • Főoldal
  • Hírek
  • Tech
  • Hardver
  • Szoftver
  • Mobil
  • Gamer
  • Játék
  • Web
  • Tudomány
  • Egyéb
  • Roman

Primul tău proiect: Cum să construiești un calculator în PHP pas cu pas

2025.10.02.

Ești la început de drum în lumea programării sau vrei să îți consolidezi cunoștințele de bază în dezvoltare web? Ai ales momentul perfect! Un calculator simplu în PHP este proiectul ideal pentru a-ți pune la încercare abilitățile și pentru a înțelege cum funcționează interacțiunea dintre un formular HTML și logica de backend. Nu te intimida, chiar dacă sună complex, procesul este unul intuitiv și plin de satisfacții. Acest ghid te va conduce prin fiecare etapă, de la configurarea mediului la afișarea rezultatelor, totul într-un limbaj accesibil și prietenos. Hai să începem aventura programării în PHP!

De ce un calculator în PHP este proiectul de debut perfect? 🤔

Construirea unui utilitar de calcul, oricât de elementar, îți oferă o perspectură clară asupra mai multor concepte fundamentale din dezvoltarea web:

  • Interacțiunea client-server: Vei învăța cum datele introduse de utilizator (partea de client, adică browserul) sunt trimise către server (unde rulează codul PHP) și cum acesta procesează informațiile.
  • Formulare HTML: Înțelegi rolul și structura elementelor unui formular, esențiale pentru orice aplicație web interactivă.
  • Logica de procesare PHP: Descoperi cum să manipulezi variabile, să folosești structuri condiționale și să execuți operații matematice.
  • Validarea datelor: O componentă crucială pentru a asigura robustețea aplicației tale și pentru a preveni erorile cauzate de intrări neașteptate.

Este, practic, o mini-aplicație completă care te introduce în ritmul programării PHP. E un prim pas solid către proiecte mai ambițioase! 💡

Etape pregătitoare: Ce ai nevoie înainte să începi? 🛠️

Pentru a construi și rula aplicația ta, vei avea nevoie de câteva instrumente esențiale. Nu-ți face griji, toate sunt gratuite și relativ ușor de instalat:

  1. Un mediu de dezvoltare local: Acesta include un server web (Apache), PHP și o bază de date (MySQL/MariaDB), deși pentru acest proiect nu vom folosi baza de date. Cele mai populare opțiuni sunt XAMPP (pentru Windows, macOS, Linux) sau WampServer (doar pentru Windows). Descarcă și instalează una dintre ele.
  2. Un editor de text sau IDE: Ai nevoie de un loc unde să scrii codul. Recomandări populare includ VS Code, Sublime Text sau PhpStorm. Alege-l pe cel cu care te simți cel mai confortabil.
  3. Un browser web: Chrome, Firefox, Edge – orice folosești de obicei pentru navigare.

După ce ai instalat XAMPP sau WampServer, asigură-te că serverul Apache și modulul PHP sunt pornite. Vei scrie fișierele tale PHP în directorul `htdocs` din instalarea XAMPP sau `www` din WampServer.

Pasul 1: Construirea interfeței (HTML) 🌐

Primul lucru pe care trebuie să-l facem este să creăm formularul pe care utilizatorul îl va folosi pentru a introduce numerele și a selecta operația. Vom crea un fișier numit `index.php` în directorul rădăcină al serverului tău local (de exemplu, `htdocs/calculator/index.php`).

Iată codul HTML de bază:

<!DOCTYPE html>
<html lang="ro">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calculator Simplu PHP</title>
    <style>
        body { font-family: Arial, sans-serif; background-color: #f4f4f4; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; }
        .calculator-container { background-color: #fff; padding: 25px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); width: 300px; text-align: center; }
        input[type="number"], select, button { width: calc(100% - 20px); padding: 10px; margin-bottom: 10px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
        button { background-color: #007bff; color: white; border: none; cursor: pointer; font-size: 16px; transition: background-color 0.3s ease; }
        button:hover { background-color: #0056b3; }
        .result { margin-top: 15px; font-size: 20px; font-weight: bold; color: #333; }
        .error { color: #dc3545; font-weight: bold; margin-bottom: 10px; }
    </style>
</head>
<body>
    <div class="calculator-container">
        <h2>Calculator PHP <span role="img" aria-label="calculator">🧮</span></h2>
        <form action="index.php" method="post">
            <input type="number" name="num1" placeholder="Primul număr" required>
            <select name="operator">
                <option value="add">+ Adunare</option>
                <option value="subtract">- Scădere</option>
                <option value="multiply">* Înmulțire</option>
                <option value="divide">/ Împărțire</option>
            </select>
            <input type="number" name="num2" placeholder="Al doilea număr" required>
            <button type="submit" name="submit">Calculează</button>
        </form>
        <div class="result">
            <!-- Rezultatul va fi afișat aici -->
        </div>
    </div>
</body>
</html>

Explicație rapidă a componentelor HTML:

  • `<form action=”index.php” method=”post”>`: Acesta este elementul central. `action=”index.php”` înseamnă că datele formularului vor fi trimise către același fișier PHP (foarte comun pentru proiecte simple). `method=”post”` indică modul în care datele sunt trimise – mai sigur pentru date sensibile și cantități mai mari de informații decât `GET`.
  • `<input type=”number” name=”num1″>`: Un câmp de introducere numerică. Atributul `name` (`num1`, `num2`, `operator`) este crucial, deoarece PHP va folosi aceste nume pentru a accesa valorile. `required` asigură că utilizatorul trebuie să completeze câmpul.
  • `<select name=”operator”>`: Un meniu derulant pentru a alege operația. Fiecare `<option>` are o `value` care va fi trimisă către server.
  • `<button type=”submit” name=”submit”>`: Butonul care, odată apăsat, trimite formularul către server. Atributul `name=”submit”` ne va ajuta în PHP să detectăm când formularul a fost expediat.
  PC-ul tău se restartează singur? Soluții definitive pentru problema de Windows restart

Am adăugat și un stil CSS minimalist direct în secțiunea `` pentru a face interfața un pic mai plăcută vizual. ✨

Pasul 2: Logica PHP – Creierul calculatorului 🧠

Acum vine partea interesantă: adăugarea logicii care va prelua datele, le va procesa și va afișa rezultatul. Vom insera codul PHP la începutul fișierului `index.php`, înainte de declarația ``, sau în secțiunea `div.result` unde vom afișa rezultatul și erorile.

Pentru a menține lucrurile ordonate, vom plasa logica PHP chiar în interiorul elementului `

` pentru a afișa rezultatul direct acolo. Sau, și mai bine, la începutul fișierului și vom folosi variabile pentru a afișa ulterior.

Iată cum ar arăta codul PHP:

<?php
    $result = '';
    $error_message = '';

    // Verificăm dacă formularul a fost trimis
    if (isset($_POST['submit'])) {
        // Preluăm valorile din formular
        $num1_str = $_POST['num1'];
        $num2_str = $_POST['num2'];
        $operator = $_POST['operator'];

        // Validare: verificăm dacă input-urile sunt numerice și nu sunt goale
        if (!is_numeric($num1_str) || !is_numeric($num2_str)) {
            $error_message = '⚠️ Te rog, introdu doar numere valide!';
        } else {
            // Convertim string-urile în numere float pentru precizie
            $num1 = (float)$num1_str;
            $num2 = (float)$num2_str;

            // Executăm operația în funcție de operatorul selectat
            switch ($operator) {
                case 'add':
                    $result = $num1 + $num2;
                    break;
                case 'subtract':
                    $result = $num1 - $num2;
                    break;
                case 'multiply':
                    $result = $num1 * $num2;
                    break;
                case 'divide':
                    // Validare specială pentru împărțirea la zero
                    if ($num2 == 0) {
                        $error_message = '🛑 Nu se poate împărți la zero!';
                    } else {
                        $result = $num1 / $num2;
                    }
                    break;
                default:
                    $error_message = '❌ Operator invalid.';
                    break;
            }
        }
    }
?>
<!DOCTYPE html>
<html lang="ro">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calculator Simplu PHP</title>
    <style>
        body { font-family: Arial, sans-serif; background-color: #f4f4f4; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; }
        .calculator-container { background-color: #fff; padding: 25px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); width: 300px; text-align: center; }
        input[type="number"], select, button { width: calc(100% - 20px); padding: 10px; margin-bottom: 10px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
        button { background-color: #007bff; color: white; border: none; cursor: pointer; font-size: 16px; transition: background-color 0.3s ease; }
        button:hover { background-color: #0056b3; }
        .result { margin-top: 15px; font-size: 20px; font-weight: bold; color: #333; }
        .error { color: #dc3545; font-weight: bold; margin-bottom: 10px; }
    </style>
</head>
<body>
    <div class="calculator-container">
        <h2>Calculator PHP <span role="img" aria-label="calculator">🧮</span></h2>
        <form action="index.php" method="post">
            <input type="number" name="num1" placeholder="Primul număr" required value="<?php echo htmlspecialchars($_POST['num1'] ?? ''); ?>">
            <select name="operator">
                <option value="add" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'add') ? 'selected' : ''; ?>>+ Adunare</option>
                <option value="subtract" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'subtract') ? 'selected' : ''; ?>>- Scădere</option>
                <option value="multiply" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'multiply') ? 'selected' : ''; ?>>* Înmulțire</option>
                <option value="divide" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'divide') ? 'selected' : ''; ?>>/ Împărțire</option>
            </select>
            <input type="number" name="num2" placeholder="Al doilea număr" required value="<?php echo htmlspecialchars($_POST['num2'] ?? ''); ?>">
            <button type="submit" name="submit">Calculează</button>
        </form>
        <div class="result">
            <?php
                if (!empty($error_message)) {
                    echo '<p class="error">' . $error_message . '</p>';
                } elseif ($result !== '') {
                    echo '<p>Rezultat: <strong>' . htmlspecialchars($result) . '</strong></p>';
                }
            ?>
        </div>
    </div>
</body>
</html>

Descompunerea codului PHP:

  1. `<?php … ?>`: Aceste tag-uri delimitează blocul de cod PHP.
  2. `$result = ”; $error_message = ”;`: Inițializăm două variabile care vor stoca rezultatul sau, după caz, un mesaj de eroare. Este o bună practică să inițializăm variabilele înainte de a le utiliza.
  3. `if (isset($_POST[‘submit’]))`: Această condiție verifică dacă butonul de submit (cu `name=”submit”`) a fost apăsat. Dacă da, înseamnă că formularul a fost trimis, și putem începe procesarea datelor.
  4. `$_POST[‘num1’]`, `$_POST[‘num2’]`, `$_POST[‘operator’]`: Acestea sunt variabile superglobale în PHP, folosite pentru a accesa datele trimise prin metoda `POST`. Numele din paranteze drepte (`’num1’`, etc.) corespund atributelor `name` din elementele formularului HTML.
  5. `if (!is_numeric($num1_str) || !is_numeric($num2_str))`: Aici facem o validare esențială a datelor. Funcția `is_numeric()` verifică dacă o variabilă este un număr sau un șir numeric. Este vital să verifici input-urile utilizatorului pentru a preveni erorile sau chiar atacurile de securitate. Dacă utilizatorul introduce litere în loc de numere, afișăm un mesaj de eroare.
  6. `(float)$num1_str;`: Deoarece datele din formular sunt întotdeauna primite ca șiruri de caractere (string-uri), le convertim explicit la tipul numeric `float` pentru a ne asigura că operațiile matematice se desfășoară corect, inclusiv cu numere zecimale.
  7. `switch ($operator)`: Această structură de control este perfectă pentru a alege ce operație să executăm în funcție de valoarea variabilei `$operator`.
    • `case ‘add’:`: Dacă `$operator` este `’add’`, se execută blocul de cod corespunzător adunării.
    • `break;`: Ieșim din structura `switch` după executarea unui `case`.
    • Atenție la împărțirea la zero! `if ($num2 == 0)`: Acesta este un caz de eroare clasic în matematică și programare. Trebuie să tratăm special situația în care al doilea număr este zero pentru a evita o eroare fatală în aplicație.
  8. `htmlspecialchars()`: Această funcție este folosită pentru a preveni atacurile de tip XSS (Cross-Site Scripting). Ea convertește caracterele speciale din HTML (&, „, ‘, <, >) în entități HTML, asigurându-se că orice text introdus de utilizator este afișat ca text simplu și nu este interpretat ca cod HTML sau JavaScript. Este o practică de securitate fundamentală.
  9. `value=”„`: Această bucată de cod în interiorul input-urilor HTML este o îmbunătățire a experienței utilizatorului. Ea asigură că, după trimiterea formularului, valorile introduse anterior rămân afișate în câmpuri. Operatorul `??` (null coalescing operator) este o scurtătură în PHP 7+ care verifică dacă `$_POST[‘num1’]` există și nu este null; dacă nu, folosește un șir gol.
  10. Condițiile pentru `selected` la elementul `

Recomandate

Adio, EOL: De ce nu mai ai nevoie de Flash Player și care sunt alternativele moderne la altceva similar
  • Roman

Adio, EOL: De ce nu mai ai nevoie de Flash Player și care sunt alternativele moderne la altceva similar

2025.10.03.
Cum să transformi PC-ul tău într-un webhost pe Windows 7: Ghid pas cu pas
  • Roman

Cum să transformi PC-ul tău într-un webhost pe Windows 7: Ghid pas cu pas

2025.10.03.
Oglindirea unui site web: Secretele comenzii wget și opțiunile pentru o clonă perfectă
  • Roman

Oglindirea unui site web: Secretele comenzii wget și opțiunile pentru o clonă perfectă

2025.10.03.
Serverul tău local, gata în 5 minute: Cum instalezi și configurezi Ubuntu & XAMPP pas cu pas
  • Roman

Serverul tău local, gata în 5 minute: Cum instalezi și configurezi Ubuntu & XAMPP pas cu pas

2025.10.03.
Svn, Mercurial, Git: Care este cea mai bună soluție de versionare gratis pentru proiectul tău?
  • Roman

Svn, Mercurial, Git: Care este cea mai bună soluție de versionare gratis pentru proiectul tău?

2025.10.03.
De ce comanda „at” nu se execută dintr-un script PHP? Analiză și rezolvare
  • Roman

De ce comanda „at” nu se execută dintr-un script PHP? Analiză și rezolvare

2025.10.03.

Olvastad már?

De ce am un subwoofer fără bass? Cauze comune și soluții rapide
  • Roman

De ce am un subwoofer fără bass? Cauze comune și soluții rapide

2025.10.03.
Ah, frustrarea! Ai investit într-un subwoofer nou sau ai un sistem audio excelent, dar când vine vorba...
Bővebben Read more about De ce am un subwoofer fără bass? Cauze comune și soluții rapide
Lumină spectaculoasă: Tot ce trebuie să știi despre o alimentare de Neon corectă și sigură
  • Roman

Lumină spectaculoasă: Tot ce trebuie să știi despre o alimentare de Neon corectă și sigură

2025.10.03.
Upgrade audio neconvențional: Ghid practic despre cum să pui alte boxe în căruță
  • Roman

Upgrade audio neconvențional: Ghid practic despre cum să pui alte boxe în căruță

2025.10.03.
Ecran negru la laptop? Ghid de depanare pentru un conector de display la Ideapad Y700
  • Roman

Ecran negru la laptop? Ghid de depanare pentru un conector de display la Ideapad Y700

2025.10.03.
Alegerea perfectă pentru casa ta: Cum selectezi un releu pentru comandă becuri cu 1, 2 sau 3 canale?
  • Roman

Alegerea perfectă pentru casa ta: Cum selectezi un releu pentru comandă becuri cu 1, 2 sau 3 canale?

2025.10.03.

Nu rata asta

De ce am un subwoofer fără bass? Cauze comune și soluții rapide
  • Roman

De ce am un subwoofer fără bass? Cauze comune și soluții rapide

2025.10.03.
Lumină spectaculoasă: Tot ce trebuie să știi despre o alimentare de Neon corectă și sigură
  • Roman

Lumină spectaculoasă: Tot ce trebuie să știi despre o alimentare de Neon corectă și sigură

2025.10.03.
Upgrade audio neconvențional: Ghid practic despre cum să pui alte boxe în căruță
  • Roman

Upgrade audio neconvențional: Ghid practic despre cum să pui alte boxe în căruță

2025.10.03.
Ecran negru la laptop? Ghid de depanare pentru un conector de display la Ideapad Y700
  • Roman

Ecran negru la laptop? Ghid de depanare pentru un conector de display la Ideapad Y700

2025.10.03.
Copyright © 2025 SilverPC Blog | SilverPC kérdések

Az oldalon megjelenő minden cikk, kép és egyéb tartalom a SilverPC.hu tulajdonát képezi, felhasználásuk kizárólag az eredeti forrás pontos és jól látható feltüntetésével engedélyezett.