viernes, 9 de enero de 2015

Crear un blog en PHP - 2 de 2



Vuelva a repetir el ejercicio A, pero ahora utilice objetos.

Cree una clase Blog cuyos atributos coincidan con los campos de la tabla Contenido. Cree una clase Manager que tenga la conexión PDO como atributo, así como unos métodosph que permitan leer y escribir en la tabla Contenido. Las páginas mostrar_blog.php, insertar_contenido.php y añadir_contenido.php no deben contener consultas SQL.

Solución

Cree la base de datos Blog
  • El script SQL que crea la tabla Contenido es:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Base de datos : `Blog`
--
-- --------------------------------------------------------
--
-- Estructura de la tabla `contenido`
--
DROP TABLE IF EXISTS `contenido`;
CREATE TABLE IF NOT EXISTS `contenido` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Titulo` varchar(25) NOT NULL,
`Fecha` Datetime NOT NULL,
`Comentario` text NOT NULL,
`Imagen` varchar(25) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
  • La página formulario_añadir.php es:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Blog</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>
<body>
<h2>Formulario para añadir el contenido al Blog</h2>
<form action="añadir_contenido.php" method="POST"
enctype="multipart/form-data">
<p>Título: <input type="text" name=”titulo” /></p>
<p>Comentario: <br /><textarea name="comentario" rows="10"
cols="50"></textarea></p>
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
<p>Seleccione una foto que tenga un tamaño inferior a 2 MB.
</p>
<input type="file" name="foto">
<br /><br />
<input type="submit" name="ok" value="Enviar">
</form>
<br />
<a href="mostrar_blog.php" >Página de visualización del blog
</a>
</body>
</html>
  • La página insertar_contenido.php es:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Blog</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>
<body>
<?php
include(’Blog.class.php’);
include(’Manager.class.php’);
try
{
// Conexión a la base de datos
$base = new PDO(’mysql:host=127.0.0.1;dbname=Blog’, ’root’, ’’);
$base->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
if ($_FILES[’imagen’][’error’]) {
switch ($_FILES[’imagen’][’error’]){
case 1: // UPLOAD_ERR_INI_SIZE
echo "El tamaño del archivo supera el límite permitido por
el servidor (parámetro upload_max_filesize del archivo
php.ini).";
break;
case 2: // UPLOAD_ERR_FORM_SIZE
echo "El tamaño del archivo supera el límite permitido por
el formulario (parámetro post_max_size del archivo php.ini).";
break;
case 3: // UPLOAD_ERR_PARTIAL
echo "El envío del formulario se ha interrumpido durante
su transmisión.";
break;
case 4: // UPLOAD_ERR_NO_FILE
echo "El tamaño del archivo que ha enviado es nulo.";
break;
}
}
else {
//si no hay error entonces $_FILES[’nombre del archivo’]
//[’error’] vale 0
echo "Ningún error durante la transmisión del archivo.<br />";
if ((isset($_FILES[’imagen’][’name’])&&($_FILES[’imagen’]
[’error’] == UPLOAD_ERR_OK))) {
$destino de ruta = ’fotos/’;
//desplazamiento del archivo del directorio temporal
//(almacenado por defecto) al directorio de destino
move_uploaded_file($_FILES[’imagen’][’tmp_name’], $destino
de ruta.$_FILES[’imagen’][’name’]);
echo "El archivo ".$_FILES[’imagen’][’name’]." Se ha copiado
en el directorio imágenes";
}
else {
echo "El archivo no se ha copiado en el directorio imágenes.";
}
}
$manager = new Manager($base);
//crear un objeto Blog con los valores de sus atributos
//completados con aquellas recibidas por $_POST
$blog = new Blog();
$blog->setTitulo(htmlentities(addslashes($_POST[’titulo’]),
ENT_QUOTES));
$blog->setDate(Date("Y-m-d H:i:s"));
$blog->setComentario
(htmlentities(addslashes($_POST[’comentario’]), ENT_QUOTES));
$blog->setFoto($_FILES[’imagen’][’name’]);
$iniciar_sesion = $manager->insercionContenido($blog);
if ($iniciar_sesion != 0) {
echo "<br />Añadir comentario de éxito.<br />;
}
else {
echo "<br />El comentario no se ha podido añadir.<br />;
}
}
catch(Exception $e)
{
// mensaje en caso de error
die(’Error : ’.$e->getMessage());
}
?>
<a href="formulario_añadir.php" >Volver a la página de inserción</a>
</body>
</html>
  • La página mostrar_blog.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Blog</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>
<body>
<h2>Blog</h2>
<hr />
<?php
include(’Blog.class.php’);
include(’Manager.class.php’);
try
{
// Conexión a la base de datos
$base = new PDO(’mysql:host=127.0.0.1;dbname=Blog’, ’root’, ’’);
$base->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$manager = new Manager($base);
$tabla_volver = $manager->getContenidoPorFecha();
if (empty($tabla_volver))
{
echo ’Ningún mensaje.’;
}
else {
date_default_timezone_set(’Europe/Paris’);
foreach ($tabla_volver as $valor) { //$valor contiene
//el objeto blog
$dt_inicio = date_create_from_format(
’Y-m-d H:i:s’, $valor->getDate());
echo "<h3>".$valor->getTitulo()."</h3>";
echo "<h4>El ".$dt_inicio->formato(
’d/m/Y H:i:s’)."</h4>";
echo "<div style=’width:400px’>";
echo $valor->getComentario()."</div>";
if ($valor->getImagen() != "") {
echo "<img src=’fotos/";
echo $valor->getImagen()."’ width=’200px’ height=’200px’/>";
}
echo "<hr />";
}
}
}
catch(Exception $e)
{
// mensaje en caso de error
die(’Error : ’.$e->getMessage());
}
?>
<br />
<a href="formulario_añadir.php" >Volver a la página de inserción</a>
</body>
</html>
  • La página Blog.class.php:

<?php
class Blog
{
// Declaración de atributos
private $id;
private $Titulo;
private $date;
private $Comentario;
private $Imagen;
//de acceso
public function getId()
{
return $this->id; //vuelve al inicio de sesión
}
public function setId($id)
{
$this->id = $id; //escrito en el atributo de id
}
public function getTitulo()
{
return $this->titulo; //devuelve el título
}
public function setTitulo($titulo)
{
$this->titulo = $titulo; //escrito en el atributo título
}
public function getDate()
{
return $this->Date; //devuelve la fecha
}
public function setDate($date)
{
$this->date = $date; //escrita en el atributo de fecha
}
public function getComentario()
{
return $this->comentario; //devuelve el comentario
}
public function setComentario($Comentario)
{
$this->comentario = $comentario; //escribe en el atributo
de comentario
}
public function getFoto()
{
return $this->foto; //devuelve el nombre de la imagen
}
public function setFoto($foto)
{
$this->photo = $imagen; //escrita en el atributo de imagen
}
}
?>
  • La página Manager.class.php es:

<?php
class Manager
{
private $base; // Instancia de PDO
public function __construct($base)
{
$this->setDb($base);
}
public function setDb(PDO $base)
{
$this->base = $base;
}
public function getContenidoPorFecha() {
$matriz = array();
$contador = 0;
$resultado = $this->base->query(
’SELECT * FROM Contenido ORDER BY Fecha’);
//busca en cada registro devuelto por la consulta
while ($registro = $resultado->busca()) {
$blog = new Blog();
$blog->setId($registro[’Id’]);
$blog->setTitulo($registro[’Titulo’]);
$blog->setFecha($registro[’Fecha’]);
$blog->setComentario($registro[’Comentario’]);
$blog->setFoto($registro[’Foto’]);
$matriz[$contador] = $blog; //Almacena el objeto
//en la matriz
$contador++;
}
return $matriz;
}
public function insercionContenido(Blog $blog) {
$sql = "INSERT INTO Contenido (Titulo, Fecha, Comentario, Foto)
VALUES (’".$blog->getTitulo()."’,’".$blog->getFecha()."’,’".
$blog->getComentario()."’,’".$blog->getImagen()."’)";
$this->base->exec($sql);
//recuperar el último inicio de sesión
$inicio de sesión = $this->base->lastInsertId();
return $inicio de sesión;
}
}
?>



Espero haber ayudado en algo. Hasta la próxima oportunidad!








No hay comentarios:

Publicar un comentario en la entrada