Ir para conteúdo
Fórum Script Brasil
  • 0

Dados Vindo Do Scanf


mestre fyoda

Pergunta

Posts Recomendados

  • 0

porque eu testei coloando assim :

mysql_query(&conexao,"INSERT INTO cadastros(nome) values( 'Rafael Fernandes');");

e inseriu o rafael Fernandes

mas ai quando coloco assim

mysql_query(&conexao,"INSERT INTO cadastros(nome) values( ' + nome + ');");

la no meu banco de dados aparece na coluna nome + nome + .

o que esta de errado ?

Link para o comentário
Compartilhar em outros sites

  • 0

Ah sim, claro. O que está errado é que você está colocando tudo dentro da string e não concatenando. Veja o exemplo abaixo:

    char sql[100];
    char nome[] = "Teste";
    
    sql[0] = '\0'; // Zerando a string
    strcat(sql, "INSERT INTO cadastros(nome) values('");
    strcat(sql, nome);
    strcat(sql, "');");
    
    printf("%s\n", sql);

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

o que esta dando de errado aqui ?

mysql_query(&conexao,"INSERT INTO cadastros(nome) values(' " nome " ' ) ;");

46 C:\Dev-Cpp\projeto.cpp expected `)' before "nome" ?

Está errado que você não pode fazer isso. O que um espaço entre uma string e uma variável significa para o compilador? Nada, e é um erro de sintaxe. Você precisará utilizar strcat() para juntar as strings (ou o operador + se for uma string de C++, o que não parece, já que você está utilizando scanf).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

ixi mano eu não consegui , desculpa a minha ignorancia :) mas eu nunca mexi com strcat .

ai esta o meu codigo de conexao ao banco de dados . sera que alguém poderia me ajudar a faser o certo ?

#include <windows.h>

#include <stdio.h>

#include <mysql/mysql.h>

int main(int)

{

MYSQL conexao;

mysql_init(&conexao);

if ( mysql_real_connect(&conexao, "localhost", "root", "*******", "cadastro", 0, NULL, 0) )

{

printf("conectado com sucesso!\n");

mysql_query(&conexao,"INSERT INTO aprendendo(nome, login) values(Rafael Fernandes D razio', 'M');");

mysql_close(&conexao);

}

else

{

printf("Falha de conexao\n");

printf("Erro %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));

}

}

Link para o comentário
Compartilhar em outros sites

  • 0

Acredito que somar duas strings em C seja o equivalente a somar os ponteiros que apontam para os primeiros caracteres de cada uma.. mas ainda não testei. Bem, se for isso mesmo, não faz muito sentido. Você só vai conseguir alguns Segmentation Faults. :)

Faça como o Graymalkin sugeriu.

ps.: Há outra solução:

    char string[50];
    sprintf( string, "SELECT %s FROM %s WHERE %s", string1, string2, string3 );

Mas tenha cuidado! Esse código está vulnerável a SQL Injection.

Aconselho dar uma lida sobre essa vulnerabilidade antes de continuar programando..

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0
ixi mano eu não consegui , desculpa a minha ignorancia :) mas eu nunca mexi com strcat .

ai esta o meu codigo de conexao ao banco de dados . sera que alguém poderia me ajudar a faser o certo ?

Basicamente seu programa teria que ser assim:

#include <windows.h>
#include <stdio.h>
#include <mysql/mysql.h>

int main(int)
{
  MYSQL conexao;

  mysql_init(&conexao);
  if ( mysql_real_connect(&conexao, "localhost", "root", "*******", "cadastro", 0, NULL, 0) )
  {
    printf("conectado com sucesso!\n");

    char sql[100];
    char nome[50];
    char login[50];
        
    sql[0] = '\0'; // Zerando a string
    nome[0] = '\0';
    login[0] = '\0';
    
    printf("Digite o nome: ");
    scanf("%s", &nome);
    printf("Digite o login: ");
    scanf("%s", &login);
    
    strcat(sql, "INSERT INTO aprendendo(nome, login) VALUES ('");
    strcat(sql, nome);
    strcat(sql, "', '");
    strcat(sql, login);
    strcat(sql, "');");

    mysql_query(&conexao, sql);

    mysql_close(&conexao);
  }
  else
  {
    printf("Falha de conexao\n");
    printf("Erro %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));
  }
}

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
porque presizo zera as strings pra funcionar ?

Como na verdade não existem strings em C, mas sim vetores de chars, foi necessário definir um caracter para determinar o final da mesma. E, no caso, o final de uma "string" em C é marcado com um caracter de código 0 ('\0'). Assim que você declara um vetor de chars ele fica com lixo da memória, portanto o primeiro caracter pode não ser um '\0' (para indicar que a string está vazia). E, strcat() vai procurar pelo final da string para poder concatenar. O que a gente faz ao colocar '\0' no início do vetor é justamente dizer que a string está vazia.

desse jeito que o Graymalkin passou é seguro ?

De fato não é seguro mas aí vai muito do ambiente em que você vai utilizar. Vai existir algum usuário malicioso e com conhecimento suficiente para explorar essa falha?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

TO com um probleminha , quando vou cadastrar eu digito tudo que presizo e depois não aparece na tela Dados inseridos com sucesso! . porque ? não esta incluindo no banco de dados .

verifiquei e esta tudo ok o nome da tabela .

int Inserir()

{

char nome[50],endereco[100],numero[6],bairro[50],estado[20],cpf[15],rg[14],agencia[5],numero_conta[8],sql[100],repetir;

while( repetir != 'n' ) {

clrscr();

sql[0] = '\0'; // Zerando a string

nome[0] = '\0';endereco[0] = '\0';numero[0] = '\0';bairro[0] = '\0';estado[0] = '\0';cpf[0] = '\0';rg[0] = '\0';agencia[0] = '\0';numero_conta[0] = '\0';

printf(" \n\n \t\t\t Formulario de Cadastro \n");

printf(" \n\n\n\n \t\t\t Nome : ");

gets(nome);

printf(" \n\n\n\n \t\t\t Endereco : ");

gets(endereco);

printf(" \n\n\n\n \t\t\t Nº : ");

gets(numero);

printf(" \n\n\n\n \t\t\t Bairro : ");

gets(bairro);

printf(" \n\n\n\n \t\t\t Estado : ");

gets(estado);

printf(" \n\n\n\n \t\t\t CPF : ");

gets(cpf);

printf(" \n\n\n\n \t\t\t RG : ");

gets(rg);

printf(" \n\n\n\n \t\t\t Agencia : ");

gets(agencia);

printf(" \n\n\n\n \t\t\t Nº Conta : ");

gets(numero_conta);

strcat(sql, "INSERT INTO cadastro(nome,endereco,numero,bairro,estado,cpf,rg,agencia,numero_conta) values('");

strcat(sql, nome);

strcat(sql, "', '");

strcat(sql, endereco);

strcat(sql, "', '");

strcat(sql, numero);

strcat(sql, "', '");

strcat(sql, bairro);

strcat(sql, "', '");

strcat(sql, estado);

strcat(sql, "', '");

strcat(sql, cpf);

strcat(sql, "', '");

strcat(sql, rg);

strcat(sql, "', '");

strcat(sql, agencia);

strcat(sql, "', '");

strcat(sql, numero_conta);

strcat(sql, "');");

mysql_query(&conexao, sql);

printf(" \n\n\n\n \t\t\t Dados inseridos com sucesso! ");

printf(" \n\n\n\n \t\t Deseja cadastrar mais dados ? (s/n) : ");

repetir = getch();

}//fecha while

mysql_close(&conexao);

}// fecha função Inserir()

/* Fim da função que Insere dados cadastrais */

Link para o comentário
Compartilhar em outros sites

  • 0

O tamanho da SQL gerada realmente cabe em 100 caracteres? Talvez ela esteja ficando maior do que isso, não?

Outra coisa... por que você fecha a conexão ao final desta função? A idéia não é manter a conexão aberta o tempo todo enquanto o programa estiver sendo executado?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

to com probleminha no meu codigo , eu coloquei 9 campos para o usuario digita e ocupou toda a tela e deceu um pouco ( DOS em fullscreen) , ai o meu codigo pede para que usuario digite sim para voltar a incluir dados ou n pra voltar ao menu principal .

qualquer das duas opções escolhidas , fica na tela o codigo que o cliente incluiu , a tela fica suja e essa sujera é de ação anterior .

Link para o comentário
Compartilhar em outros sites

  • 0

limpou a tela mas limpou uma parte , e a parte de baixo não limpou .

Ah, é no Windows XP? Se for, ele exibe mais linhas do que o normal, e realmente pode ser que o clrscr() não as limpe. Mas, você já tentou fazer com o system("cls")?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
deu certo Graymalkin.

:)

eu tenho uma duvida, como faço para deixar o texto digitado em letra maiuscula ?

eu gostaria de fazer assim , você digita a letra e ela já sai em maiuscula . tem como ?

Sim, mas acho que não dá pra fazer com o scanf(). Veja um exemplo utilizando getch() e putch():

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio2.h>

int main()
{
    char c;

    printf("Digite o nome: ");
    
    while (c!=13)
    {
          c = getch();
          putch(toupper(c));
    }
}

outra coisa, no strcat não insere int , como eu faço ?

Você tem que primeiro transformar o inteiro em um array de chars (em uma "string"). Para isso existe a função itoa().

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
um probleminha , ali no codigo só da pra digita uma letra e depois vai pro proximo campo .

Não, dá pra digitar *quantas letras você quiser* até pressionar o ENTER. Por isso é necessário aquele while.

como faço para usar o toupper usando o gets(campo) ?

Não creio que isso seja possível. Pelo menos não da maneira que você quer.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

existe alguma maneira de ativar o CAPSLOOK AUTOMATICAMNETE ?

eu to fasendo assim :

printf("Digite seu cpf : ");

gets(cpf);

e depois trato o campo do cpf colocando pontos e traços nos lugares . Eu gostaria de colocar o cpf atualizado com os pontos e traços aonde foi digitado o cpf .

tem como ?

uso o devcpp .

Link para o comentário
Compartilhar em outros sites

  • 0

existe alguma maneira de ativar o CAPSLOOK AUTOMATICAMNETE ?

Isso eu realmente não sei.

eu to fasendo assim :

printf("Digite seu cpf : ");

gets(cpf);

e depois trato o campo do cpf colocando pontos e traços nos lugares . Eu gostaria de colocar o cpf atualizado com os pontos e traços aonde foi digitado o cpf .

tem como ?

uso o devcpp .

Use gotoxy() para ir para a posição desejada e colocar o CPF corretamente. Mas, por que você não tenta já fazer uma máscara no momento da digitação? (Conforme eu disse aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=77629). Iria ficar bem mais "elegante".

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...