Jump to content

[Consulta] SQLite


luqy

Recommended Posts

Hola, qué tal?

Quiero hacer un comando que sea /registrarusuario, para poder registrar a un user en la base de datos.

El problema es que lo ejecuto, osea escribo el comando dentro del server y se registra cualquier cosa en la base de datos.

(de paso quería consultar, se puede ejecutar un comando, o crear un comando para la consola del server?)

En fin no sé si lo estoy haciendo bien, aqúi dejo el código:

test_db = dbConnect("sqlite", "users.db")

function connect()
    if (test_db) then 
        outputDebugString("Conexión a la base de datos con éxito")
    else 
        outputDebugString("Conexión a la base de datos falló")
    end
end

function createTable()
    local cTable = dbQuery(test_db, "CREATE TABLE IF NOT EXISTS players (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, password TEXT)")
    dbFree(cTable)
end

function registerPlayer(username, pass)
    local qh = dbQuery(test_db, "INSERT INTO players (name, password) VALUES (?, ?)", username, pass)
    dbFree(qh)
end 

addEventHandler("onResourceStart", resourceRoot, connect)
addEventHandler("onResourceStart", resourceRoot, createTable)

addCommandHandler("registrarusuario", registerPlayer)

Y esto es lo que se registra en la base de datos:

kecQq6x.jpg

 

 

 

Link to comment

Cuando le añades un comando a una funcion, esta funcion pasa a tener los siguientes argumentos: thePlayer ( el jugador que ejecuto el comando ), commandName ( el nombre del comando ), y los argumentos que en tu caso seria username y pass. Osea que tu funcion quedaria asi:

function registerPlayer ( thePlayer, commandName, username, pass )

Es por eso que en tu database en lugar de guardar el username no guarda nada, y en pass lo que guarda es el nombre del comando

Edited by TRtam
  • Thanks 1
Link to comment
4 minutes ago, TRtam said:

Cuando le añades un comando a una funcion, esta funcion pasa a tener los siguientes argumentos: thePlayer ( el jugador que ejecuto el comando ), commandName ( el nombre del comando ), y los argumentos que en tu caso seria username y pass. Osea que tu funcion quedaria asi:


function registerPlayer ( thePlayer, commandName, username, pass )

Es por eso que en tu database en lugar de guardar el username no guarda nada, y en pass lo que guarda es el nombre del comando

Gracias!!

Ahí pude solucionarlo

Link to comment

Cómo puedo saber si un usuario ya está registrado?

Busqué en el foro y no hay mucha info sobre el sqlite :(

Intente esto pero no funciona:

function registerPlayer(thePlayer, command, nameplayer, pass)
    if (nameplayer and pass) then
        local exists = dbQuery(test_db, "SELECT * FROM players WHERE name = ?", nameplayer)
        local result = dbPoll(exists, -1) 

        if (result == nameplayer) then 
            outputChatBox("Este nombre ya está registrado")
            return 
        end

        local qh = dbQuery(test_db, "INSERT INTO players (name, password) VALUES(?, ?)", nameplayer, pass)
        dbFree(qh)
        outputChatBox("¡Has creado un usuario nuevo!")
    else 
        outputChatBox("Usa: registrarusuario [username] [password]")
    end
end 

 

Link to comment
4 hours ago, aka Blue said:

El result no te devuelve el nombre del jugador (en este caso), te devuelve una tabla con todos los datos si es encontrado el nombre

Si fuera así,

no bastaría con colocarlo así?

local exists = dbQuery(test_db, "SELECT * FROM players WHERE name = ?", nameplayer)
        local result = dbPoll(exists, -1) 

        if (result) then 
            outputChatBox("Este nombre ya está registrado")
            return 
        end

Sin embargo, no me funciona así, porque cualquier nombre que ingrese en el comando es como si lo encontrara en la base de datos, osea como si estuvieran todos registrados.

Al final lo solucione agregando esto al if:

if (result and #result ~= 0) then 

Pero no entiendo bien como funciona. Sé para que sirve el operador #, pero no entiendo cómo se aplica a la tabla y en qué cambia la lógica anterior

Gracias!!

Edited by luqy
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...