CMD:registrar(playerid, params[])
{
if(CheckAccountExist(playerid)) return SendClientMessage(playerid, COLOR_ROJO, "Esta cuenta se encuentra registrada, por favor usa /login [contraseсa] para ingresar.");
new pass[24];
if(sscanf(params,"s[24]",pass)) return UsoCorrecto(playerid, "/registrar [contraseсa]");
/*if(strval(pass) < 3 || strval(pass) > 24) return Error(playerid, "La contraseсa debe ser mayor a 4 y menor de 24.");*/
new sas[128], DBResult:result;
format(sas, sizeof(sas), "INSERT INTO `datos` (`ID` INTEGER PRIMARY KEY AUTOINCREMENT,`Nombre`,`Password`,`Admin`,`Score`,`Matados`,`Muertes`, `Baneado`) VALUES ('%q', '%q', 0, 0, 0, 0, 0)",NombreJugador(playerid),pass);
db_query(usuarios,sas);
db_free_result(result);
new asd[64];
format(asd, sizeof(asd), "{848484}%s ha ingresado al servidor.",NombreJugador(playerid));
SendClientMessageToAll(-1, asd);
return 1;
}
new sas[270];
CMD:registrar(playerid, params[])
{
if(CheckAccountExist(playerid)) return SendClientMessage(playerid, COLOR_ROJO, "Esta cuenta se encuentra registrada, por favor usa /login [contraseсa] para ingresar.");
new pass[24];
if(sscanf(params,"s[24]",pass)) return UsoCorrecto(playerid, "/registrar [contraseсa]");
if(strlen(pass) < 4 || strlen(pass) > 23) return Error(playerid, "La contraseсa debe ser mayor a 4 y menor de 24."); // <-- strval convierte un texto en nъmero, y lo que tъ quieres es contar los caracteres. Para eso estб la funciуn strlen
new sas[270], DBResult:result;
format(sas, sizeof(sas), "INSERT INTO `datos` (`ID` INTEGER PRIMARY KEY AUTOINCREMENT,`Nombre`,`Password`,`Admin`,`Score`,`Matados`,`Muertes`, `Baneado`) VALUES ('%q', '%q', 0, 0, 0, 0, 0)",NombreJugador(playerid),pass);
result = db_query(usuarios,sas);
db_free_result(result);
format(sas, sizeof(sas), "{848484}%s ha ingresado al servidor.",NombreJugador(playerid));
SendClientMessageToAll(-1, sas);
return 1;
}
|
Lo mбs probable es que la consulta no es enviada completamente. їPor quй?
Tu variable sas solo almacena 128 caracteres, y en la cadena de la consulta hay 162. Y eso sin contar que en runtime se le aсade el nombre del jugador y la contraseсa. Te recomiendo que lo modifiques, para que te funcione bien y para optimizar, ya que si utilizaste 128 de seguro que lo hiciste para optimizar, pero se te fue de la mano xD. En la consulta tienes 162 caracteres, asн que sumale el maximo de la variable pass(24) y el del nombre(tambiйn 24). Esto te darнa 270. PHP код:
[Consejo] |
db_free_result(db_query(usuarios, "CREATE TABLE IF NOT EXISTS `datos` \
(`ID` INTEGER PRIMARY KEY AUTOINCREMENT, \
`Nombre` VARCHAR(24) NOT NULL, \
`Password` VARCHAR(24) NOT NULL, \
`Admin` INTEGER NOT NULL, \
`Score` INTEGER NOT NULL, \
`Matados` INTEGER NOT NULL, \
`Muertes` INTEGER NOT NULL, \
`Baneado` INTEGER NOT NULL)"));
|
INSERT INTO `datos` (`ID`,`Nombre`,`Password`,`Admin`,`Score`,`Matados `,`Muertes`, `Baneado`) VALUES (null,'%q', '%q', 0, 0, 0, 0, 0)
la PK al ser autoincrement solo pon NULL |
CMD:registrar(playerid, params[])
{
if(CheckAccountExist(playerid))return Error(playerid, "Esta cuenta se encuentra registrada, por favor usa /login [contraseсa] para ingresar.");
new clave[24], tmp[36 + 24], consulta[98 + 48], DBResult:resultado;
if(sscanf(params,"s[24]",clave))return UsoCorrecto(playerid, "/registrar [contraseсa]");
if(strlen(clave) < 3 || strlen(clave) > 24)return Error(playerid, "La contraseсa debe ser mayor a 4 y menor de 24.");
format(consulta,sizeof(consulta),"INSERT INTO datos(Nombre,Password,Admin,Score,Matados,Muertes,Baneado) VALUES('%s','%s',0,0,0,0,0)",NombreJugador(playerid),clave);
resultado = db_query(usuarios,consulta);
db_free_result(resultado);
format(tmp,sizeof(tmp),"{848484}%s ha ingresado al servidor.",NombreJugador(playerid));
SendClientMessageToAll(-1,tmp);
return 1;
}
|
Verifica que 'usuarios' sea la direccion de tu db(scriptfiles/tudb.db).
PHP код:
|
format(sas, sizeof(sas), "INSERT INTO `datos` (`Nombre`,`Password`,`Admin`,`Score`,`Matados`,`Muertes`, `Baneado`) VALUES ('%q', '%q', 0, 0, 0, 0, 0)",NombreJugador(playerid),pass);
|
їEn el log no te aparece ningъn mensaje que pueda ayudarnos a detectar el error?
El tamaсo del buffer de la consutla ya sabemos que es muy pequeсo, y al realizar el insert no tienes que poner el campo ID, con el autoincrement no es necesario. pawn Код:
|
new sas[270], DBResult:result;
format(sas, sizeof(sas), "INSERT INTO `datos` (`Nombre`,`Password`,`Admin`,`Score`,`Matados`,`Muertes`, `Baneado`) VALUES ('%q', '%q', 0, 0, 0, 0, 0)",NombreJugador(playerid),pass);
result = db_query(usuarios,sas);
db_free_result(result);
if(db_num_rows(result) >= 1)
{
print("Una nueva cuenta ha sido creada.");
}
else
{
print("Algo ha ocurrido y la cuenta no a sido creada.");
}