Portal SAMP
[Ajuda] MySQL - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] MySQL (/showthread.php?tid=2967)



MySQL - RamossFx - 05/11/2022

Então, fiz isso ai abaixo mas por algum motivo não esta funcionando, alguém vê algum motivo aparente? Desde ja agradeço.

Código:
stock escrever_log(const log_type[], const log_text[]){
    new str[256], day, month, year, hour, minute, second;
    new query[56 + 15];

    gettime(hour, minute, second);
    getdate(year, month, day);

    format(str, sizeof(str), "[%02i/%02i/%04i - %02i:%02i:%02i]", day, month, year, hour, minute, second);
    format(query, sizeof(query), "INSERT INTO `%s` (`data_log`, `log`) VALUES ('%s', '%s')", log_type, str, log_text);
    mysql_tquery(connect_sql, query);
    return 1;
}



RE: MySQL - xbruno1000x - 05/11/2022

Lhe peço encarecidamente que publique códigos usando [ CODE ] //CODIGO AQUI!!! [ /CODE ](SEM OS ESPAÇOS) para que ele fique melhor formatado.

Sobre o problema:
Acredito que você possa utilizar as próprias funções de data do SQL. Usando GETDATE() você recebe o retorno da data e da hora atual. Se não der certo, fale aqui no tópico e iremos buscar alternativas.


RE: MySQL - RamossFx - 05/11/2022

(05/11/2022 20:35)xbruno1000x Escreveu: Lhe peço encarecidamente que publique códigos usando [ CODE ] //CODIGO AQUI!!! [ /CODE ](SEM OS ESPAÇOS) para que ele fique melhor formatado.

Sobre o problema:
Acredito que você possa utilizar as próprias funções de data do SQL. Usando GETDATE() você recebe o retorno da data e da hora atual. Se não der certo, fale aqui no tópico e iremos buscar alternativas.

Certo! Obrigado pela dica, tanto a questão da publicação do código, quanto a do problema.


RE: MySQL - Maycon_Felipe - 06/11/2022

new str[256], day, month, year, hour, minute, second;
new query[56 + 15];

Para começar você está dizendo que o tamanho da query é de '71'.. e está inserindo outros 256 caracteres dentro desses '71', errado.

Por ser uma query muito grande, não há problemas em utilizar um tamanho de log tão grande.
Código:
new query[800];


Utilize mysql_format, já é a formatação correta para textos SQL.
Utilize também, sempre '%e', isso evita possíveis SQL injection..
Código:
mysql_format(connect_sql, query, sizeof(query), "INSERT INTO `%e` (`data_log`, `log`) VALUES ('%e', '%e')", log_type, str, log_text);


//Para não restar duvidas se vai ou não utilizar muitos caracteres, após inserir as logs insira um printf para chegar o tamanho:
Código:
printf("Tamanho log: %d", strlen(query));



Consulte a wiki tmb, em futuras duvidas: https://github.com/pBlueG/SA-MP-MySQL/wiki


RE: MySQL - EmanuelFreitas - 07/11/2022

(05/11/2022 20:23)RamossFx Escreveu: Então, fiz isso ai abaixo mas por algum motivo não esta funcionando, alguém vê algum motivo aparente? Desde ja agradeço.

Código:
stock escrever_log(const log_type[], const log_text[]){
    new str[256], day, month, year, hour, minute, second;
    new query[56 + 15];

    gettime(hour, minute, second);
    getdate(year, month, day);

    format(str, sizeof(str), "[%02i/%02i/%04i - %02i:%02i:%02i]", day, month, year, hour, minute, second);
    format(query, sizeof(query), "INSERT INTO `%s` (`data_log`, `log`) VALUES ('%s', '%s')", log_type, str, log_text);
    mysql_tquery(connect_sql, query);
    return 1;
}

Outra coisa que você deveria usar é o gettime. É mais simples e eficaz. Ele te dá um valor Timestamp

Depois para informar ao jogador datas e horas te recomendo esta função:
Código PHP:
stock convertTimestamptimestamp_form=)
{
    timestamp -= 10800;
    new year=1970day=0month=0hour=0mins=0sec=0;

    new days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    new names_of_month[12][10] = {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"};
    new returnstring[32];

    while(timestamp>31622400){
        timestamp -= 31536000;
        if ( ((year == 0) && (year 100 != 0)) || (year 400 == 0) ) timestamp -= 86400;
        year++;
    }

    if ( ((year == 0) && (year 100 != 0)) || (year 400 == 0) )
        days_of_month[1] = 29;
    else
        days_of_month[1] = 28;


    while(timestamp>86400){
        timestamp -= 86400day++;
        if(day==days_of_month[month]) day=0month++;
    }

    while(timestamp>60){
        timestamp -= 60mins++;
        if( mins == 60mins=0hour++;
    }

    sec=timestamp;

    switch( _form ){
        case 1format(returnstring31"%02d/%02d/%d %02d:%02d:%02d"day+1month+1yearhourminssec);
        case 2format(returnstring31"%s %02d, %d, %02d:%02d:%02d"names_of_month[month],day+1,yearhourminssec);
        case 3format(returnstring31"%d %c%c%c %d, %02d:%02d"day+1,names_of_month[month][0],names_of_month[month][1],names_of_month[month][2], year,hour,mins);
        case 4format(returnstring31"%02d.%02d.%d-%02d:%02d:%02d"day+1month+1yearhourminssec);
        case 5format(returnstring31"%02d/%02d/%d"day+1month+1year);
        case 6format(returnstring31"%02d:%02d:%02d"hourminssec);
        default: format(returnstring31"%02d:%02d:%02d %02d/%02d/%d"hourminssecday+1month+1year);
    }

    return returnstring;