Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rubcr

#11
Programación General / Casos de uso
7 Junio 2020, 13:40 PM
Hola a todos tengo que realizar unos casos de uso según lo siguiente, entiendo que se tendrían que hacer 3, usuario, usuario registrado y administradores, pero no sé como realizarlo, los include y extends no entiendo muy bien como usarlos

La Web funciona como un foro, cualquier usuario podrá ver los contenidos publicados por el resto de los alumnos. En el sitio web se podrán visualizar las 25 últimas aportaciones introducidas por los usuarios y también las 10 aportaciones mejor valoradas por los usuarios.  

- Se pueden filtrar Las aportaciones por categorías (por ejemplo: Entornos, Programación, Bases de Datos, SS.II., etc...)

- Los accesos al sitio Web se registrarán y mediante las credenciales (registro IP o nombre de máquina) se puede conocer el origen del acceso.

- Para votar un comentario tienes que estar registrado en la Web. Si estás registrado también podrás introducir tus comentarios y votar si una aportación es muy mala, ofensiva, copiada de otra persona, etc..; en ese caso los moderadores podrán eliminarlo de la Web.

- A los usuarios registrados se le enviará mensualmente un correo electrónico con los comentarios mejor valorados del momento.

-los administradores podrán moderar comentarios, dar de baja a aquellos usuarios que hagan un abuso o uso indebido de la plataforma. Además, podrán ver estadísticas que contengan el número de aportaciones en la Web, los accesos por alumno y el número de votos emitidos en un período de tiempo.


Espero que alguien pueda ayudarme, un saludo.
#12
Cita de: rubcr en  5 Junio 2020, 13:49 PM
Y la flecha de empleado que significa? Composición?
#13
Cita de: YreX-DwX en  5 Junio 2020, 13:20 PM
Los rombos con relleno (los únicos que aparecen en tu diagrama) representan una relación de composición.
La característica de estas relaciones es que determina una entidad débil (Parque) y una entidad fuerte (Zona). La entidad débil no puede existir por sí misma sin la entidad fuerte, es decir, que no puedes guardar los parques de una zona en tu sistema si no tienes guardada esa zona. De igual manera entre Zoo - Parque, no puedes guardar en tu sistema los Zoos de un parque si no tienes guardado ese parque.
Otra característica es que una instancia de la entidad débil no puede ser compartida por varias de la fuerte. Un Zoo no puede pertenecer a varios parques diferentes.
Y una última característica sería que si en algún momento eliminas la instancia de la entidad fuerte, se deberán eliminar todas las instancias de la entidad débil que estuviesen relacionadas con esa instancia de la fuerte. Resumido: Si en tu sistema eliminas un parque, se deberán eliminar primero todos los zoos de ese parque.

Existe otro tipo de rombo que no está relleno y estos representan relaciones de agregación. Son un poco "la otra mitad":
También podemos diferenciar una entidad débil y una fuerte, y que la débil forma parte de la fuerte, pero en este caso no existe una dependencia tan fuerte como en el caso anterior.
En este caso una instancia de la entidad débil puede estar relacionada con más de una instancia de la entidad fuerte.
Si se elimina la instancia de la entidad fuerte, no se eliminan las instancias de la entidad débil con las que tuviese relación.
Por ejemplo: En un taller, Piezas - Vehículos. Tienen unas piezas guardadas en un almacén y esas piezas se usan para reparar unos vehículos. Pero cuando el vehículo sale del sistema, no tiran todas las piezas que valían para ese vehículo, siguen ahí para utilizarlas con otro.
Y la flecha de empleado que significa?
#14
Hola a todos tengo un diagrama de clases y no acabo de entender los símbolos que aparecen (rombos).
El diagrama es el siguiente:

Espero que alguien pueda echarme una mano.
Un saludo.
#15
Bases de Datos / Re: Trigger complejos MySQL
5 Junio 2020, 02:29 AM
Cita de: YreX-DwX en  4 Junio 2020, 19:23 PM
Para empezar ese trigger salta después de la inserción por lo que aunque no sea válido el registro, ya estará insertado. Tiene que ser before.

Además no vale eso de producto.stock y ya. Cuando insertas un registro en Inventario, los campos que introduces son: id_pedido, id_producto, cantidad. Ninguno de ellos es stock. Así que lo que tienes que hacer es una consulta a la tabla Producto para obtener el registro asociado a ese id_producto.
Llevo varias horas intentando añadir lo que me indicas pero me has terminado de descolocar. Xddddd
Como hago una consulta a una tabla entera?


Cita de: YreX-DwX en  4 Junio 2020, 11:33 AM
En este caso puedes crear un trigger BEFORE INSERT que compruebe lo que tú dices y en caso de que no sea válido puedes ejecutar:
Código (sql) [Seleccionar]

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Insercion no valida...'

Te dejo un link para que leas más acerca de ello: https://dev.mysql.com/doc/refman/8.0/en/signal.html
De la misma forma que antes. En vez de insertar el producto y después de la inserción, comprobar la validez del mismo; puedes usar un trigger BEFORE INSERT y lanzar otro error si no se cumple la condición de validez del registro.
Hola de nuevo, el segundo trigger no se puede hacer, basicamente cuando haces un Insert la tabla se queda bloqueada y no podrias hacer otra accion como un delete seguida.
Y del primero no consigo hacer nada.

MOD: No hacer doble post. Usa el boton modificar.
#16
Bases de Datos / Re: Trigger complejos MySQL
4 Junio 2020, 16:40 PM
Cita de: YreX-DwX en  4 Junio 2020, 15:16 PM
Veo que el código que has puesto al comienzo del tema está completado en base a mi respuesta de este otro tema: https://foro.elhacker.net/bases_de_datos/pasar_a_mysql-t505018.0.html;msg2222689#msg2222689, lo que me hace pensar que no estás empleando ningún esfuerzo en hacerlo por ti mismo.

El foro es para ayudar, no para hacer tareas. No puedes esperar que te den todos los problemas solucionados porque en algún momento de tu vida tendrás que hacerlo tú solo y entonces no sabrás ni por dónde empezar.

Ya tienes un punto de referencia para saber por donde empezar, además tienes muchísima información tanto en otros temas del foro como en Internet sobre cómo hacer triggers.

Inténtalo tú e investiga sobre los problemas que tengas. Y cuando no encuentres información o no entiendas cómo solucionar un problema, aporta tu código para que alguien de la comunidad pueda ayudarte.
Para el primero tengo esto:
Código (sql) [Seleccionar]

CREATE TRIGGER test_stock 
AFTER INSERT ON inventario
FOR EACH ROW BEGIN
    IF (producto.stock < 0) THEN
        SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Warning: No hay stock disponible!';
    END IF;
END$$

DELIMITER ;

No me genera nada y no sé por qué está mal.
#17
Bases de Datos / Re: Trigger complejos MySQL
4 Junio 2020, 13:00 PM
Cita de: YreX-DwX en  4 Junio 2020, 11:33 AM
En este caso puedes crear un trigger BEFORE INSERT que compruebe lo que tú dices y en caso de que no sea válido puedes ejecutar:
Código (sql) [Seleccionar]

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Insercion no valida...'

Te dejo un link para que leas más acerca de ello: https://dev.mysql.com/doc/refman/8.0/en/signal.html
De la misma forma que antes. En vez de insertar el producto y después de la inserción, comprobar la validez del mismo; puedes usar un trigger BEFORE INSERT y lanzar otro error si no se cumple la condición de validez del registro.
Puedes ayudarme un poco con la sintaxis porque no se muy bien como estructurarlo y que seleccionar a parte de lo que me indicas.
#18
Bases de Datos / Re: Trigger complejos MySQL
3 Junio 2020, 19:35 PM
Cita de: MCKSys Argentina en  3 Junio 2020, 19:05 PM
Hola!

Revisa este tutorial: https://www.mysqltutorial.org/mysql-triggers/mysql-after-insert-trigger/

Saludos!
Hola gracias por el tutorial, pero no se ajusta al tipo de triggers que necesito ya que estos triggers no incluyen los datos generados en una tabla adicional.

Un saludo.
#19
Bases de Datos / Trigger complejos MySQL
3 Junio 2020, 00:43 AM
Hola a todos.
Tengo que crear unos triggers y son bastante liosos para mi ya que no tengo el suficiente nivel para ello.
Las tablas dadas son las siguientes:
Código (sql) [Seleccionar]

CREATE TABLE Pedido(
 id_pedido INT PRIMARY KEY,
 fecha_ped DATE,
 total FLOAT,
 iva VARCHAR,
 id_vendedor INT,
 id_cliente INT,
);

CREATE TABLE Producto(
 id_producto INT PRIMARY KEY,
 descripcion VARCHAR,
 stock INT,
 precio FLOAT,
 estrellas INT(1)
);

CREATE TABLE Inventario(
 id_pedido INT,
 id_producto INT,
 cantidad INT DEFAULT 1,
 PRIMARY KEY(id_pedido, id_producto),
 CONSTRAINT FK_Inventario_Pedido FOREIGN KEY (id_pedido) REFERENCES Pedido(id_pedido),
 CONSTRAINT FK_Inventario_Producto FOREIGN KEY (id_producto) REFERENCES Producto(id_producto)
);


Los triggers son:
1.Trigger que al introducir una fila en la tabla que nace de la relación entre pedido y producto (inventario) , compruebe que en la tabla producto hay stock y sino tiré un warning.
2.Trigger que tras introducir un nuevo producto compruebe que el precio es mayor que 0. Si es menor o igual a 0, el trigger deberá eliminar el artículo que se ha insertado.

Espero que alguien pueda ayudarme.
Un saludo.

#20
Desarrollo Web / Re: Duda funcion javascript
29 Mayo 2020, 11:23 AM
Cita de: EdePC en 28 Mayo 2020, 23:12 PM
Saludos,

- Lo siguiente me funciona a mí según e entendido tu enunciado:

Código (javascript) [Seleccionar]
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <script>
   var charSet = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz0123456789"

   function addInfo() {
     var lista = document.getElementById("lista")
     // Tamaño del String aleatorio es entre 3 a 10 caracteres
     lista.innerHTML += "<li>" + genStringAleatorio(numAleatorio(3, 10)) + "</li>"
   }
   function genStringAleatorio(tam) {
     var stringAleatorio = ""
     for (var i = 0; i < tam; i++) {
       // Se va extrayendo un caracter aleatorio desde el charSet
       stringAleatorio += charSet[numAleatorio(0, charSet.length - 1)]
     }
     return stringAleatorio
   }
   function numAleatorio(min, max) {
     // Genera un número aleatorio entre min y max incluyéndolos
     return Math.floor( Math.random() * (max + 1 - min) ) + min
   }
 </script>
</head>
<body>
 <ul id="lista">
   <li>Lorem ipsum dolor sit amet</li>
   <li>Consectetuer adipiscing elit</li>
   <li>Sed mattis enim vitae orci</li>
   <li>Phasellus libero</li>
   <li>Maecenas nisl arcu</li>
 </ul>
 <input type="button" value="Añadir elemento" onclick="addInfo()">
</body>
</html>


- HTML5 es soportado completamente en la actualidad, mejor usar esa sintáxis. Con respecto al javascript yo prefiero seguir utilizando la sintáxis clásica, al menos por este año más XD.

- Dependiendo de la complejidad de los elementos a crear suele ser mejor utilizar innerHTML para cosas muy sencillas, luego createElement() para cosas algo más complejas y documentFragment para crear elementos complejos con muchos sub-elementos como formularios o árboles de elementos.
De acuerdo.
y tengo otra cuestión, tengo un programa que realiza varias cosas.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejercicio 11 - DOM básico</title>

<script type="text/javascript">
window.onload = function() {
  var info = document.getElementById("informacion");

  // Numero de enlaces de la pagina
  var enlaces = document.getElementsByTagName("a");
  info.innerHTML = "Numero de enlaces = "+enlaces.length;

  // Direccion del penultimo enlace
  var mensaje = "El penultimo enlace apunta a: "+enlaces[enlaces.length-2].href;
  info.innerHTML = info.innerHTML + "<br/>" + mensaje;

  // Numero de enlaces que apuntan a http://prueba
  var contador = 0;
  for(var i=0; i<enlaces.length; i++) {
    // Es necesario comprobar los enlaces http://prueba y
    // http://prueba/ por las diferencias entre navegadores
    if(enlaces.href == "http://prueba" || enlaces.href == "http://prueba/") {
      contador++;
    }
  }
  info.innerHTML = info.innerHTML + "<br/>" + contador + " enlaces apuntan a http://prueba"

  // Numero de enlaces del tercer párrafo
  var parrafos = document.getElementsByTagName("p");
  enlaces = parrafos[2].getElementsByTagName("a");
  info.innerHTML = info.innerHTML + "<br/>" + "Numero de enlaces del tercer párrafo = "+enlaces.length;
}
</script>
</head>

<body>
<div id="informacion" style="border:thin solid silver; padding:.5em"></div>
<p>Lorem ipsum dolor sit amet, <a href="http://prueba">consectetuer adipiscing elit</a>. Sed mattis enim vitae orci. Phasellus libero. Maecenas nisl arcu, consequat congue, commodo nec, commodo ultricies, turpis. Quisque sapien nunc, posuere vitae, rutrum et, luctus at, pede. Pellentesque massa ante, ornare id, aliquam vitae, ultrices porttitor, pede. Nullam sit amet nisl elementum elit convallis malesuada. Phasellus magna sem, semper quis, faucibus ut, rhoncus non, mi. <a href="http://prueba2">Fusce porta</a>. Duis pellentesque, felis eu adipiscing ullamcorper, odio urna consequat arcu, at posuere ante quam non dolor. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis scelerisque. Donec lacus neque, vehicula in, eleifend vitae, venenatis ac, felis. Donec arcu. Nam sed tortor nec ipsum aliquam ullamcorper. Duis accumsan metus eu urna. Aenean vitae enim. Integer lacus. Vestibulum venenatis erat eu odio. Praesent id metus.</p>

<p>Aenean at nisl. Maecenas egestas dapibus odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin consequat auctor diam. <a href="http://prueba">Ut bibendum blandit est</a>. Curabitur vestibulum. Nunc malesuada porttitor sapien. Aenean a lacus et metus venenatis porta. Suspendisse cursus, sem non dapibus tincidunt, lorem magna porttitor felis, id sodales dolor dolor sed urna. Sed rutrum nulla vitae tellus. Sed quis eros nec lectus tempor lacinia. Aliquam nec lectus nec neque aliquet dictum. Etiam <a href="http://prueba3">consequat sem quis massa</a>. Donec aliquam euismod diam. In magna massa, mattis id, pellentesque sit amet, porta sit amet, lectus. Curabitur posuere. Aliquam in elit. Fusce condimentum, arcu in scelerisque lobortis, ante arcu scelerisque mi, at cursus mi risus sed tellus.</p>

<p>Donec sagittis, nibh nec ullamcorper tristique, pede velit feugiat massa, at sollicitudin justo tellus vitae justo. Vestibulum aliquet, nulla sit amet imperdiet suscipit, nunc erat laoreet est, a <a href="http://prueba">aliquam leo odio sed sem</a>. Quisque eget eros vehicula diam euismod tristique. Ut dui. Donec in metus sed risus laoreet sollicitudin. Proin et nisi non arcu sodales hendrerit. In sem. Cras id augue eu lorem dictum interdum. Donec pretium. Proin <a href="http://prueba4">egestas</a> adipiscing ligula. Duis iaculis laoreet turpis. Mauris mollis est sit amet diam. Curabitur hendrerit, eros quis malesuada tristique, ipsum odio euismod tortor, a vestibulum nisl mi at odio. <a href="http://prueba5">Sed non lectus non est pellentesque</a> auctor.</p>
</body>
</html>

Necesito que también otra acción en el script que cuente en el texto todas las palabras que acaben en j. Como se puede hacer?