luqy Posted October 12, 2018 Share Posted October 12, 2018 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: Link to comment
TRtam Posted October 13, 2018 Share Posted October 13, 2018 (edited) 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 October 13, 2018 by TRtam 1 Link to comment
luqy Posted October 13, 2018 Author Share Posted October 13, 2018 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
luqy Posted October 14, 2018 Author Share Posted October 14, 2018 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
aka Blue Posted October 14, 2018 Share Posted October 14, 2018 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 1 Link to comment
luqy Posted October 14, 2018 Author Share Posted October 14, 2018 (edited) 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 October 14, 2018 by luqy Link to comment
aka Blue Posted October 14, 2018 Share Posted October 14, 2018 El result, como te digo, es una tabla. Si quieres comprobar si un nombre está registrado, comprueba la longitud de la tabla (como bien lo has hecho con el #). Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now