Hola a todos, hoy os dejo una serie de ejercicios de PHP para practicar todo aquello que hemos explicado en anteriores posts.
Todos los ejercicios que proponemos están resueltos en este mismo post, intenta hacerlo por ti mismo y si te quedas atascado puedes mirar la solución. Recuerda, que no tiene por que estar igual tu solución con la del post, el objetivo es que aprendas no que me copies la solución.
Si tienes alguna duda, recuerda que puedes consultarnos escribiendo un comentario en este post o enviándonos un e-mail a administrador@discoduroderoer.es
1. Crea una clase Persona con los siguientes atributos: nombre, apellidos y edad.
Crea su constructor y get y set.
Crear las siguientes funciones:
– mayorEdad: indica si es o no mayor de edad.
– nombreCompleto: devuelve el nombre mas apellidos
Spoiler Inside |
SelectShow> |
<?php
class Persona {
private $nombre;
private $apellidos;
private $edad;
function __construct($nombre, $apellidos, $edad)
{
$this->nombre = $nombre;
$this->apellidos = $apellidos;
$this->edad = $edad;
}
function __get($propiedad)
{
if(property_exists($this, $propiedad)){
return $this->$propiedad;
}
}
function __set($propiedad, $valor){
if(property_exists($this, $propiedad)){
$this->$propiedad = $valor;
}
}
function mayorEdad(){
return $this->edad >= 18;
}
function nombreCompleto(){
return $this->nombre . " " . $this->apellidos;
}
}
$persona = new Persona("Fernando", "Ureña Gomez", 29);
if($persona->mayorEdad()){
echo $persona->nombreCompleto(). " es mayor de edad";
}else{
echo $persona->nombreCompleto(). " no es mayor de edad";
}
echo $persona->nombr2;
?>
|
2. Crea una clase llamada session para manejar sesiones.
Las funciones que se crearan son:
– setAttribute: Dado un atributo y un valor, lo seteara en la sesión.
– getAttribute: Dado un atributo, devolvemos el valor de la sesión.
– deleteAttribute: Dado un atributo, lo borraremos de la sesión.
– destroySession: destruye la sessión.
Spoiler Inside |
SelectShow> |
— Session.php
<?php
class Session
{
function __construct()
{
if (!isset($_SESSION)) {
session_start();
}
}
function setAttribute($attribute, $value)
{
if (
session_status() === PHP_SESSION_ACTIVE
&& is_string($attribute)
) {
$_SESSION[$attribute] = $value;
}
}
function getAttribute($attribute)
{
if (
session_status() === PHP_SESSION_ACTIVE
&& is_string($attribute)
&& isset($_SESSION[$attribute])
) {
return $_SESSION[$attribute];
}
return null;
}
function deleteAttribute($attribute)
{
if (
session_status() === PHP_SESSION_ACTIVE
&& is_string($attribute)
&& isset($_SESSION[$attribute])
) {
unset($_SESSION[$attribute]);
}
}
function destroySession()
{
session_destroy();
}
}
— index.php
<?php
require_once "Session.php";
$session = new Session();
$session->setAttribute("nombre", "Fernando");
echo "Valor de la propiedad nombre: " .$session->getAttribute("nombre") . "<br/>";
$session->deleteAttribute("nombre");
echo "Valor de la propiedad nombre: " . $session->getAttribute("nombre") . "<br/>";
$session->destroySession();
?>
|
3. Crea una clase para conectar MySQL y PHP.
Los parametros de conexion estaran dentro de la propia clase.
Con los siguientes métodos:
– executeQuery: Dado un sql, nos devuelve datos de la consulta.
– numRows: Dado un sql, devuelve el numero de filas de la consulta.
– getDataSingle: Dado un sql, nos devuelve la primera fila.
– executeInstruction: Dado un sql, devuelve el numero de filas afectadas.
– getLastId: Devuelve el ultimo id insertado.
– close: Cierra la conexion.
Spoiler Inside |
SelectShow> |
<?php
class MysqliDb {
private $host = "localhost";
private $user = "root";
private $pass = "";
private $dbname = "pokemondb";
private $connection;
function __construct()
{
$this->connection = mysqli_connect(
$this->host,
$this->user,
$this->pass,
$this->dbname
);
$this->connection->set_charset("utf8");
}
function executeQuery($sql){
$data = array();
$result = mysqli_query($this->connection, $sql);
if(mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
array_push($data, $row);
}
}
return $data;
}
function numRows($sql){
$result = mysqli_query($this->connection, $sql);
return mysqli_num_rows($result);
}
function getDataSingle($sql){
$result = mysqli_query($this->connection, $sql);
if(mysqli_num_rows($result) > 0){
return mysqli_fetch_assoc($result);
}
return null;
}
function executeInstruction($sql){
return mysqli_query($this->connection, $sql);
}
function getLastId(){
return mysqli_insert_id($this->connection);
}
function close(){
mysqli_close($this->connection);
}
}
$db = new MysqliDb();
$data = $db->executeQuery("SELECT * FROM pokemon");
print_r($data);
$db->close();
?>
Ejercicios propuestos y resueltos consultas SQL (BD Pokemon)
|
4. Modificar la clase MysqliDb para que lance una excepcion cuando haya un error.
Spoiler Inside |
SelectShow> |
<?php
class MysqliDb
{
private $host = "localhost";
private $user = "root";
private $pass = "";
private $dbname = "pokemondb";
private $connection;
function __construct()
{
$this->connection = mysqli_connect(
$this->host,
$this->user,
$this->pass,
$this->dbname
);
$this->connection->set_charset("utf8");
}
function executeQuery($sql)
{
$data = array();
$result = mysqli_query($this->connection, $sql);
$error = mysqli_error($this->connection);
if (empty($error)) {
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
array_push($data, $row);
}
}
} else {
throw new Exception($error);
}
return $data;
}
function numRows($sql)
{
$result = mysqli_query($this->connection, $sql);
$error = mysqli_error($this->connection);
if (empty($error)) {
return mysqli_num_rows($result);
} else {
throw new Exception($error);
}
}
function getDataSingle($sql)
{
$result = mysqli_query($this->connection, $sql);
$error = mysqli_error($this->connection);
if (empty($error)) {
if (mysqli_num_rows($result) > 0) {
return mysqli_fetch_assoc($result);
}
return null;
} else {
throw new Exception($error);
}
}
function executeInstruction($sql)
{
$success = mysqli_query($this->connection, $sql);
$error = mysqli_error($this->connection);
if (empty($error)) {
return $success;
} else {
throw new Exception($error);
}
}
function getLastId()
{
return mysqli_insert_id($this->connection);
}
function close()
{
mysqli_close($this->connection);
}
}
$db = new MysqliDb();
try {
$data = $db->executeQuery("SELECT * FROM pokemn");
print_r($data);
} catch (Exception $e) {
echo "Error: " . $e;
}
$db->close();
|
5. Crea la clase PDODB, con los siguientes métodos:
– executeQuery($sql): devuelve los datos de la consulta
– numRows($sql): devuelve el numero de filas
– getDataSingle($sql): devuelve un dato concreto
– executeInstruction($sql): inserta, actualiza o elimina registros
– close(): Cierra la base de datos
– getLastId(): Devuelve el ultimo id insertado
Spoiler Inside |
SelectShow> |
<?php
class PDODB
{
private $host = "localhost";
private $user = "root";
private $pass = "";
private $db_name = "pokemondb";
private $connection;
function __construct()
{
$opciones = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::MYSQL_ATTR_FOUND_ROWS => true
);
$this->connection = new PDO(
'mysql:host=' . $this->host . ';dbname=' . $this->db_name,
$this->user,
$this->pass,
$opciones
);
}
function executeQuery($sql)
{
$data = array();
$result = $this->connection->query($sql);
$error = $this->connection->errorInfo();
if ($error[0] === "00000") {
$result->execute();
if ($result->rowCount() > 0) {
while ($row = $result->fetch(PDO::FETCH_OBJ)) {
array_push($data, $row);
}
}
return $data;
} else {
throw new Exception($error[2]);
}
}
function numRows($sql)
{
$result = $this->connection->query($sql);
$error = $this->connection->errorInfo();
if ($error[0] === "00000") {
$result->execute();
return $result->rowCount();
} else {
throw new Exception($error[2]);
}
}
function getDataSingle($sql)
{
$result = $this->connection->query($sql);
$error = $this->connection->errorInfo();
if ($error[0] === "00000") {
$result->execute();
if ($result->rowCount() > 0) {
return $result->fetch(PDO::FETCH_OBJ);
}
return null;
} else {
throw new Exception($error[2]);
}
}
function executeInstruction($sql)
{
$result = $this->connection->query($sql);
$error = $this->connection->errorInfo();
if ($error[0] === "00000") {
$result->execute();
return $result->rowCount() > 0;
} else {
throw new Exception($error[2]);
}
}
function close()
{
$this->connection = null;
}
function getLastId()
{
$this->connection->lastInsertId();
}
}
$db = new PDODB();
$data = $db->executeQuery("SELECT * FROM pokemon");
print_r($data);
$db->close();
|
6. Crea la clase Log. Tendrá los siguiente métodos:
– writeLine($type, $message): Escribe una linea en el fichero.
– close(): Cierra el fichero.
Spoiler Inside |
SelectShow> |
<?php
class Log {
private $fileLog;
function __construct($path)
{
$this->fileLog = fopen($path, "a");
}
function writeLine($type, $message){
$date = new DateTime();
fputs($this->fileLog, "[".$type."][".$date->format("d-m-Y H:i:s")."]: ". $message . "\n");
}
function close(){
fclose($this->fileLog);
}
}
$log = new Log("log.txt");
$log->writeLine("E", "Ha habido un error inesperado");
$log->writeLine("I", "Todo correcto");
$log->writeLine("W", "Ha habido un warning");
$log->close();
?>
|
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Hola tengo una duda sobre una actividad.
Se trata de visualizar un rombo con asteriscos (*) en una matriz de 7 filas x 7 columnas.
Visualizar la matriz por pantalla en formato de tabla html.
Nota:” Solo se rellena el exterior del rombo. Y para el relleno de la matriz hay que usar bucles,
no asignar directamente los caracteres a una posición del array ‘a mano’ ”.