Jump to content
  • 0

Question

Estou fazendo um trabalho da faculdade e estou com vários problemas "bestas" mas que não consigo resolver. 

É um sistema para uma biblioteca, que possui os menus: Usuario, Livros, Editoras e Emprestimos. (E em cada um deles, sub-menus com cadastrar, alterar, excluir e listar)

Comecei fazendo pelo menu usuario. Ele cadastra e lista os cadastros, o código do usuario é inserido sozinho.
ERRO 1: Quando inicio o programa, digito 1 pra entrar no menu Usuario, e 1 pra cadastrar (nessa parte, eu tenho que digitar 1, dar enter e digitar 1 novamente, só assim ele entra no sub-menu de cadastro. Acontece a mesma coisa para todos os outros menus.

ERRO 1.1: Quando eu listo os cadastros, ele sempre mostra um mais, como o chamado "lixo", mesmo usando fflush.

ERRO 2: Para alterar o cadastro do usuario, preciso que o usuario insira o codigo, verificar se é igual ao cadastrado e só assim alterar, mas ele cai sempre no else.


 

/*
 ============================================================================
 Name        : biblioteca-mayara.c
 Author      : Mayara 
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int codUsuario,cpf;
    char nomeUsuario[20];
}usuario;

//INICIO FUNCOES
//FUNCAO QUE NAO RETORNA NEM RECEBE NADA, SÓ IMPRIMI O CABECALHO
void cabecalho () {
    printf ("\t\t ========================================== \n");
    printf ("\t\t = SISTEMA DE GERENCIAMENTO DE BIBLIOTECA =\n");
    printf ("\t\t ====  DESENVOLVIDO POR MAYARA ANDRES  ==== \n");
    printf ("\t\t ========================================== \n");
}
//FUNCAO QUE RECEBE A OPCAO DO MENU E RETORNA A MESMA
int menuPrincipal () {
    int opMP = 0;
    printf ("\t\t\t\t MENU PRINCIPAL \n ");
    printf ("\t\t\t\t 1 - Usuarios \n");
    printf ("\t\t\t\t 2 - Livros \n");
    printf ("\t\t\t\t 3 - Editoras \n");
    printf ("\t\t\t\t 4 - Emprestimos \n");
    printf ("\t\t\t\t 5 - Sair \n");
    scanf ("%d", &opMP);
    return opMP;
}
//FUNCAO QUE RECEBE A OPCAO DO MENU DE USUARIOS E RETORNA A MESMA
int menuUsuario () {
    int opMU = 0;
    printf ("\t\t\t\t 1 - Cadastrar \n");
    printf ("\t\t\t\t 2 - Listar \n");
    printf ("\t\t\t\t 3 - Alterar \n");
    printf ("\t\t\t\t 4 - Excluir \n");
    printf ("\t\t\t\t 5 - Sair \n");
    scanf ("%d", &opMU);
    }
//FUNCAO PARA ZERAR O VETOR DE USUARIOS
void zerarVetor (usuario *vet) {
    int i;
    for (i=0;i<20;i++) {
        vet.codUsuario = 0;
        vet.cpf = 0;
    }
}


//FUNCAO QUE RECEBE O VETOR E RETORNA EM QUE POSICAO DO VETOR
//FOI INSERIDO O ULTIMO USUARIO
int retornaUltPosicao (usuario *vet) {
    int i=0;
    //verifica se o vetor na posicao i é maior que zero
    //se for maior que zero, tem usuario cadastrado
    //acrescenta um
    while(vet[i+1].codUsuario > 0) {
        i++;
    }
    //sai do loop e retorna a ultima posicao encontrada
    return i+1;
}

//funcao para cadastro de usuarios
void cadastrarUsuario (usuario *vet) {
    int i = 0;
    //busca a ultima posicao cadastrada
    i = retornaUltPosicao(vet);
    /*if (i == 0) {
        i = 1;
    }*/
    //delimitar para 20 o numero de registros
    if (i == 20) {
        printf ("Limite de usuarios atingido \n");
        system ("PAUSE");
        return;
    }
    //aqui começa o cadastro
    printf (" \t\t\t\tCADASTRAR USUARIO:  \n");
    printf ("\t\t\t\t----------------------\n");
    printf ("\n\n\t\t\t\tCodigo do usuario: %d \n",i);
   // fflush (stdin);
    vet.codUsuario = i;
    printf ("\n \t\t\t\tDigite o nome do usuario: ");
    fflush (stdin);
    gets (vet.nomeUsuario);

    printf ("\n \t\t\t\tDigite o cpf do usuario: ");
    //fflush (stdin);
    scanf ("%d", &vet.cpf);
    printf ("\n\t\t\t\tUsuario cadastrado com sucesso!\n");
    system ("PAUSE");
}
void listaUsuarios (usuario *vet) {
    int i;
    printf (" \t\t\t\tUSUARIOS CADASTRADOS:  \n");
    printf ("\t\t ==========================================\n");
    for (i=1;i<=retornaUltPosicao(vet);i++) {
    printf ("\n\t\t\t\t Usuario Numero: %d",i);
    printf ("\n\t\t\t\t  Cod: %d", vet.codUsuario);
    printf ("\n\t\t\t\t  Nome: %s ", vet.nomeUsuario);
    printf ("\n\t\t\t\t  CPF: %d  ", vet.cpf);
    printf ("\n \n");
    }
    system ("PAUSE");
}
void excluirUsuario (usuario *vet) {
    int i,cod;
    printf("Digite o codigo do usuario: ");
    scanf("%d", &cod);
    /*for (i=0;i<20;i++) {
        if (vet.codUsuario == cod) {
            vet.nomeUsuario = "";
            vet.cpf = "";
        }*/
    }
}
void alterarUsuario (usuario *vet) {
    int i,cod;
        printf("Digite o codigo do usuario: ");
        scanf("%d", &cod);
    for (i=0;i<20;i++) {
    //CAI SEMPRE NO ELSE
    if (vet.codUsuario == cod) {
        printf("Digite o nome: ");
        fflush(stdin);
        gets(vet.nomeUsuario);
        printf("\n");
        printf("Digite o cpf: ");
        scanf("%d", vet.cpf);
        printf("Usuario alterado com sucesso!");
    }
    else {
            printf("Codigo invalido \n");
    }
    system ("pause");
    }
}
//FIM FUNCOES

int main() {
    //vetor do tipo usuario de 20 posicoes
    usuario vet[20];
  
    //variavel pra usar no switch
    int opEscolhida;
    //chamando o zerar vetor USUARIOS
    zerarVetor(vet);
   
    //while pra repetir
    while (1==1) {
        //limpa a tela
        system ("CLS");
        //chama o cabeçalho
        cabecalho();
        //op recebe o que foi escolhido no menu
        opEscolhida = menuPrincipal();
        switch (opEscolhida) {
        case 1:
        //limpa a tela
        system("CLS");
        //chama o cabecalho
        cabecalho();
        //printf pra mostrar qual o menu
        printf ("\t\t\t\t MENU USUARIOS \n");
        //chama o menu de usuarios
        menuUsuario(vet);
        int opmenuusuario;
        scanf("%d", &opmenuusuario);
        if (opmenuusuario == 1) {
            system ("CLS");
            cabecalho();
            cadastrarUsuario(vet);
        }
        if (opmenuusuario == 2) {
            system ("CLS");
            cabecalho();
            listaUsuarios(vet);
        }
        if (opmenuusuario == 3) {
            system ("CLS");
            cabecalho();
            alterarUsuario(vet);
        }
        /*if (opmenuusuario == 4) {
            system ("CLS");
            cabecalho();
            excluiUsuario (vet);
        }*/
        break;
        case 2:
        //limpa a tela
        system("CLS");
        //chama o cabecalho
        cabecalho();
        //printf pra mostrar qual o menu
        printf ("\t\t\t\t MENU LIVROS \n");
        //chama o menu de livros
        menuLivro(vet2);
        break;
        case 3:
        //limpa a tela
        system("CLS");
        //chama o cabecalho
        cabecalho();
        //printf pra mostrar qual o menu
        printf ("\t\t\t\t MENU EDITORA \n");
        //chama o menu de editoras
        menuEditora(vet3);
        break;
        case 4:
        //limpa a tela
        system("CLS");
        //chama o cabecalho
        cabecalho();
        //printf pra mostrar qual o menu
        printf ("\t\t\t\t MENU EMPRESTIMOS \n");
        //chama o menu de emprestimos
        menuEmprestimo(vet4);
        break;
        case 5:
            printf("VOCE ESCOLHEU SAIR DO PROGRAMA!\n");
            printf("\n\n");
            system ("PAUSE");
        /*
        default:
            printf("OPCAO INVALIDA, POR FAVOR SELECIONE UM ITEM DO MENU");
            printf("\n\n");
            system ("PAUSE");*/
        }//FECHA SWITCH
    }//FECHA WHILE
}//FECHA MAIN


 

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Não se usa fflush na entrada padrão (comportamento indefinido).
Gets tem o problema de buffer overflow.

 

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

#define MAX_NOME 20
#define MAX_CPF 12
#define MAX_USUARIOS 20

enum OpcoesPrincipais{USUARIOS = 1, LIVROS, EDITORAS, EMPRESTIMOS, SAIR};
enum OpcoesUsuarios{CADASTRAR = 1, LISTAR, ALTERAR, EXCLUIR};

typedef struct {
  int codUsuario;
  char cpf[MAX_CPF];
  char nomeUsuario[MAX_NOME];
} usuario;


void zerarVetor (usuario *vet) {
  int i;
  for (i=0;i<MAX_USUARIOS;i++) {
    vet[i].codUsuario = -1;
    strcpy(vet[i].cpf, "");
    strcpy(vet[i].nomeUsuario, "");
  }
}

void cabecalho () {
  printf ("\t\t ========================================== \n");
  printf ("\t\t = SISTEMA DE GERENCIAMENTO DE BIBLIOTECA =\n");
  printf ("\t\t ====  DESENVOLVIDO POR MAYARA ANDRES  ==== \n");
  printf ("\t\t ========================================== \n");
}


int menuPrincipal () {
  int opMP = 0;
  printf ("\t\t\t\t MENU PRINCIPAL \n ");
  printf ("\t\t\t\t %d - Usuarios \n", USUARIOS);
  printf ("\t\t\t\t %d - Livros \n", LIVROS);
  printf ("\t\t\t\t %d - Editoras \n", EDITORAS);
  printf ("\t\t\t\t %d - Emprestimos \n", EMPRESTIMOS);
  printf ("\t\t\t\t %d - Sair \n", SAIR);
  scanf ("%d%*c", &opMP);
  return opMP;
}

int menuSecundario () {
  printf ("\t\t\t\t %d - Cadastrar \n", CADASTRAR);
  printf ("\t\t\t\t %d - Listar \n", LISTAR);
  printf ("\t\t\t\t %d - Alterar \n", ALTERAR);
  printf ("\t\t\t\t %d - Excluir \n", EXCLUIR);
  printf ("\t\t\t\t %d - Sair \n", SAIR);
}


int retornaUltimaPosicao (usuario *vet) {
  int i;
  for(i=0; i<MAX_USUARIOS && vet[i].codUsuario != -1; i++); 
  return i;
}

void lerUsuario(int pos, usuario * vet) {
  printf ("\n \t\t\t\tDigite o nome do usuario: ");
  fgets(vet[pos].nomeUsuario, MAX_NOME, stdin);
    
  printf ("\n \t\t\t\tDigite o cpf do usuario: ");
  fgets(vet[pos].cpf, MAX_CPF, stdin);
  vet[pos].cpf[MAX_CPF-1] = '\0';
}

void cadastrarUsuario (usuario *vet) {
  int i = 0;
  i = retornaUltimaPosicao(vet);
 
  if (i == MAX_USUARIOS) {
    printf ("Limite de usuarios atingido \n");
  } else {
  
    printf (" \t\t\t\tCADASTRAR USUARIO:  \n");
    printf ("\t\t\t\t----------------------\n");
    printf ("\n\n\t\t\t\tCodigo do usuario: %d \n",i);
    vet[i].codUsuario = i;
    
    lerUsuario(i, vet);
    
    printf ("\n\t\t\t\tUsuario cadastrado com sucesso!\n");
    
  }
}

void listaUsuarios (usuario *vet) {
  printf (" \t\t\t\tUSUARIOS CADASTRADOS:  \n");
  printf ("\t\t ==========================================\n");
  for(int i=0; i<MAX_USUARIOS; i++) {
    if (vet[i].codUsuario != -1) {
      printf ("\n\t\t\t\t Usuario Numero: %d",i);
      printf ("\n\t\t\t\t  Cod: %d", vet[i].codUsuario);
      printf ("\n\t\t\t\t  Nome: %s ", vet[i].nomeUsuario);
      printf ("\n\t\t\t\t  CPF: %s  ", vet[i].cpf);
      printf ("\n \n");
    }
  }
}


int pesquisarUsuario(int codigo, usuario* vet) {
  int i;
  for(i=0; i < MAX_USUARIOS; i++) {
    if (vet[i].codUsuario == codigo) break;
  }
  
  return i;
}
void alterarUsuario (usuario *vet) {
  int cod;
  printf("Digite o codigo do usuario: ");
  scanf("%d%*c", &cod);
  
  int pos = pesquisarUsuario(cod, vet);
  
  if (pos >= MAX_USUARIOS) {
    puts("Usuário não encontrado.");
  } else {
    lerUsuario(pos, vet);
    printf("Usuario alterado com sucesso!");
  }
}


int main() {
  usuario vet[MAX_USUARIOS];
  zerarVetor(vet);

 int opEscolhida;
  while (1) {
    
    cabecalho();
    opEscolhida = menuPrincipal();
    
    if (opEscolhida == SAIR) break;
    
    switch (opEscolhida) {
      case USUARIOS:
        cabecalho();
        
        printf ("\t\t\t\t MENU USUARIOS \n");
        
        int opmenuusuario;
        menuSecundario();
        scanf ("%d%*c", &opmenuusuario);
  
        if (opmenuusuario == CADASTRAR) {
          cabecalho();
          cadastrarUsuario(vet);
        } else if (opmenuusuario == LISTAR) {
          cabecalho();
          listaUsuarios(vet);
        } else if (opmenuusuario == ALTERAR) {
          cabecalho();
          alterarUsuario(vet);
        }
        break;

      default:
        printf("OPCAO INVALIDA, POR FAVOR SELECIONE UM ITEM DO MENU\n\n");

    }
  }
  return 0;
}

 

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By IgorExtreme
      Olá estou com problema nesta questão: "Escreva um programa que leia e armazene em um vetor os dados de 30 pessoas. Estes dados são o nome da pessoa, sua idade, e os nomes completos do pai e da mãe. A seguir, o programa deve identificar (e mostrar os índices) das pessoas que estão relacionadas por um parentesco avô-neto e irmão-irmão. No caso dos irmãos, deve ser informado ainda qual é o mais novo dos dois." O código é esse
      #include<stdio.h> #include<string.h> #define NUM 4 struct pessoa { char nome[20]; char mae[20]; char pai[20]; int idade; }; main() { struct pessoa vetorPessoas[NUM]; int i; printf("Digite os dados de %d pessoas:\n", NUM); for (i = 0; i < NUM; i++) { printf("Digite o nome da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].nome); printf("%s\n", vetorPessoas[i].nome); printf("Digite o nome da mae da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].mae); printf("%s\n", vetorPessoas[i].mae); printf("Digite o nome do pai da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].pai); printf("%s\n", vetorPessoas[i].pai); printf("Digite a idade da pessoa %d: ", i); fflush(stdin); scanf("%d", &vetorPessoas[i].idade); printf("%d\n", vetorPessoas[i].idade); if(!strcmp(vetorPessoas[0].pai, vetorPessoas[1].nome)){ printf("%s e avo de %s\n", vetorPessoas[1].pai, vetorPessoas[0].nome); } if(!strcmp(vetorPessoas[2].pai, vetorPessoas[3].nome)){ printf("%s e avo de %s\n", vetorPessoas[3].pai, vetorPessoas[2].nome); } } /*if(!strcmp(vetorPessoas[i].pai, vetorPessoas[i].nome)){ printf("%s e pai de %s\n", vetorPessoas[i].pai, vetorPessoas[i].pai); }*/ if(!strcmp(vetorPessoas[0].pai, vetorPessoas[1].pai)){ printf("Eles sao irmaos\n"); if(vetorPessoas[0].idade > vetorPessoas[1].idade){ printf("%s mais velho\n", vetorPessoas[0].idade); } else{ printf("%s e mais novo\n", vetorPessoas[1].idade); } } if(!strcmp(vetorPessoas[2].pai, vetorPessoas[3].pai)){ printf("Eles sao irmaos\n"); if(vetorPessoas[2].idade > vetorPessoas[3].idade){ printf("%s mais velho\n", vetorPessoas[2].idade); } else{ printf("%s e mais novo\n", vetorPessoas[3].idade); } } } O problema é que ele mostra quase tudo menos a parte se tal irmão é mais velho que o outro
    • By ricardo Oliv3ira
      Um cano cilíndrico de raio R1 vai ser usado para guardar outros dois canos de raio R2 e R3. Caso os dois últimos canos caibam dentro do primeiro, seu programa deve imprimir “Coube”. Caso contrário imprima “Não coube”.
      #include <stdio.h> int main(void) { float R1,R2,R3; printf("digite o 1º tamanho:"); scanf("%f",R1); printf("digite o 2º tamanho"); scanf("%f",R2); printf("digite o 3º tamanho"); scanf("%f",R3); if(R2,R3<R1){ printf("Coube"); } else(R2,R3>R1){ printf("Não Coube"); } return 0; }  
    • By Hodol
      Boa tarde, estou começando a programar e ainda não sei qual linguagem de programação eu devo iniciar. Me de uma luz, Obrigado!
    • By Cangemi
      Olá, alguém pode me ajudar? Estou fazendo um trabalho para estrutura de dados sobre arvore binária e eu decidi usar as funções fprintf para salvar as informações em arquivo e fscanf para ler essas informações e joga - las na minha função de inserção da arvore. O programa está funcionando, ele salva dos dados da arvore, só que, o que acontece é, que na hora de usar o fscanf ele não lê todas as informações contidas no arquivo, ele lê somente dois cadastros e joga pra função de inserção. Alguém sabe como eu posso corrigir isso?
       

       
      Arquivo fonte: 

       
      Código completo: 
      #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<ctype.h> #include<string.h> struct jogador { char nome [31]; char posicao [15]; char escalacao; float salario; int numero; struct jogador *esq; struct jogador *dir; }; struct jogador *raiz; struct jogador *pointer; struct jogador *r; FILE *p; char name [31]=" ", time[51]; char position [15]=" "; char lineup; float salary=0; int num=0, aux = 0; void cadastrar(); void carregar(); struct jogador *salvar(struct jogador *i); struct jogador *criar( struct jogador *a); // função para inserir struct jogador *listar(struct jogador *i, int x); struct jogador *all (struct jogador *i); main() { pointer = NULL; raiz = NULL; int op; do { printf("\t\t\t\t\t\t--------------------------\n"); printf("\t\t\t\t\t | *-*-*Time*-*-* |\n\t\t\t\t\t | |\n\t\t\t\t\t | | \n"); printf("\t\t\t\t\t | [1] Escolher o time |\n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [2] Contratar jogador |\n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [4] Listar crescente | \n\t\t\t\t\t | | \n"); printf("\t\t\t\t\t | [5] Listar decrescente | \n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [6] Excluir time | \n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [9] Salvar | \n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [0] Sair |\n"); printf("\t\t\t\t\t\t--------------------------\n"); printf("\t\t\t\t\t Opcao [ ]\b\b"); scanf("%i",&op); switch(op) { case 1: { aux=0; cadastrar(); } break; case 2: { cadastrar(); } break; case 4: { if(raiz==NULL) { printf("\n Nao possui cadastro.\n"); system("pause"); } else { system("cls"); listar(pointer, 1); system("pause"); } } break; case 5: { if(raiz==NULL) { printf("\n Nao possui cadastro.\n"); system("pause"); } else { listar(pointer, 2); system("pause"); } } break; case 6: { if(raiz!=NULL) { pointer=all(pointer); printf("\n Todos os jogadores foram excluidos\n"); system("pause"); } else { printf("\n*****Nenhum jogador cadastrado*****.\n"); system("pause"); } } break; case 9: { p=fopen(time,"w"); fclose(p); salvar(pointer); } break; } system("cls"); }while(op!=0); } void cadastrar () { char resposta; char answer; do { if(aux==0) { system("cls"); printf("\n\n\n\n\n\n"); printf("\t\t\t\t\t Escolha o time para iniciar \n"); printf("\t\t\t\t\t\t___\b\b\b "); fflush(stdin); gets(time); strcat(time,".csv"); carregar(); fclose(p); aux = 1; return; } system("cls"); printf("\nNome do jogador: "); fflush(stdin); gets(name); printf("\nPosicao do jogador: "); fflush(stdin); gets(position); printf("\nO jogador e titular? <S/N>: "); answer=getche(); if(toupper(answer)=='S') { lineup = 'T'; } else { lineup = 'R'; } printf("\n"); printf("\nSalario pago ao jogador: "); scanf("%f",&salary); printf("\nInforme o numero do jogador: "); scanf("%i",&num); pointer=criar(pointer); printf("\nCadastrar novamente? <S/N>: "); resposta=getche(); printf("\n "); }while(toupper(resposta)=='S'); } struct jogador *criar( struct jogador *a) { if(a==NULL) { r=(struct jogador*)malloc(sizeof(struct jogador)); if(!r) { printf("\n Nao ha memoria"); exit(1); } strcpy(r->nome,name); strcpy(r->posicao,position); r->escalacao = lineup; r->salario = salary; r->numero = num; r->esq = NULL; r->dir = NULL; if(raiz==NULL) { raiz=r; } return r; } else { if(num>a->numero) { a->dir=criar(a->dir); } else { if(num<a->numero) { a->esq=criar(a->esq); } else { printf("\n Jogador ja cadastrado\n"); system("pause"); return a; } } } fclose(p); return a; } struct jogador *listar(struct jogador *i, int x) { if(i!=NULL&&x==1) { listar(i->esq, x); printf("\t\t\t\n----------\n"); printf("\n-----|%s|-----\n",i->nome); printf("\n-----|%s|-----\n",i->posicao); printf("\n-----|%c|-----\n",i->escalacao); printf("\n-----|%.2f|-----\n",i->salario); printf("\n-----|%i|-----\n",i->numero); listar(i->dir, x); } if(i!=NULL&&x==2) { listar(i->dir, x); printf("\n-----|%i|-----\n",i->numero); listar(i->esq, x); } return i; } struct jogador *all (struct jogador *i) { if(i->esq!=NULL) { all(i->esq); } if(i->dir!=NULL) { all(i->dir); } free(i); if(i==raiz) { raiz=NULL; i=raiz; } return i; } struct jogador *salvar(struct jogador *i) // função que salva os dados no arquivo, esta funcionando. { if(i!=NULL) { salvar(i->esq); p=fopen(time,"a"); strcpy(name,i->nome); strcpy(position,i->posicao); lineup = i->escalacao; salary = i->salario; num = i->numero; fprintf(p,"%s;%s;%c;%f;%i\n",name,position,lineup,salary,num); salvar(i->dir); } fclose(p); } void carregar() // função para ler os arquivos { if((p=fopen(time,"r"))==NULL) { return; } else { while(fscanf(p,"%[^;];%[^;];%c;%f;%i%*c",name,position,&lineup,&salary,&num)!=EOF) { // esse printf foi colocado pra saber quais numeros ele esta lendo. printf("\n-----|%i|-----\n",num); // ele le somente dois cadastros, se tiver mais ele não le, e por isso não joga na função de inserção. pointer=criar(pointer); // chamada da função de inserção, os dois unicos cadastros que são lidos, são inseridos corretamente. } system("pause"); } fclose(p); }  
    • By Artur Mendonça
      Olá amigos.
      Estou a tentar fazer um sistema para upload de vídeos para criar uma base de dados.
      Já fiz um sistema para imagens e funciona na perfeição. Adaptei este código para upload de vídeo e recebo as mensagens de erro:
      Os (...) foi que coloquei para encurtar o caminho.
       
      Código da página para seleção e upload do vídeo:
      <?php session_start(); include_once "../conexao.php"; $agid = $_REQUEST['id']; $sql = "select * from tbl_album where albumid='$agid'"; $rs_result = mysqli_query($conectar, $sql); ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="Página Administrativa"> <meta name="author" content=""> <link rel="icon" href="imagens/imgadmin.ico"> <title>Administrativo</title> <link rel="stylesheet" href="../css/bootstrap.min.css"> <link rel="stylesheet" href="../css/style.css"> </head> <?php $agid = $_REQUEST['id']; $sql = "SELECT * FROM tbl_albumvideo WHERE albumid='$agid'"; $rs_result = mysqli_query($conectar, $sql); while ($row = mysqli_fetch_assoc($rs_result)) { $aname = $row["name"]; } ;?> <body> <?php include_once "admmenu.php"; ?> <div class="container theme-showcase" role="main" Style='margin-top: 100px'> <h1 class="page-header"><br />Adicionar vídeo</h1> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"> Por favor selecione o vídeo </div> <div class="panel-body"> <div class="row"> <div class="col-lg-6"> <form action="processa/proc_cad_albumvideo2.php?id=<?php echo $agid ?>" method="POST" enctype="multipart/form-data" name="upload"> <div class="form-group"> <input type="file" name="arquivo" id="arquivo" value="arquivo"/> </div> <div class="form-group"> <input name="enviar" class="btn btn-primary" type="submit" id="enviar" value="Enviar"> </div> <div class="alert alert-danger" role="alert" style='margin-top:20px'> Esta operação poderá ser demorada, dependendo do tamanho do ficheiro a enviar e das suas condições de ligação à rede. <br/> <br/> Por favor seja paciente e não reinicie a página! </div> </form> </div> </div> </div> </div> </div> </div> </div> <script src="../js/jquery-3.2.1.slim.min.js"></script> <script src="../js/popper.min.js"></script> <script src="../js/bootstrap.min.js"></script> </body> </html> E este é o código para efetuar o upload e gravação na BD
      <?php ini_set('display_errors', 1); ini_set('display_startup_erros', 1); error_reporting(E_ALL); session_start(); include_once "../../conexao.php"; $adate = date('Y-m-d H:i:s'); $status = 'process'; $arquivo = $_FILES['arquivo']; $albumid = $_REQUEST['id']; $pasta = '../../videos/'; $resulta = mysqli_query($conectar, "SELECT * FROM tbl_albumvideo WHERE albumid='$albumid'"); $linhas = mysqli_fetch_assoc($resulta); $local = $linhas["local"]; $arqnome = $_FILES['arquivo']['name']; $ano = $linhas['ano']; $extensao = @end(explode('.', $arqnome)); $novonome = time() . "-" . rand() . "." . $extensao; $tmp = $_FILES['arquivo']['tmp_name']; $file = $pasta . $novonome; if (move_uploaded_file($tmp, $file)) { $query = mysqli_query($conectar, "INSERT INTO videos (video_name, local, ano,aid) VALUES ('$novonome','$local', '$ano', '$albumid')") or die(mysqli_error($conectar)); if ($query) { echo "<META HTTP-EQUIV=REFRESH CONTENT = '0;URL=http://(...)/addgalleryvideo.php'> <script type=\"text/javascript\"> alert(\" O vídeo foi guardado com sucesso.\"); </script>";} else {echo " <META HTTP-EQUIV=REFRESH CONTENT = '0;URL=http://(...)/addgalleryvideo.php'> <script type=\"text/javascript\"> alert(\" O Vídeo não foi guardado.\"); </script> "; } } Linha 14 : $arquivo = $_FILES['arquivo']; 
      Linha 21: $arqnome = $_FILES['arquivo']['name'];
      Linha 27: $tmp = $_FILES['arquivo']['tmp_name'];
       
      Desde já muito obrigado.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.