Fundamentos
- Delimitadores:
<?php ... ?> - Variables con
$(tipado dinámico):$nombre,$edad - Salida:
echo/print(concatenación con.) - Superglobales:
$_GET,$_POST,$_SERVER,$_SESSION,$_COOKIE,$_FILES
PHP clásico, claro y sin rodeos: lo que hay que saber para web del lado del servidor.
PHP es un lenguaje de script del lado del servidor. Corre en el servidor, genera HTML y lo envía al navegador.
<?php ... ?>$ (tipado dinámico): $nombre, $edad
echo / print (concatenación con .)$_GET, $_POST, $_SERVER,
$_SESSION, $_COOKIE, $_FILES
.php en un servidor (XAMPP, Laragon, hosting).session_start() antes de usar $_SESSION.session_unset() + session_destroy().htmlspecialchars($v, ENT_QUOTES, 'UTF-8').move_uploaded_file.Tip Primero funciona, luego mejoras. Pero jamás sin prepared statements.
<!DOCTYPE html>
<html lang="es">
<head><meta charset="UTF-8"><title>Hola PHP</title></head>
<body>
<?php
$nombre = "Freddy";
$edad = 46;
echo "Hola, " . htmlspecialchars($nombre) . ". Tienes " . $edad . " años.";
?>
</body>
</html>
<?php
$nums = [10, 20, 30];
$prom = array_sum($nums)/count($nums);
if($prom >= 20){
echo "Promedio: $prom (ok)";
}else{
echo "Promedio: $prom (bajo)";
}
foreach($nums as $n){ echo "<br>Número: $n"; }
?>
<form action="procesa.php" method="post">
<input name="nombre" placeholder="Nombre">
<button type="submit">Enviar</button>
</form>
<?php
session_start();
$nombre = $_POST["nombre"] ?? "";
$nombre = htmlspecialchars(trim($nombre), ENT_QUOTES, "UTF-8");
$_SESSION["usuario"] = $nombre;
header("Location: bienvenida.php");
exit;
<?php
session_start();
$u = $_SESSION["usuario"] ?? "invitado";
?>
<h2>Hola, <?= htmlspecialchars($u, ENT_QUOTES, "UTF-8") ?></h2>
<?php
$dsn = "mysql:host=localhost;dbname=tienda;charset=utf8mb4";
$user = "root"; $pass = "";
$options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ];
$pdo = new PDO($dsn, $user, $pass, $options);
$sql = "SELECT id, nombre, precio FROM productos WHERE precio > :min ORDER BY nombre";
$st = $pdo->prepare($sql);
$st->execute([":min" => 10000]);
$rows = $st->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $r){
echo $r["id"]." - ".htmlspecialchars($r["nombre"])." $".$r["precio"]."<br>";
}
<?php
$cn = mysqli_connect("localhost","root","","tienda",3306);
if(!$cn){ die("Error: ".mysqli_connect_error()); }
mysqli_set_charset($cn,"utf8mb4");
$min = 10000;
$st = mysqli_prepare($cn, "SELECT id,nombre,precio FROM productos WHERE precio > ? ORDER BY nombre");
mysqli_stmt_bind_param($st, "i", $min);
mysqli_stmt_execute($st);
$res = mysqli_stmt_get_result($st);
while($r = mysqli_fetch_assoc($res)){
echo $r["id"]." - ".htmlspecialchars($r["nombre"])." $".$r["precio"]."<br>";
}
mysqli_close($cn);
Tip Para practicar: XAMPP/Laragon; en producción: errores off, usuarios mínimos y SSL.
Como usar PHP para conectar con una BD y hacer un CRUD.
Pulsa “Nuevo cuestionario” para generar 5 preguntas del banco de 25. Responde y “Calificar”.