📝 Formas un POST/GET
HTML formas ļauj lietotājiem ievadīt datus, kurus PHP var uzņemt un apstrādāt. Šī ir fundamentāla web programmēšanas prasme.
GET vs POST
| Īpašība | GET | POST |
|---|---|---|
| Datu atrašanās vieta | URL (?atslēga=vērtība) | Pieprasījuma ķermenis (neredzams URL) |
| Redzamība | Redzams URL | Nav redzams |
| Bukleta iespēja | ✅ Var saglabāt kā grāmatzīmi | ❌ Nevar |
| Datu apjoms | ~2000 rakstzīmes | Neierobežots (praktiski) |
| Drošība | Mazāk droša (sensitīviem datiem) | Drošāka (paroles, personas dati) |
| Kešošana | ✅ Tiek kešots | ❌ Netiek kešots |
| Izmantošana | Meklēšana, filtrēšana, navigācija | Formas, pieteikšanās, datu augšupielāde |
Teksts
<?php
// GET datu uztvēršana (no URL: ?vārds=Anna&vecums=25)
$vārds = $_GET["vārds"] ?? "Anonīms";
$vecums = (int) ($_GET["vecums"] ?? 0);
echo "Vārds: $vārds, Vecums: $vecums<br>";
// POST datu uztvēršana (no formas)
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$vārds = trim($_POST["vārds"] ?? "");
$parole = $_POST["parole"] ?? "";
echo "Saņemts vārds: " . htmlspecialchars($vārds);
}
// $_REQUEST - apvieno GET, POST un COOKIE
$meklēšana = $_REQUEST["q"] ?? "";
?>
HTML forma + PHP apstrāde
Teksts
<?php
// Pilns piemērs: forma un apstrāde vienā failā
// Saglabā kā: kontaktforma.php
$kļūdas = [];
$veiksmīgi = false;
$vārds = $epasts = $ziņa = "";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// Uztvērt un "iztīrīt" datus
$vārds = trim($_POST["vārds"] ?? "");
$epasts = trim($_POST["epasts"] ?? "");
$ziņa = trim($_POST["ziņa"] ?? "");
// Validācija
if (empty($vārds)) {
$kļūdas[] = "Vārds ir obligāts lauks.";
} elseif (strlen($vārds) < 2) {
$kļūdas[] = "Vārds ir pārāk īss.";
}
if (empty($epasts)) {
$kļūdas[] = "E-pasts ir obligāts lauks.";
} elseif (!filter_var($epasts, FILTER_VALIDATE_EMAIL)) {
$kļūdas[] = "Nepareizs e-pasta formāts.";
}
if (strlen($ziņa) < 10) {
$kļūdas[] = "Ziņa jābūt vismaz 10 rakstzīmes gara.";
}
if (empty($kļūdas)) {
// Viss kārtībā - apstrādā (saglabā DB, sūti epast utt.)
$veiksmīgi = true;
// Notīrīt pēc veiksmīgas apstrādes
$vārds = $epasts = $ziņa = "";
}
}
?>
<!DOCTYPE html>
<html lang="lv">
<body>
<?php if ($veiksmīgi): ?>
<div style="color:green; padding:10px; background:#e8f5e9; border-radius:5px;">
✅ Paldies! Ziņa veiksmīgi nosūtīta.
</div>
<?php endif; ?>
<?php if (!empty($kļūdas)): ?>
<div style="color:red; padding:10px; background:#ffebee; border-radius:5px;">
<strong>Kļūdas:</strong>
<ul>
<?php foreach ($kļūdas as $kļūda): ?>
<li><?= htmlspecialchars($kļūda) ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form method="POST" action="">
<label>Vārds:
<input type="text" name="vārds" value="<?= htmlspecialchars($vārds) ?>" required>
</label><br>
<label>E-pasts:
<input type="email" name="epasts" value="<?= htmlspecialchars($epasts) ?>">
</label><br>
<label>Ziņa:
<textarea name="ziņa"><?= htmlspecialchars($ziņa) ?></textarea>
</label><br>
<button type="submit">Nosūtīt</button>
</form>
</body>
</html>
Dzīva forma demonstrācija
Aizpildiet formu zemāk, lai redzētu PHP formu apstrādi darbībā:
Vārds * E-pasts * Ziņa * Nosūtīt ziņuDrošība – XSS un SQL Injection novēršana
❌
3 galvenās drošības kļūdas
- XSS: Vienmēr izmantojiet htmlspecialchars() pirms datu izvadīšanas HTML
- SQL Injection: Vienmēr izmantojiet PDO sagatavotus paziņojumus
- CSRF: Pievienojiet CSRF token visām formām, kas maina datus
🎓 Ko mācīties tālāk?
Nākamajā sadaļā iepazīstieties ar objektorientētu programmēšanu (OOP) PHP – klases, objekti, mantošana.
Teksts
<?php
// ========================================
// XSS (Cross-Site Scripting) novēršana
// ========================================
// BĪSTAMI - tieši izvadīt lietotāja ievadi:
// echo $_POST["vards"]; // NEKAD tā nedarīt!
// DROŠI - htmlspecialchars() pārvērš HTML speciālās rakstzīmes
$ievade = $_POST["vards"] ?? "";
echo htmlspecialchars($ievade, ENT_QUOTES, "UTF-8");
// DROŠI - filter_input() ar sanitization
$vārds = filter_input(INPUT_POST, "vards", FILTER_SANITIZE_SPECIAL_CHARS);
$vecums = filter_input(INPUT_POST, "vecums", FILTER_VALIDATE_INT);
$epasts = filter_input(INPUT_POST, "epasts", FILTER_VALIDATE_EMAIL);
// ========================================
// SQL Injection novēršana (Prepared Statements)
// ========================================
// BĪSTAMI:
// $id = $_GET["id"];
// $sql = "SELECT * FROM users WHERE id = $id";
// (lietotājs var ievadīt: 1 OR 1=1 un dabūt visus ierakstus!)
// DROŠI - izmantot PDO un sagatavotus paziņojumus:
// $pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
// $stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
// $stmt->execute(["id" => $id]);
// $lietotājs = $stmt->fetch();
// ========================================
// CSRF (Cross-Site Request Forgery) aizsardzība
// ========================================
// Ģenerēt tokenu sesijā
session_start();
if (empty($_SESSION["csrf_token"])) {
$_SESSION["csrf_token"] = bin2hex(random_bytes(32));
}
$csrf = $_SESSION["csrf_token"];
// Forma: <input type="hidden" name="csrf" value="<?= $csrf ?>">
// Validācija:
if ($_SERVER["REQUEST_METHOD"] === "POST") {
if (!hash_equals($_SESSION["csrf_token"], $_POST["csrf"] ?? "")) {
die("CSRF validācija neizdevās!");
}
// Turpina apstrādi...
}
?>