#include <mysql>
#define SQL_HOST "localhost"
#define SQL_USER "root"
#define SQL_PASS ""
#define SQL_DB "basetest"
SQL_HOST: Con esto, conectaremos a la ip del servidor que tiene el MySql, como usamos nuestro PC, colocamos localhost SQL_USER: Pues el Usuario del MySql SQL_PASS: La contraseсa del Usuario SQL_DB: Pues la Base de Datos que usaremos
stock ConectarMySQL()
{
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
mysql_debug(1);
if(mysql_ping() == 1)
{
printf("\t\t[MYSQL]: Conexion Satisfactoria (DataBase: '%s')\n", SQL_DB);
}
else
{
printf("\t\t[MYSQL]: ERROR. Conexion Fallida (DataBase: '%s')\n", SQL_DB);
SendRconCommand("exit");
}
return 1;
}
mysql_connect: Nos conectara con la base de datos. mysql_debug(1);: Con esto le estaremos diciendo al include/plugin que nos genere un archivos de texto, para todas las consultas que se realicen, por si da error, o para saber si se ejecuto bien mysql_ping(): nos revisa si nos conectamos o no.
CREATE TABLE IF NOT EXISTS NombreTabla (Variable Tipo, Variable Tipo, Etc...)
mysql_query("CREATE TABLE IF NOT EXISTS users (Id_User INT(5) NOT NULL AUTO_INCREMENT, Nick VARCHAR(34) NOT NULL, Pass VARCHAR(34) NOT NULL, PRIMARY KEY (Id_User))");
CREATE TABLE IF NOT EXISTS: Nos creara la tabla, si esta misma no existe. INT - VARCHAR: Con esto definimos el tipo de variable que se creara. AUTO_INCREMENT: Con esto definiremos que la variable Id_User espesara de 1, y por cada registro que se ejecute, sumara +1 al nuevo. Es como para tener control NOT NULL: Es para decirle a MySql, que esta variable no estarб Nula
mysql_query("ALTER TABLE users ADD GeneroSexual VARCHAR(50) NOT NULL");
ALTER TABLE: Nos indica que queremos modifica una tabla ADD: Para agregar una nueva variable a la tabla
enum Informacion
{
Nick[MAX_PLAYER_NAME],
Pass[34],
GeneroSexual[20],
};
new Users[MAX_PLAYERS][Informacion];
new NombreNick[MAX_PLAYERS][MAX_PLAYER_NAME]
El NombreNick, Se usara para guardar el nombre, mas adelante verбn el porque.
forward RegistrarUsuario(playerid, Nombre[], pass[]);
public RegistrarUsuario(playerid, Nombre[], pass[])
{
return 1;
}
INSERT INTO `users` (`Nick`, `Pass`) VALUES ([value-Nick],[value-Pass])
INSERT INTO: Le dice a mysql que queremos insertar nuevos valores a la tabla `users`: Nombre de la tabla a la que queremos insertar (`Nick`, `Pass`, `GeneroSexual`) : Estamos diciendo que esos son los valores que queremos insertar VALUES : Le dice a mysql que lo que viene son los valores a las variables anteriores ([value-Nick],[value-Pass],[value-GeneroSexual]): Son las variables que iran dentro de comillas simples '
new Insertar[256];
format(Insertar, 256, "INSERT INTO users (Nick, Pass) VALUES ('%s', '%s')", Nombre, pass);
mysql_query(Insertar);
printf("\t\t[MYSQL]: Cuenta Creada Satisfactoriamente. (Nombre, '%s' )", Nombre);
SendClientMessage(playerid, 0xFFFFFFff, " Tu cuenta ha sido creada satisfactoriamente");
Insertar: Sera la variable que contendrб la consulta format: Sera la funciуn que nos meterб las variables de Nombre, pass y sexo en la consulta mysql_query: Realizara la consulta printf: Nos mandara un mensaje con los datos, menos la pass del registro nuevo
Podrian colocar el siguiente codigo, al final del main, y si les genera la consulta correctamente, tendran listo el public RegistrarUsuario(0, "Politicos", "Idiotas");
forward IngresarUsuario(playerid, Nombre[], pass[]);
public IngresarUsuario(playerid, Nombre[], pass[])
{
return 1;
}
SELECT * FROM users WHERE Nick = 'Valor' AND Pass = 'Valor'
SELECT * FROM users: Le dice a mysql que vamos a Seleccionar (SELECT) todo (*) Desde (FROM) la tabla users WHERE Nick = 'Valor' : Con esto le diremos que con solo si los siguientes parбmetros son correctos AND Pass = 'Valor': Le dice a mysql que tanto como la variable Nick y(AND) la variable pass, deben de estar como se lo indicamos
new Insertar[256], GuardarStr[100];
format(Insertar, 256, "SELECT * FROM users WHERE Nick = '%s' AND Pass = '%s'", Nombre, pass);
mysql_query(Insertar);
mysql_store_result();
if(mysql_num_rows() != 0)
{
while(mysql_fetch_row_format(Insertar,"|"))
{
mysql_fetch_field_row(GuardarStr, "Nick");strmid(Users[playerid][Nick], GuardarStr, 0, strlen(GuardarStr), 255);
mysql_fetch_field_row(GuardarStr, "Pass");strmid(Users[playerid][Pass], GuardarStr, 0, strlen(GuardarStr), 255);
mysql_fetch_field_row(GuardarStr, "GeneroSexual");strmid(Users[playerid][GeneroSexual], GuardarStr, 0, strlen(GuardarStr), 255);
mysql_free_result();
}
SetPlayerName(playerid, Users[playerid][Nick]);
printf(" Alguien a ingresado correctamente" );
}
else
{
SendClientMessage(playerid, 0xFFFFFFff, " Tu nombre o Contraseсa Son incorrectos, o no existen en nuestra Base");
printf(" Alguien NO ingreso correctamente" );
}
Insertar: Guardara la Consulta GuardarStr: Nos guardara los datos que saquemos en las variables del jugador format: Nos metera las variables de Nombre y pass en la consulta mysql_query: Realizara la consulta mysql_store_result(): Nos guardara los datos que saquemos de la consulta if(mysql_num_rows() != 0): Si los datos no son correctos, la consulta nos devolverб Cero columnas y si es diferente a cero, el ingreso fue exitoso mysql_fetch_row_format(Insertar,"|"): Cuando sacamos los datos de la consulta, el formato es algo como esto: Variable|Otra Variable|Otra|Etc... mysql_fetch_field_row: No guardara en el primer parбmetro lo que saquemos del segundo parбmetro strmid: Nos insertara en la variable del jugador, lo que guardamos en el anterior item SetPlayerName: Le coloca el Nombre al jugador
IngresarUsuario(0, "Politicos", "Idiotas");
IngresarUsuario(0, "Politicos", "NoIdiotas");
#define Dialog_Ingreso 001
#define Dialog_Registro 002
#define Dialog_Sexual 003
#define Dialog_IngReg 004
new NombreE[MAX_PLAYER_NAME];
GetPlayerName(playerid, NombreE, sizeof(NombreE));
strmid(NombreNick[playerid], NombreE, 0, strlen(NombreE), 255);
ShowPlayerDialog(playerid, Dialog_IngReg, DIALOG_STYLE_LIST, " Registro o Ingreso", " >< Ingresar\n >< Registrar", "Aceptar", "Salir");
El GetPlayerName, almacenara el nombre en la variable NombreE y con el strmid lo meteremos es la variable NombreNick, ya muy pronto sabrбn el porque
if(!response) return Kick(playerid); // Esto sera por si dan salir, los kickeamos
if(Dialog_IngReg == dialogid)
{
if(listitem == 0) // Ingreso
{
}
else if(listitem == 1) // Registro
{
}
}
ShowPlayerDialog(playerid, Dialog_Ingreso, DIALOG_STYLE_INPUT, "Ingresar", "Por favor, en el siguiente campo, coloca la contraseсa de la cuenta a la cual quieres ingresar", "Siguiente", "Volver");
if(Dialog_Ingreso == dialogid)
{
}
if(!response) return ShowPlayerDialog(playerid, Dialog_IngReg, DIALOG_STYLE_LIST, " Registro o Ingreso", " >< Ingresar\n >< Registrar", "Aceptar", "Salir");
IngresarUsuario(playerid, NombreNick[playerid], inputtext);
!response: Si no respondio al dialogo, o le dio al boton 'Volver' nos enviara al dialogo de Ingresar o Registrar IngresarUsuario: Llamariamos al callback que anteriormente creamos para ingresar al jugador
Ahora ven para lo que usamos NombreNick, para ingresar el usuario, mas adelante, otro usos como para registrar, y hacer update a la cuenta sin causar bugs
ShowPlayerDialog(playerid, Dialog_Ingreso, DIALOG_STYLE_INPUT, "Ingresar", "Por favor, en el siguiente campo, coloca la contraseсa de la cuenta a la cual quieres ingresar\n Contraseсa Incorrecta", "Siguiente", "Volver");
new Comprobar[256];
format(Comprobar, 256, "SELECT * FROM users WHERE Nick = '%s'", NombreNick);
mysql_query(Comprobar);
mysql_store_result();
if(mysql_num_rows() == 0)
{
ShowPlayerDialog(playerid, Dialog_Registro, DIALOG_STYLE_INPUT, "Registrar", "Por favor, ingresa la contraseсa para tu cuenta", "Siguiente", "Volver");
}
else
{
SendClientMessage(playerid, 0xffffffff, " Tu nombre ya esta registrado, por favor, ahora ingresa a tu cuenta");
ShowPlayerDialog(playerid, Dialog_Ingreso, DIALOG_STYLE_INPUT, "Ingresar", "Por favor, en el siguiente campo, coloca la contraseсa de la cuenta a la cual quieres ingresar", "Siguiente", "Volver");
}
Comprobar: Sera la variable que tendrб la consulta format: La funcion queingresa a la variable Comprobar la consulta para ver si ya existe un usuario con ese nombre registrado mysql_query: Enviara la consulta mysql_store_result(): Guardara el resultado de la consulta mysql_num_rows() == 0: Si no existe ningъn usuario, nos mandara cero columnas y el usuario podra registrarse Lo que esta entre el else: Sera lo que mandara al user a ingresar, en ves de a registrarse
if(Dialog_IngReg == dialogid)
{
if(listitem == 0) // Ingreso
{
ShowPlayerDialog(playerid, Dialog_Ingreso, DIALOG_STYLE_INPUT, "Ingresar", "Por favor, en el siguiente campo, coloca la contraseсa de la cuenta a la cual quieres ingresar", "Siguiente", "Volver");
}
else if(listitem == 1) // Registro
{
new Comprobar[256];
format(Comprobar, 256, "SELECT * FROM users WHERE Nick = '%s'", NombreNick[playerid]);
mysql_query(Comprobar);
mysql_store_result();
if(mysql_num_rows() == 0)
{
ShowPlayerDialog(playerid, Dialog_Registro, DIALOG_STYLE_INPUT, "Registrar", "Por favor, ingresa la contraseсa para tu cuenta", "Siguiente", "Volver");
}
else
{
SendClientMessage(playerid, 0xffffffff, " Tu nombre ya esta registrado, por favor, ahora ingresa a tu cuenta");
ShowPlayerDialog(playerid, Dialog_Ingreso, DIALOG_STYLE_INPUT, "Ingresar", "Por favor, en el siguiente campo, coloca la contraseсa de la cuenta a la cual quieres ingresar", "Siguiente", "Volver");
}
}
}
if(Dialog_Registro == dialogid)
{
}
if(!response) return ShowPlayerDialog(playerid, Dialog_IngReg, DIALOG_STYLE_LIST, " Registro o Ingreso", " >< Ingresar\n >< Registrar", "Aceptar", "Salir");
RegistrarUsuario(playerid, NombreNick[playerid], inputtext);
UPDATE `tabla` SET `Variable` = 'Valor' WHERE `Nick` = 'NombreUser' |
UPDATE: Le decimos a MySql que queremos Modificar(Yo le digo Updatear) una tabla elejida SET `Variable` = 'Valor': Le diremos a MySql, que setearemos en una variable un valor. WHERE `Nick` = 'NombreUser':Le decimos que el valor updateado tendra que ser del usuario que escogemos |
new updateInt[256];
format(updateInt, sizeof(updateInt), "UPDATE `users` SET `GeneroSexual` = '%s' WHERE `Nick` = '%s'", Users[playerid][GeneroSexual], NombreNick[playerid]);
mysql_query(updateInt);
El NombreNick lo usamos, por que cuando uno se desconecta, y queremos guardar los datos, debemos saber el nombre del usuario, pero al usar GetPlayerName, no obtendremos nada, dado que el usuario ya esta desconectado, en cambio, como el nombre ya estaba guardado en la variable NombreNick, las variables se guardaran correctamente, y no tendremos la necesidad de crear un public que se repita para guardar las variables.
format:Setea las variables a la consulta mysql_query: Envнa la consulta |
Las consultas no estбn separadas en otro thread distinto, si la consulta se llega a colgar interrumpe todo el proceso del server y ocurrirнan esos segundos de lag que se freezea todo.
|
C:\X\gamemodes\X.pwn(42) : error 010: invalid function or declaration Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase 1 Error.
mysql_query("CREATE TABLE IF NOT EXISTS users (Id_User INT(5) NOT NULL AUTO_INCREMENT, Nick VARCHAR(34) NOT NULL, Pass VARCHAR(34) NOT NULL, PRIMARY KEY (Id_User))");
Buenas, al agregar mysql_query me aparece el siguiente error
Код:
C:\X\gamemodes\X.pwn(42) : error 010: invalid function or declaration Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase 1 Error. pawn Код:
Utilizo la versiуn R7 de mysql, probe a cambiar a R6 y a cambiar las variables por mysql_function_query teniendo la R7 y siguen apareciendo errores No se si es por que hay que aсadir algo mбs en el gm o modificar algo de esa linea, o por la libreria del mysql que tengo instalado Espero que alguien sepa solucionar esto Un saludo, y gracias de antemano |
Tengo un problema... Cuando abro el phpMyAdmin y no abre osea abre en mi navegador una pagina pero sale el tipico "Ops la pagina no existe" que puede ser lo ise talcual esta en el tuto... talves sea la instalacion? o que. xfa ayudenmen.
|
fijate ke lo hallas iniciado al phpMyAdmin , desde los iconos donde esta el reloj de la pc lo puedes encender.
|
Amigo y si ya tengo mi sistema de registro, como hago para que cuando alguien se registre se guarde en user.
tengo la db ya conectada y todo y ya creada la tabla pero no se hacer eso. la tabla tiene asi adentro userip username password. como guardo los datos?? |
Amigo y si ya tengo mi sistema de registro, como hago para que cuando alguien se registre se guarde en user.
tengo la db ya conectada y todo y ya creada la tabla pero no se hacer eso. la tabla tiene asi adentro userip username password. como guardo los datos?? |
INSERT INTO `users` (`Nick`, `Pass`) VALUES ([value-Nick],[value-Pass])
Ya que estamos... cuanto cobras por un tutorial normalmente?
|