Empiezo mi proyecto de CMS! Aprende conmigo Php y Mysql!!

Bueno, tras mi laaaaargo letargo (pido perdones) y después de responder un puñao de mensajes pendientes me moria de ganas por meterme a ver si consgio crear ese cms que pretendía hace dias.. meses.. años! je je. Es por eso que cree esta sección del foro, para enseñaros mientras aprendia, pero... creo que soy yo el que va a aprender de vosotros! je je je Que bien, ya era hora! ja ja ja

Os cuento lo que quiero por si me podeis ayudar y así adelanto y me da tiempo a hacer algunas lecciones :roll:

Quiero crear una base de datos a partir de la cual pueda, con un formulario, crear páginas automáticamente desde internet sin más que rellenar los datos que ese formulario pida, que serán más o menos (más bien más) estos:

1.- nombre del archivo de la pagina a crear.
2.- title
3.- description
4.- metatags
5.- categoria a la que ha de pertenecer (en función de esta, tomará la hoja de estilo apropiada) La categoria será la sección correspondiente de las leguetas horizontales de CCTW.
6.- Sección a la que pertenece dentro de esa categoria. Me refiero ya al menú horizontal que en CCTW hay bajo las lenguetas.
6.- Su nombre en el menú lateral izquierdo
7.- Su posición en ese mismo menú
8.- Por supuesto, contenido, me vale escribir en el formulario codigo html directamente, es más, sería lo mejor pues así se pueden incluir imagenes, etc.


Básicamente eso. Más tarde se me ocurriran más cosas que definir para que aparezcan también en el formulario, pero añadir es facil una vez que tienes algo.

Imagino que hay que crear otras tablas donde definir cuantos apartados (lenguetas) hay, y otra para definir las secciones que hay dentro de cada apartado (las secciones son los enlaces horizontales bajo las lenguetas) y otras, una para cada menú lateral izquierdo.

Con lo poco que sabia y lo poco que recuerdo, esto se puede hacer facil, aunque no lo consegui la otra vez

Ahora sigo
Voy a ver si recupero mis conocimientos para hacer la página de conexión con la base de datos, la de mostrar los datos de la tabla, la de editar y eliminar datos, etc. Ahí fue donde me quedé estancado. Si lo consigo seguiré luego con el tema de cómo hacer para que los datos guardados en la tabla aparezcan en una plantilla html en la que en lugar de los datos de esa página aparezcan las variables que lean los datos de la base. No se si me explico.

Claro, las páginas tendrían parte de html y parte de php, con lo que la extensión será .php, no?

Luego quedaría el tema de modificar el .htaccess para hacer las url amigables... joe, no me queda ná, ja ja ja

Una vez que tienes todo eso, se puede ir ampliando muy fácilmente añadiendo por ejemplo un registro de usuarios. Con esto, puedes ir guardando en la base de datos en qué páginas ha estado y puedes avisarlo la siguiente vez que entre de las páginas o secciones que se han actualizado o ampliado. Puedes decirle qué página aun no ha visto, etc, etc, etc. El limite lo pone tu imaginación (y el procesador del hosting..... je je je)

Si alguien me ayuda se lo agradeceré mucho. Si necesitais más datos para echarme una mano pedidlo!

Iré mostrando acá lo que consiga. Un abrazo y gracias por adelantado! :wink:
Hola jorgens. Que bien que quieras crear un CMS , creo que nos seria de mucha utilidad para muchos y al mismo tiempo aprenderíamos algo de PHP. Yo con mucho gusto te ayudaría pero lamentablemente aun estoy muy verde con PHP, pero te puedo ayudar con la parte de HTML y CSS. Aun así creo que te podría ayudar un poco con la programación pues soy muy "Googlero" y toda la información necesaria para crear un CMS se encuentra en Internet :D.

Me leeré algunos tutoriales y veremos si te puedo ayudar con algo de PHP. Igual y esperemos que otros que estén mas avanzados en php se animen a colaborar con sus conocimientos.



Saludos.
Pitufo
Gracias pitu, se agradece el gesto :wink:

A ver si alguien encuentra algo que ando buscando. Se trata de unos pocos archivos php que en conjunto permitian meter datos en una base, listarlos, eliminar datos, actualizar, etc.

Los encontré hace mucho tiempo por la red, en varias webs pues es común en muchos tutoriales, pero no se, ahora no los encuentro en red...

Suele constar de un archivo con los datos de la conexión llamado, por ejemplo, conectar.php con este contenido:

conexion.php
<?php
// Connects to Our Database
mysql_connect("your.hostaddress.com", "username", "password") or die(mysql_error());
mysql_select_db("Database_Name") or die(mysql_error());
?>

Seguido de otro para añadir datos, otro para eliminar, otro para actualizar, etc, etc, todo a través de formularios.

Que rabia, era lo que quería usar de base para ir aprendiendo, remodelándolo y ampliándolo para hacer el cms que necesito. Sabéis de qué os hablo alguno? Teneis esos archivos?

Muchas gracias, mientras sigo buscando!

Pregunta: ando buscando. Se trata de unos pocos archivos php que en conjunto permitian meter datos en una base, listarlos, eliminar datos, actualizar, etc
Respuesta: Los archivos que propuso MzStudios para la creación de un sistema de registro de usuarios van fenomenal como base para esto, están en este mensaje suyo:
http://www.comocreartuweb.com/phpBB2/ftopic11766.html
Pero por si se pierden donde están guardados os los dejo también aquí:
http://www.comocreartuweb.com/ejemplos-del-foro/sistema.zip
Los usaré para modificarlos hasta conseguir lo que quiero.
Estaba pensando que no sería mala idea usar la base de datos del foro.... así los usuarios registrados en él ya no tendrían que registrarse de nuevo y todo queda más homogeneo... mismo login y password para logearse tanto en el foro como en la web.... Miraré como se puede hacer. Alguna idea?
La aplicación de registro de usuarios funciona fenomenal, como era de esperar, je je je. Ahora voy a mirar cómo modificar los campos de la tabla que viene definida en la instalación (nombre, web, apellidos, avatar, etc) para añadir los que yo quiero, los que comenté al principio (metatags, titles, etc, etc). Esto va tomando forma!

Una vez que sepa llenar la base de datos con lo que yo quiero, me tocará aprender a crear las páginas de la web a partir de esos datos y las plantillas html y css.

Veamos que pasa... je je

Pregunta: cómo modificar los campos de la tabla
Solución: Desde el panel de control de mi hosting dispongo del phpMyadmin, que me permite modificar el nombre de cada campo, añadir otros, eliminar alguno, etc. Después de cualquier cambio hay que hacer la misma modificación en los archivos que teníamos de base, los de crear un sistema de registro, esto es, modificar la parte de php de los archivos que teniamos. Por ejemplo si cambio el nombre del campo "username" por "usuario", tengo que cambiar también en los archivos .php esos nombres a las variables para que todo funcione. Existen otros modos, pero este me parece el más sencillo.
Bien, veo que si en lugar de datos como nombre, apellidos, etc introduzco en el formulario puro codigo html, este es interpretado como tal, vamos que si pongo mi nombre así <h1>Jorgens</h1> aparece como un titulo. Eso es buena señal pues es parte de lo que quiero conseguir, je je je.
Una pregunta a los sabios en el tema. Si quiero que un usuario pueda acceder pero no quiero que tenga que estar registrado... cómo lo hago? Voy a investigar...

Algo así como "invitados" digo.
jorgens escribió:Una pregunta a los sabios en el tema. Si quiero que un usuario pueda acceder pero no quiero que tenga que estar registrado... cómo lo hago? Voy a investigar...

Algo así como "invitados" digo.

Mira.. primero te recomiendo que veas que privilegios van a tener los registrados, porque o sino el registro es devalde.... :P
Ya, la idea es hacer algo como este foro. Los usuarios registrados pueden escribir correos, pero los no registrados aunque no pueden escribir si pueden leerlos. Me explico? Quiero algo similar pero no se como hacer para que a los no registrados se les permita ver, aunque no "tocar".

Por sentido común, en esas páginas digamos "públicas" habrá igualmente que poner las líneas:
include("config.php");
// connect to the mysql server
$link = mysql_connect($server, $db_user, $db_pass)
or die ("Could not connect to mysql because ".mysql_error());
// select the database
mysql_select_db($database)
or die ("Could not select database because ".mysql_error());
para poder conectar con la base de datos, y ya está, no? Una vez conectado con la base de datos no pedir login sino mostrar directamente los valores de los campos que queramos mediante "echo" y cosas así, no?

Pregunta. "dónde y cómo se definen privilegios para cada tipo de visitante, incluidos los no registrados?"
Solución: Ya lo he investigado. En el panel de control del servidor, donde das de alta las bases de datos, se pueden crear users y darle los poderes que quieras, solo lectura, modificación, borrar, etc, etc, etc. Allí puedo crear un user llamado por ejemplo invitado y darle solo poderes de lectura. No se si es la mejor opción, pero es la respuesta a mi pregunta.
Bien, poco a poco a base de ensayos y errores trabajando sobre los archivos del registro de usuarios que propuso mzestudios, estoy aprendiendo bastante, creo.

El siguiente experimento va a ser crear una tabla en la que meteré títulos de un menú, las direcciones de sus páginas, la posición que ocupan en el menú y no se qué más. Luego intentaré crear una página en la que el menú se genere solo a partir de esa tabla.

Si lo consigo el siguiente paso será hacer un formulario para retocar ese menú, eliminar enlaces, o añadir.

A ver si lo consigo. Si haces el intentó como yo no dudes en comentar tus progresos y así terminamos antes, je je je
Pues ya lo he conseguido, je je je que fácil, je je je

He creado la tabla con unos cuantos campos que puedo usar para el menú este en php. El´código para crear esa tabla con esos campos es este:
CREATE TABLE `jorgens_testphp`.`menutest` (
`id` smallint( 5 ) NOT NULL AUTO_INCREMENT ,
`nombre` varchar( 20 ) COLLATE utf8_spanish_ci NOT NULL ,
`texto` varchar( 20 ) COLLATE utf8_spanish_ci NOT NULL ,
`enlace` varchar( 50 ) COLLATE utf8_spanish_ci NOT NULL ,
`posicion` tinyint( 10 ) unsigned NOT NULL ,
`estado` set( 'activo', 'borrador', 'eliminado' ) COLLATE utf8_spanish_ci NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE KEY `nombre` ( `nombre` )
) ENGINE = MYISAM DEFAULT CHARSET = utf8 COLLATE = utf8_spanish_ci;

INSERT INTO `jorgens_testphp`.`menutest`
SELECT *
FROM `jorgens_testphp`.`testmenu` ;
La he creado sin tener aún mucha idea de lo que es un indice ni de los tipos de datos que debo escoger ni nada. Ya aprenderé..
Como puedes ver, la base de datos se llama jorgens_testphp, la tabla se llama testmenu y los campos creados son los siguientes:
- id, es el identificador.
- nombre: es el nombre que identifica a cada enlace del menu.
- texto: es el texto que aparece en el enlace del menú.
- enlace: es la dirección de la página que enlaza cada enlace.
- posicion: Aun no se usarla, pero pretendo que indique la posición u orden en el menú. La posición 1 sería arriba del todo y así en adelante.
- estado: tampoco se usarlo aún, pero ya lo he creado para en el futuro, cuando sepa, poder escoger entre activa que significa que debe aparecer en el menú, borrador que indica que no debe aparecer por estar en fase de diseño y eliminada que significa que no debe aparecer nunca en el menú pues ya se ha deshechado ese enlace.

El codigo de la página es este (menu.php):
<html>
<head>
<META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
<title>Menu en php 001</title>
<style type="text/css">
<!--
.estilomenu {background-color:red ; width:200px}
-->
</style>
</head>
<div class='estilomenu'>
<ul>

<?php
include "config.php";
mysql_connect($server, $db_user, $db_pass) or die (mysql_error());

$result = mysql_db_query($database, "select * from $table order by id desc") or die (mysql_error());

if (mysql_num_rows($result)) {
echo "

Enlaces del menu:</p>";
while ($qry = mysql_fetch_array($result)) {
echo "
  • ']$qry";
    }
    }
    ?>


    </div>
    <body>
    </body>
    </html>

  • y el del config.php que se llama en el include es este:
    <?php

    // Este dato de abajo suele ser localhost casi siempre.
    $server = "localhost";

    // Aqui abajo escribe el nombre de la base de username.
    $database = "jorgens_testphp";

    // nombre de username de la base de datos para acceder a ella.
    $db_user = "jorgens_testphp";

    // Y ahora la contraseña. No te la he puesto, claro...
    $db_pass = "**********";

    // especificar la tabla a usar
    $table = "testmenu";
    ?>

    Siguiente paso? Añadir algunos enlaces más y ver si consigo que ordene los enlaces en función del campo "posicion".

    Guau, que divertido es esto!!!! je je je Me ayudais?
    El codigo usado antes lo he rescatado de los archivos del registro de usuarios que ya os he comentado. En adelante los llamaré Archivos Base.

    Ahora que lo releo, veo que hay una parte que debe de estar definiendo ya que los resultados han de mostrarse ordenados por id y en sentido descendente. Seguro que es así, pues realmente me ha salido primero el enlace que tenia id=2 y luego el que tenia id=1 (id era el primer campo de la table).

    Mira este es el código que tengo yo en el ejemplo de antes:
    $result = mysql_db_query($database, "select * from $table order by id desc") or die (mysql_error());

    y he coloreado de rojo la parte que sospecho que define que aparezcan ordenados (order) según el valor del campo id (by id) y además en sentido descendete (desc), je je je je, veis como para aprender basta con hacer pruebas y estar atentos? Pues ale, ya sabemos otra cosa más, y sin preguntar, ja ja ja

    Comprobado, si quiero un orden ascendente, es decir, que coloque en primer lugar en el menú el que tenga menor valor en la variable posicion, basta con cambiar des por asc, así:
    $result = mysql_db_query($database, "select * from $table order by id asc") or die (mysql_error());

    El siguiente paso va a ser.... a ver como lo complicamos... ya! hacer que los enlaces definidos en la tabla como "borrador" no aparezcan. También iré creando un formulario a través del cuál poder modificar los elementos del menú.

    Qué pasa, no se anima nadie?? Pues os lo perdeis, esto está genial je je je
    Jorgens me gustaria ayudarte con el login usando la tabla del foro :D
    Yo se como se encriptan las contraseñas y como hacer para logear los usuarios:
    En el formulario, dos input:
    <input type="text" name="usuario">
    y el de la passwd:
    <input type="password" name="passwd">
    luego, en el archivo del login pones:
    $usuario = $_POST['usuario'];
    $passwd = md5($_POST['passwd']);
    y lo selects:
    $select = mysql_query("SELECT * FROM la_db_del_foro WHERE username = '{$usuario}' AND password = '{$passwd}'");
    if ($q = mysql_fetch_array($select))
    {
    // logeo bien
    }
    else
    {
    // logeo mal
    }
    lo unico es que no se si se llamaban asi los campos pero xD se que se hace asi para la contraseña :wink:
    P.D.: A partir de php 3.5 la funcion mysql_db_query ya no se usa mas :P
    Uff, entonces antes de usar comandos a lo tonto debería saber cuales son los actuales.... que trabajoso, no?
    Pregunta: Cual es la última versión de php?
    Respuesta: La versión más reciente de PHP es la 5.3.0 (30 de junio de 2009), y está previsto el lanzamiento en breve de la 6.0
    Pregunta: Cómo debo entonces poner esta línea?
    $result = mysql_db_query($database, "select * from $table order by id asc") or die (mysql_error());

    Gracias compañeros!
    He conseguido crear un formulario en el que introducir los datos de nuevos enlaces para ese menú. He conseguido que no permita crear un nuevo enlace si pones un valor a "nombre" que ya existe.

    Ahora me gustaria que no me dejara colocarle la misma posición a dos enlaces, es decir, si ya existe un enlace con el valor posicion=4, que no me deje crear otro nuevo enlace con el mismo valor. Pregunta: Como evito que se repitan estos valores?

    Por otro lado la variable "estado" quiero que solo pueda tener los valores, "activa", "borrador" o "eliminado". Pregunta: Cómo se hace para que en el formulario me salga un desplegable con esos tres valores de modo que no pueda nada más que escoger entre esos tres?

    Iré colocando las respuestas conforme las encuentre, o conforme me las digais si alguien las sabe, oki?
    Pregunta: Como evito que se repitan estos valores?

    En uno de los archivos que uso he encontrado este trozo de código php:
    // Comprobar que nombre no existe ya
    $check = "select id from $table where nombre = '".$_POST['nombre']."';";
    $qry = mysql_query($check)
    or die ("Could not match data because ".mysql_error());
    $num_rows = mysql_num_rows($qry);
    if ($num_rows != 0) {
    echo "Lo siento pero el nombre $nombre ya existe en el menú.
    ";
    echo "<a href=register.html>Inténtalo de nuevo</a>";
    exit;
    } else {
    Según parece comprueba que el valor de la variable "nombre" que introducimos en el formulario no exista ya. Si existe nos lo dice y no nos permite introducir esos datos en la tabla.
    Yo quiero que evite también que se repita el valor de la variable "posicion" y para ello he copiado todo ese código y lo he pegado justo a continuación, pero cambiando "nombre" por "posicion", así:
    // Comprobar que nombre no existe ya
    $check = "select id from $table where nombre = '".$_POST['nombre']."';";
    $qry = mysql_query($check)
    or die ("Could not match data because ".mysql_error());
    $num_rows = mysql_num_rows($qry);
    if ($num_rows != 0) {
    echo "Lo siento pero el nombre $nombre ya existe en el menú.
    ";
    echo "<a href=register.html>Inténtalo de nuevo</a>";
    exit;
    } else {
    // Comprobar que posicion no existe ya
    $check = "select id from $table where nombre = '".$_POST['posicion']."';";
    $qry = mysql_query($check)
    or die ("Could not match data because ".mysql_error());
    $num_rows = mysql_num_rows($qry);
    if ($num_rows != 0) {
    echo "Lo siento pero la posición $posicion ya existe en el menú.
    ";
    echo "<a href=register.html>Inténtalo de nuevo</a>";
    exit;
    } else {

    Pero no me funciona, me da un error. En qué me he equivocado amigos?
    Cambia un poco los codigos:
    // Comprobar que nombre no existe ya
    $check = "select id from $table where nombre = '".$_POST['nombre']."';";
    $qry = mysql_query($check)
    or die ("Could not match data because ".mysql_error());
    if ($error = mysql_fetch_array($qry)) {
    echo "Lo siento pero el nombre $nombre ya existe en el menú.
    ";
    echo "<a href=register.html>Inténtalo de nuevo</a>";
    exit;
    } else {
    // Comprobar que posicion no existe ya
    $check = "select id from $table where posicion = '".$_POST['posicion']."'";
    $qry = mysql_query($check)
    or die ("Could not match data because ".mysql_error());
    $num_rows = mysql_num_rows($qry);
    if ($num_rows != 0) {
    echo "Lo siento pero la posición $posicion ya existe en el menú.
    ";
    echo "<a href=register.html>Inténtalo de nuevo</a>";
    exit;
    } else {
    Y asi te funcionara, eso si, tienes que tener un input con la posicion, por eso el $_POST['posicion'] :wink:
    Nada, no hay manera. He cambiado eso pero tampoco me funciona.

    Fíjaos en una cosa. Si pongo símbolos de comentario (#) en las líneas de código del primero de esos bloques funciona el impedir que haya repeticiones de la variable "contador, y si los quito y pongo como comentarios las líneas de código del segundo de los bloques, funciona perfectamente el impedir qe haya repeticiones de la variable "nombre".

    Eso me hace pensar que ambos bloques juntos tienen algo que hace que no funcione. He revisado y revisado los códigos y pienso que ha de ser algo referente a las variables usadas, $check, $qry o $num_rows. Quizás al usarlas en el primer bloque ya no puedo usarlas en el segundo? O quizás deba reiniciarlas antes de usarlas otra vez, por ejemplo con mysql_free_result ($variable); o algo así?

    Gracias de nuevo!
    Quizás sea interesante poder ver en cualquier momento todos los datos que tenemos en la tabla. He creado para ello un archivo que muestra una tabla con todos los datos incluidos hasta el momento. Os dejo el código, oki?

    <html>
    <head>
    <META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
    <title>Lista de elementos del Menu en php 001</title>
    <style type="text/css">
    <!--
    table,td {BORDER: gray 1px solid ;}
    -->
    </style>
    </head>

    <body>

    <table>
    <tr>
    <td>Id</td>
    <td>Enlace</td>
    <td>Texto</td>
    <td>Posición</td>
    <td>Estado</td>
    <td>Nombre</td>
    </tr>
    <?php
    include "config.php";
    mysql_connect($server, $db_user, $db_pass) or die (mysql_error());

    $result = mysql_db_query($database, "select * from $table order by id asc") or die (mysql_error());

    if (mysql_num_rows($result)) {
    echo "

    Enlaces del menu:</p>";
    while ($qry = mysql_fetch_array($result)) {
    echo "
    <tr>
    <td>$qry</td>
    <td>$qry</td>
    <td>$qry</td>
    <td>$qry</td>
    <td>$qry</td>
    <td>$qry</td>
    </tr>
    ";
    }
    }
    ?>
    </table>

    </body>
    </html>

    Le falta retocar los estilos de tabla para que aparezcan más bonitos, pero por el momento funciona, que es lo importante.
    Pregunta: Cómo se hace para que en el formulario me salga un desplegable con esos tres valores de modo que no pueda nada más que escoger entre esos tres?

    Pues ya lo tengo! je je je. Cuando se definen los distintos campos que componen una tabla hay que indicar de qué tipo son, si son numeros largos, cortos, si es texto, etc, etc, y hay dos tipos que sirven para indicar que solo se puede escoger entre ciertos valores ya definidos.

    Estos dos tipos son SET y ENUM.

    Al usar SET obligas a escoger uno o varios de enter unos cuantos valores definidos, mientras que con ENUM solo puedes escoger uno de ellos, no varios a la vez.

    Yo habia escogido el tipo SET, pero he aprendido que es el ENUM el que debo tomar, pues una página no quiero que esté en estado activo y borrador a la vez. Solo quiero que tome uno de esos tres valores, activo, borrador o eliminado.

    En el myphpadmin entonces tengo que escoger para el campo "estado" el tipo "ENUM" y además tengo que indicar en la columna "Longitud/Valores" los valors que quiero definir, así
    'activo','borrador','eliminado'
    [contenido no disponible]

    Y ahora al crear el formulario donde se meten los datos, lo pongo así:


    Estado (borrador, activo o eliminado):</p>
    <input type="radio" name="estado" value="borrador" checked > Borrador
    <input type="radio" name="estado" value="activo" > Activo
    <input type="radio" name="estado" value="eliminado" > Eliminado

    ..... imagino que no os estáis enterando de mucho... pronto os lo explico más detalladamente, paso a paso como os gusta, oki? Por lo pronto dejo estas notas para acordarme de los pasos que voy dando y poder explicarlo mejor más tarde y para que los que si sabeis de esto podais ayudarme en este viaje.

    *Nota. Lo de checked que he señalado en rojo es para que esa opción salga ya marcada de forma predeterminada. Si no marcamos otra distinta se tomará esta como la escogida.
    Un abrazo! Sigo experimentando!
    bueno... me da corte preguntarlo pero... ¿que es el CMS, el PHP y el MYSLQ ese? =P esque soy nuevo en esto.... jajajajaja xD
    CMS: Content Management System (Sistema de administracion de contenido)
    PHP: Antes era Personal Home Page, ahora es Hipertext Procesator (Lenguaje del lado del servidor)
    MySQL: My Structured Query Language (Lenguaje para administracion de dato mediante tablas y base de datos)
    Si, digamos que un CMS es un puñao de archivos que si los subes a tu hosting te permiten crear contenidos de una web a base de formularios, sin necesidad de meter mucha mano en html y css. Necesitan siempre de una base de datos.

    Mientras que con HTML puedes crear páginas web, el uso del PHP te permite hacer cosas dinámicas, que no son siempre las mismas, interactuar con lo que elija el visitante para mostrar una cosa u otra.

    El Mysql es para gestionar bases de datos. Estas permiten guardar información que has colocado tú, o que ha colocado el visitante.

    Esto es mas o menos, definiciones para andar por casa, que seguro que no son del todo correctas pero que quizás sirven para entender un poco.

    De esto se puede deducir que un foro por ejemplo, puede estar hecho con php, pues según donde hagas clic aparece un mensaje u otro, y que usa Mysql o bases de datos, pues el contenido que ponemos vosotros o yo se queda guardado.

    Repito, son definiciones para novatos! je je je, pero valen para hacerse una idea. Si las quereis mejorar adelante!