https://www.elperiodico.com/es/barcelona/20180416/se-busca-informatico-6747937
Mes: abril 2018
Cesta de la compra con clases
cesta.php:
<?php class cesta { private $cesta = []; function anyadir($producto,$precio){ $this->cesta[]=['producto'=>$producto,'precio'=>$precio]; } function verCesta() { ?> <table border="1"> <tr><td>Producto</td><td>Precio</td></tr> <?php foreach ($this->cesta as $elemento) { ?> <tr><td><?= $elemento['producto'] ?></td><td><?= $elemento['precio'] ?></td> </tr> <?php } ?> </table> <?php } }
index.php
<?php include_once "cesta.php"; session_start(); if (!isset($_SESSION['cesta'])) { $_SESSION['cesta'] = new cesta(); } $producto = filter_input(INPUT_GET, 'producto'); $precio = filter_input(INPUT_GET, 'precio', FILTER_VALIDATE_INT); if (!empty($producto) && !empty($precio)) { $_SESSION['cesta']->anyadir($producto, $precio); } $_SESSION['cesta']->verCesta(); ?> <form> <p>Producto:<input type="text" name="producto"></p> <p>Precio:<input type="text" name="precio"></p> <input type="submit"> </form>
Operador resolución de ámbito (::)
<?php class ClaseSencilla { // Declaración de una propiedad public $var = 'un valor predeterminado'; static $nombre = "Clase"; // Declaración de un método public function mostrarVar() { echo $this->var; } public function __construct($var = "Instancia por defecto") { $this->var = $var; } public function __destruct() { //Si hay algo que destruir } static function hola() { echo "Hola que tal"; } } ClaseSencilla::hola(); echo ClaseSencilla::$nombre; class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Sobrescritura de definición parent public function myFunc() { // Pero todavía se puede llamar a la función parent parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?>
Ejemplos clases
<?php class ClaseSencilla { // Declaración de una propiedad public $var = 'un valor predeterminado'; // Declaración de un método public function mostrarVar() { echo $this->var; } public function __construct($var = "Instancia por defecto") { $this->var = $var; } public function __destruct() { //Si hay algo que destruir } } $instancia = new ClaseSencilla("Instancia 1"); $instancia->mostrarVar(); $otraInstancia = new ClaseSencilla("Instancia 2"); $otraInstancia->mostrarVar(); $otraMas = new ClaseSencilla(); $otraMas->mostrarVar(); //Visibilidad /** * Definición de MyClass */ class MyClass { public $variablePublica = 'Public'; protected $variableProtegida = 'Protected'; private $variablePrivada = 'Private'; function printHello() { echo $this->variablePublica; echo $this->variableProtegida; echo $this->variablePrivada; } } $obj = new MyClass(); echo $obj->variablePublica; // Funciona bien //echo $obj->variableProtegida; // Error Fatal //echo $obj->variablePrivada; // Error Fatal $obj->printHello(); // Muestra Public, Protected y Private /** * Definición de MyClass2 */ class MyClass2 extends MyClass { // Se pueden redeclarar las propiedades pública y protegida, pero no la privada public $public = 'Public2'; //protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; // echo $this->private; // Undefined } } $obj2 = new MyClass2(); echo $obj2->public; // Funciona bien //echo $obj2->protected; // Error Fatal //echo $obj2->private; // Undefined $obj2->printHello(); // Muestra Public2, Protected2, Undefined ?>
Cesta de la compra sesiones
funciones.php
function verCesta($cesta) { ?> <table border="1"> <tr><td>Producto</td><td>Precio</td></tr> <?php foreach ($cesta as $elemento) { ?> <tr><td><?= $elemento['producto'] ?></td><td><?= $elemento['precio'] ?></td> </tr> <?php } ?> </table> <?php }
index.php
<?php include_once "funciones.php"; session_start(); $producto = filter_input(INPUT_GET, 'producto'); $precio = filter_input(INPUT_GET, 'precio'); if (!empty($producto) && !empty($precio)) { $_SESSION['cesta'][] = ['producto' => $producto, 'precio' => $precio]; } if (isset($_SESSION['cesta'])) { verCesta($_SESSION['cesta']); } ?> <form> <p>Producto:<input type="text" name="producto"></p> <p>Precio:<input type="text" name="precio"></p> <input type="submit"> </form>
Ejemplo login
<?php session_start(); //Si hay un usuario no hago nada. Si no hay usuario le pongo un enlace al login if (empty($_SESSION['user'])) { ?> <h2>No estás autorizado. Por favor haz login</h2> <a href="index.php">Página de login</a> <?php } else{ echo "Yupiiii!"; } ?>
<?php session_start(); //Si me han mandado un usuario y un pass y son 'JUAN' y '1234' //El login es correcto, creo una variable de sesión usuario y le pongo 'JUAN' $user = filter_input(INPUT_GET, 'user'); $password = filter_input(INPUT_GET, 'password'); if ($user == 'JUAN' && $password == '1234') { $_SESSION['user'] = $user; } ?> <form> <p>Usuario:<input type="text" name="user"></p> <p>Password:<input type="password" name="password"></p> <input type="submit"> </form>
PHP DateTime y DateInterval
Vamos a ver algunas propiedades del objeto DateTime para manejar fechas y horas y del objeto DateInterval que se usa para algunas propiedades.
El objeto DateTime se instancia con la palabra clave new. Por defecto tendrá la fecha actual, pero podemos pasarle una cadena que nos indicará la fecha que queramos. Esta es similar a las que pasamos en strtotime y permite palabras como ‘tomorrow’, o ‘next month’:
$currentDateTime = new DateTime(); $yesterday = new DateTime('yesterday'); $twoDaysLater = new DateTime('+ 2 days'); $oneWeekEarly = new DateTime('- 1 week'); $dateTime = new DateTime('2015-01-01 12:30:12');
Otros ejemplos:
$valid_time_formats = ['now', 'jan 1 2016', '12 hours ago', 'next year', 'first day of next month', 'last day of this month', '12/25/2015', '@612835200'];
Una vez tenemos un objeto DateTime podemos formatearlo como se hacía con date():
$now = new DateTime(); $ymdNow = $now->format('Y-m-d'); print_r($now->format('jS F Y')); print_r($now->format('ga jS M Y')); print_r($now->format('Y/m/d s:i:H'));
Podemos comparar dos fechas:
$today = new DateTime('today'); $yesterday = new DateTime('yesterday'); var_dump($today > $yesterday); var_dump($today < $yesterday); var_dump($today == $yesterday); // Output bool(true) bool(false) bool(false)
Podemos modificar una fecha con la propiedad modify, que permite añadir o quitar elementos igual que en strtotime:
$today = new DateTime('today'); $today->modify('-2 days');
Ejemplos de modificadores:
$modifiers = ['now', '+10 seconds', '+10 minutes', '+1 day', 'last second tomorrow', 'last day of this month', '12/31', '+3 months', '+1 year'];
Las fechas se pueden restar. Esto nos devuelve un objeto de tipo DateInterval, que veremos más adelante:
$today = new DateTime('today'); $yesterday = new DateTime('yesterday'); $interval = $today->diff($yesterday); echo $interval->format('%d day ago')
El formato de interval es parecido al de date, pero con el %.
También podemos añadir o restar intervalos a las fechas:
$today = new DateTime('today'); $today->add(new DateInterval('P2D')); $today->sub(new DateInterval('P2D'));
El objeto DateInterval merece apartado propio. Se crea con una duración de un periodo determinado:
PYMDTHMS P: period Y: years M: months D: days T: time H: hours M: minutes S: seconds
Ejemplos:
P1Y 1 año P1M 1 mes P1D 1 día P30D 30 días PT1H 1 hora PT5M 5 minutos PT35S 35 segundos P1Y6M29DT4H34M23S 1 año, 6 meses, 29 días, 4 horas, 34 minutos, 23 segundos $Duration = new DateInterval( "P1Y2M3DT4H5M6S" ); print_r( $Duration ); Resultado: DateInterval Object ( [y] => 1 [m] => 2 [d] => 3 [h] => 4 [i] => 5 [s] => 6 ... ) $Duration = new DateInterval('P345D'); echo $Duration->format('P%yY%mM%dDT%hH%iM%sS'); // P0Y0M345DT0H0M0S
Algunos enlaces de utilidad:
https://www.startutorial.com/articles/view/master-php-datetime
http://www.bonify.io/blog/2014/09/its-about-time-we-talk-about-phps-datetime
http://php.net/manual/es/class.datetime.php
https://www.webpagefx.com/blog/web-design/php-dateinterval-class/
Por qué está volviendo el SQL
Ejemplos cookie e include
Archivo muestracookie:
<?php //Comprueba si hay una cookie llamada nombre y muestra el valor $nombre = filter_input(INPUT_COOKIE, "nombre"); if (!empty($nombre)) { ?> <h4>Usuario: <?= $nombre ?></h4> <?php } ?>
Index.php:
<?php //Comprueba que me hayan pasado un nombre, y si es así lo guarda en la cookie $nombre = filter_input(INPUT_GET, "nombre"); if (!empty($nombre)) { setcookie("nombre", $nombre, time() + 86400); } include "muestracookie.php"; ?> <form> Pon tu nombre: <input type="text" name="nombre"> <input type="submit"> </form>
Uso en otras páginas:
<?php include "muestracookie.php"; ?>
Otro ejemplo filter_input
<?php $nombre = filter_input(INPUT_POST, "nombre"); $password = filter_input(INPUT_POST, "password"); $error = []; if (empty($nombre)) { $error[] = "Falta nombre"; } if (empty($password)) { $error[] = "Falta password"; } if ($nombre != "Juan" || $password != "1234") { $error[] = "Nombre / contraseña incorrecto"; } if (!empty($error)) { ?> <p>Se han encontrado los siguientes errores</p> <p><?= implode(". ", $error) ?></p> <a href="index.php">Volver</a> <?php } else { echo "Adelante"; } ?>