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 - Drakaris

#31
Buenas! Como dice nsigned, esta muy bien el contador de intentos de login fallidos, pero también, a parte de eso, pondría un Captcha, que lo que haría, es que un robot, no pueda enviar el formulario, porque necesita rellenar un campo cuyo texto que tiene que copiar es un Imagén. Puedes crear el tuyo propio o mediante la API de Google

https://developers.google.com/recaptcha/docs/display
#32
Buenas! No conozco mucho este leguaje, pero me parece que no existen los objetos tal cual como en javascript en Python,
Código (javascript) [Seleccionar]

{
   1: 'gato',
   2: 'perro',
   3:'otro'
}


Pero si existe la posibilidad de hacer arrays bidireccionales, así que, simplemente puedes obtener la longitud del la lista ['gato', 'perro', 'otro'], y hacer un bucle for de cuyo rango de longitud que te dio. Y en cada iteración modificar el elemento del indice actual por un array que contenga el numero en sí y el valor.

Primero obtenemos la longitud de la lista, imaginando que la variable 'lista' contiene el array
Código (python3) [Seleccionar]
lenList=len(lista)
A continuación hacemos un bucle con el rango de la longitud

Código (python) [Seleccionar]

for i in range(len(lista)):
lista[i] = [i,lista[i]]


Y dentro le modificamos el elemento del array cuyo indice es de la iteración actual, no se, sí me explico bien.

Y si hicieramos un echo lista, veriamos que se creo un array bidireccional

Te dejo un ejemplo y su salida:
Código (python) [Seleccionar]

lista = ["gato","perro","otro"];
def ordenarValores(list):
for i in range(len(lista)):
lista[i] = [i,lista[i]]
print(lista)
ordenarValores(lista)
print(lista[0][1])


Salida
Citar
[[0, 'gato'], [1, 'perro'], [2, 'otro']]
gato

Espero que te haya respondido a tu duda y te haya ayudado. Buen dia.
#33
Cita de: 556eknown en  1 Marzo 2021, 23:44 PM
Claro que si, pero en el servidor ha de tener una manera de coger el post y sobre escribir el contenido de la base de datos por el del post:
Front-end:
Código (javascript) [Seleccionar]

async function postData(data) {
fetch("/post", {
method: 'POST',
headers: {'Content-Type':'application/x-www-form-urlencoded'},
body: "data=" + JSON.stringify({user: "admin", pass: "admin"})
}).then((res) => data(res.text().then((text) => console.log(text))));
}
document.querySelector("button").addEventListener("click", () => {
postData((data) => console.log(data));
})

back-end:
Código (javascript) [Seleccionar]

const express = require("express");
const app = express();
const fs = require("fs");
app.use(express.urlencoded())
app.route("/").get((req, res) => {
res.sendFile(__dirname + "/post.html");
})
app.route("/post").post((req, res) => {
let post_data = JSON.parse(req.body.data);
console.log(post_data);
fs.readFile(__dirname + "/bdd.json", (err, data) => {
if(err)throw err;
data = JSON.parse(data);
data[post_data.user] = post_data.pass;
fs.writeFile(__dirname + "/bdd.json", JSON.stringify(data), (err) => {
if(err)throw err;
res.send("Json uploaded")
})
})
})
app.listen(80)

No se si es la mejor respuesta sobre la respuesta, espero haberte ayudado! Si tienes algún problema dimelo! Saludos!

Ok, muchas gracias lo miraré.
#34
Buenas, quisiera añadir un objecto a un JSON externo con javascript, esto es posible con el fetch() de JS o XMLHttpRequest?

Es decir, yo tengo un JSON en /jon/users.json (inicialmente esta vacio)
Código (JSON) [Seleccionar]

[
]


Y en mi javascript genero un objecto que lo guardo en una variable, por ejemplo
Código (js) [Seleccionar]

let data = {
  "nick": "Drakaris",
  "password": "d404559f602eab6fd602ac7680dacbfaadd13630335e951f097af3900e9de176b6db28512f2e000b9d04fba5133e8b1c6e8df59db3a8ab9d60be4b97cc9e81db",
  "pleasures": [
    "romantic"
  ],
  "dateOfBirth": "2021-02-09",
  "gender": "female"
}

y este lo quiero guardar en el JSON /json/users.json

Para ello, según tengo entendido se puede hacer con el fetch() metodo POST?

Algo así

            let data = getDataForm() //obtengo el objeto generado dinamicamente
            fetch("json/users.json",{
                method: "POST",
                body: JSON.stringify(data),
                headers:{
                    "Content-type":"application/json"
                }
            }).then((result)=>result.json())
            .then(dat=>console.log(dat))
            .catch(err=>console.log(err));


Esto me devuelve una array vacio y cuando voy al archivo JSON no me a implementado nada.

Se puede hacer lo quiero hacer?
https://drive.google.com/drive/folders/1BiDcjrPZ3-8qtq9B7ps-dSIu6-neaqY-?usp=sharing

Gracias de antemano
#35
Muchisimas gracias a los dos! Me a funcionado muy bien.
@XSStringManolo, no cai en que podia hacerlo de esa manera.
#36
Buenas, tengo un script hecho, que utiliza mucho la funcion eval(), pero no es nada recomendable, en estos casos. Como podría reemplazarlo?

trabajar con arrays/objetos, en este caso añadir:
Código (javascript) [Seleccionar]

eval("$HERO." + group + ".push('" + item.id.replace("Check","") + "')")


eliminar objetos
Código (javascript) [Seleccionar]

eval("delete $HERO." + item[0]);


operaciones
Código (javascript) [Seleccionar]

eval("$HERO.skills." + skill + "" + operator + "=" + countSkill);


Código (javascript) [Seleccionar]

eval("$ELEMENTSPOINTS." + type + "." + element);

En este caso quiero mostrar en el objeto $ELEMENTSPOINTS el elemento de su tipo, se que se puede hacerse así:
Código (javascript) [Seleccionar]

$ELEMENTSPOINTS[type];

pero es solo para mostrar el subobjecto ELEMENTSPOINTS con todas sus propiedades, pero no el valor de uno en concreto.


Utilizo tanto el eval(), porque es dinamico, todos los eval estan dentro de una funcion que contiene parametros, cuyos parametros los utilizo en el eval(). Como lo hago sin utilizarlo?


Los objetos, son los siguientes:
Código (javascript) [Seleccionar]

$HERO={
   name:null,
   magic:[],
   weapons:[],
   gems:[],
   skills:{
       attack:0,
       defenser:0,
       speed:0
   }
}
const $ELEMENTSPOINTS={
   magic:{ // +
       lightning:{
           attack:10
       },
       ice:{
           attack:4,
           defenser:3
       },
       fire:{
           attack:8
       },
       wind:{
           defenser:2
       }
   },
   weapons:{
       sword:{
           attack:5,
           speed:1 // the speed substraction in the operation
       },
       shield:{
           defenser:10,
           speed:5
       },
       hatchet:{
           attack:10,
           speed:4
       },
       crossbow:{
           attack:7,
           speed:3
       }
   },
   gems:{ // +
       diamond:{
           lightning:2,
           ice:3,
           fire:5,
           wind:4
       },
       esmerald:{
           lightning:2,
           ice:3,
           fire:5,
           wind:4
       },
       ruby:{
           lightning:3,
           ice:2,
           fire:3,
           wind:2
       },
       sapphire:{
           lightning:2,
           ice:2,
           fire:3,
           wind:4
       }
   }
}


Un ejemplo de cuando utilizo eval:
Código (javascript) [Seleccionar]

ActionSkills = (type,element,operator)=>{
       if(type != "gems"){
           /*
               The buttons' group aren't gems, so all skills' type got by the specificed element's sub-objects are iterated, and each iteration
               gets skill's number and if the skill's type is 'speed' and operator is '+' the operator is become to '-'
               (because the speed substraction of speed's total count), else if the operator is '-', it is became in '+' (because the button is inactive).

               Finally is add/substraction the value get with the skill's total specificed. Thanks to eval()

               Also, if the button's group clicked is 'magic', apart from does previous it, this runs the function ActionGems()
           */
           for(skill in eval("$ELEMENTSPOINTS." + type + "." + element)){
               countSkill = eval("$ELEMENTSPOINTS." + type + "." + element + "." + skill);
               //console.log(skill + ":" + countSkill);
               (skill == "speed" && operator == " + ")?(operator = "-"):(skill == "speed" && operator == "-")?(operator = " + "):null;
               eval("$HERO.skills." + skill + "" + operator + "=" + countSkill);
           }

           (type == "magic")?ActionGems(type,element,operator):null;
       }else{
           /*
               As are gems, the operation is different. So this executes the function ActionGems()
           */
           ActionGems(type,element,operator);
       }
   }


Gracias de antemano
#37
Desarrollo Web / Re: Font zapfino
10 Enero 2021, 14:44 PM
Primero de todo debes de descargar la fuente y subirla a una carpeta de tu servidor web, (https://sp.maisfontes.com/download/cc3b189322314b9cd083fdbfd0e9a94e ), después ves a tu css y añades un @font-face

Código (css) [Seleccionar]

@font-face{
 font-family:"font-custom";
 src:url("path/zapfino.ttf");
}

h1{
 font-family:"font-custom";
}
#38
SI tu puedes acceder a internet desde el navegador, y no puedes hacer ping a google.com, puede ser que haya algún firewall entre medio que este bloqueando los paquetes ICMP al servidor/es de google.com

Te has fijado si al hacer ping a otro sitio te da?
#39
Bases de Datos / Re: solicito apoyo
31 Diciembre 2020, 15:36 PM
No podemos acceder a tu enlace, acceso denegado.
#40
Gracias chicos, entiendo que el inline no se recomienda, pero antes no veía otra forma de hacerlo. Mi archivo js es mucho más grande y complejo, porque la lista de jugadores es dinamico, declaro en un principio el array sin elementos y mientras añado los jugadores añado subarrays al array players.

Lo que he hecho es seleccionar todos los elementos con la clase close-player y con un bucle for hago los listening (no se me ocurrio....)

        list_ids=document.getElementsByClassName("close-player");
        for(x=0;x<=list_ids.length-1;x++){
            document.getElementById(list_ids[x].id).addEventListener("click",function(){
                players.splice(this.id,1);
                this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);
                console.log(players);
            });           
        }


P.D: El document.querySelector() no puede utilizarlo porque me funcionaba la primera vez que añado un jugador pero no los posteriores.