Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Remazela

[Resolvido] PHP - Não Importa dados (TXT) p/ Banco de Dados (MySql)

Recommended Posts

Caros amigo.

 

Estou com o seguinte problema:

Não consigo Importar Dados de um arquivo( .TXT)  para GRAVAR no Banco de Dados.

 

O banco de dados está assim:

-- -----------------------------------------------------
-- Table `siscotaweb`.`cotacaoItens`
-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `siscotaweb`.`cotacaoItens` (
  `cotaItensId` INT NOT NULL AUTO_INCREMENT ,
  `cotaNumImport` VARCHAR(50) NOT NULL ,
  `codProdClie` VARCHAR(50) NOT NULL ,
  `cotaDtde` DECIMAL(10,2) NOT NULL ,
  `cotaComenta` VARCHAR(150) NOT NULL ,
  `cotaVerTxt` VARCHAR(1) NOT NULL ,
  `cotaNumero` VARCHAR(50) NOT NULL ,
  `cotacao_cotaId` INT NOT NULL ,
  PRIMARY KEY (`cotaItensId`) ,
  INDEX `fk_cotacaoItens_cotacao1_idx` (`cotacao_cotaId` ASC) ,
  CONSTRAINT `fk_cotacaoItens_cotacao1`
    FOREIGN KEY (`cotacao_cotaId` )
    REFERENCES `siscotaweb`.`cotacao` (`cotaId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

 

Abaixo o código:

Nessa parte informo qual arquivo desejo:

    <div class="col-md-12">
      <!-- general form elements -->
      <div class="box box-primary">

        <div class="box-header with-border">
          <h3 class="box-title">Importar Itens para Cotação</h3>
        </div>

          <form role="form" name="cotaItens" id="cotaItens" action="" enctype="multipart/form-data" method="POST" >

              <div class="box-body">

              <?php

              //Pesquisa para verificar se já foi efetuado a Importação do arquivo .TXT
                $cnx = mysql_connect("localhost", "root", "");
                mysql_select_db("siscotaweb", $cnx);

                $sql = mysql_query("SELECT cotaVerTxt FROM cotacaoItens WHERE cotaNumero = '$cotaNumero' AND cotaVerTxt = '1' ");
                $res = mysql_num_rows($sql);
              ?>

                <?php if($res > 0){ ?>

                      <div class="alert alert-danger alert-dismissible">
                        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
                        <h4><i class="icon fa fa-ban"></i> Alert!</h4>
                        Após efetuar as alterações necessárias. Clique em Finalizar, para enviar aos Fornecedores!
                      </div>                       

                   <?php } else { ?>                

                  <div class="form-group">

                      <input type="file" name="arquivo" id="arquivo" required />

                      <p class="help-block">Atenção! Importar somente arquivo .TXT</p>

                      <input class="btn btn-primary btn-xs" type="submit" name="confirmar" value="Confirmar"> 

                  </div>


              <?php } ?>      


                  <input type="hidden" name="cotaId" value="<?php echo $cotaId;?>" />
                  <input type="hidden" name="cotaNumero" value="<?php echo $cotaNumero;?>" />                

              </div>                   

          </form>

      </div>

    </div>

 

Nesta parte, uso para importar e gravar no Banco de dados.

         <?php

          //Variável Passada da Página Anterior
          $cotacao_cotaIdGet = isset($_GET['cotaId']) ? $_GET['cotaId'] : false;
          $cotacao_cotaId  = isset($_POST['cotaId']) ? $_POST['cotaId'] : $cotacao_cotaIdGet;   

          $cotaNumeroGet = isset($_GET['cotaNumero']) ? $_GET['cotaNumero'] : false;
          $cotaNumero    = isset($_POST['cotaNumero']) ? $_POST['cotaNumero'] : $cotaNumeroGet;       


            //Função para importar Arquivo
            function Inserir($itens, Pdo $pdo){
                $sts = $pdo->prepare("INSERT INTO cotacaoItens(cotaNumImport, codProdClie, cotaQtde, cotaVerTxt, cotaNumero, cotacao_cotaId) VALUES(?,?,?,?,?,?);");  

                $sts->bindValue(1, $itens[0], PDO::PARAM_STR);
                $sts->bindValue(2, $itens[1], PDO::PARAM_STR);        
                $sts->bindValue(3, $itens[2], PDO::PARAM_STR);            
                $sts->bindValue(4, $itens[3], PDO::PARAM_STR);        
                $sts->bindValue(5, $itens[4], PDO::PARAM_STR);          
                $sts->bindValue(6, $itens[5], PDO::PARAM_STR);                                
                $sts->execute();
                $sts->closeCursor();
                $sts = NULL;
            }
            
            if (!empty($_FILES['arquivo'])) {

                $Pdo  = new PDO("mysql:host=localhost; dbname=siscotaweb", "root", "");
                $file = fopen($_FILES['arquivo']['tmp_name'], 'r');

                while (!feof($file)){
                    $linha = fgets($file);          
                    $itens = explode(';', $linha);   
                    $itens[] = '1';     
                    $itens[] = $cotaNumero;                
                    $itens[] = $cotacao_cotaId;                                  
                    Inserir($itens, $Pdo);
                }
                  echo '<br/>';
                  echo '<div class="comunicado">Arquivo Importado com Sucesso!</div><!--aviso-->';
                  echo '<br/>';

                  //Redirecionando para Caixa de Enrada do Cliente
                  echo '<meta http-equiv="refresh" content="2, URL=painel.php?exe=admin-cliente/cotacao_lista" />';

            }

        ?>

 

Como consigo gravar no Banco de Dados ?

 

Grato,

 

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se puder postar a solução, poderá ajudar outros usuários no futuro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos

 

Segue a solução do erro encontrado, acredito que isso acontece tantos com programadores iniciantes e mais experientes.

 

Motivo do erro: DIGITAÇÃO

 

Solução do erro: descansar a mente e ler com mais atenção.

 

O código abaixo de importação não apresenta nenhum erro:

         <?php

          //Variável Passada da Página Anterior
          $cotacao_cotaIdGet = isset($_GET['cotaId']) ? $_GET['cotaId'] : false;
          $cotacao_cotaId  = isset($_POST['cotaId']) ? $_POST['cotaId'] : $cotacao_cotaIdGet;   

          $cotaNumeroGet = isset($_GET['cotaNumero']) ? $_GET['cotaNumero'] : false;
          $cotaNumero    = isset($_POST['cotaNumero']) ? $_POST['cotaNumero'] : $cotaNumeroGet;       


            //Função para importar Arquivo
            function Inserir($itens, Pdo $pdo){
                $sts = $pdo->prepare("INSERT INTO cotacaoItens(cotaNumImport, codProdClie, cotaQtde, cotaVerTxt, cotaNumero, cotacao_cotaId) VALUES(?,?,?,?,?,?);");  

                $sts->bindValue(1, $itens[0], PDO::PARAM_STR);
                $sts->bindValue(2, $itens[1], PDO::PARAM_STR);        
                $sts->bindValue(3, $itens[2], PDO::PARAM_STR);            
                $sts->bindValue(4, $itens[3], PDO::PARAM_STR);        
                $sts->bindValue(5, $itens[4], PDO::PARAM_STR);          
                $sts->bindValue(6, $itens[5], PDO::PARAM_STR);                                
                $sts->execute();
                $sts->closeCursor();
                $sts = NULL;
            }
            
            if (!empty($_FILES['arquivo'])) {

                $Pdo  = new PDO("mysql:host=localhost; dbname=siscotaweb", "root", "");
                $file = fopen($_FILES['arquivo']['tmp_name'], 'r');

                while (!feof($file)){
                    $linha = fgets($file);          
                    $itens = explode(';', $linha);   
                    $itens[] = '1';     
                    $itens[] = $cotaNumero;                
                    $itens[] = $cotacao_cotaId;                                  
                    Inserir($itens, $Pdo);
                }
                  echo '<br/>';
                  echo '<div class="comunicado">Arquivo Importado com Sucesso!</div><!--aviso-->';
                  echo '<br/>';

                  //Redirecionando para Caixa de Enrada do Cliente
                  echo '<meta http-equiv="refresh" content="2, URL=painel.php?exe=admin-cliente/cotacao_lista" />';

            }

        ?>

 

O erro foi que no banco de Dados, escrevi com erro:

-- -----------------------------------------------------
-- Table `siscotaweb`.`cotacaoItens`
-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `siscotaweb`.`cotacaoItens` (
  `cotaItensId` INT NOT NULL AUTO_INCREMENT ,
  `cotaNumImport` VARCHAR(50) NOT NULL ,
  `codProdClie` VARCHAR(50) NOT NULL ,
  `cotaDtde` DECIMAL(10,2) NOT NULL , /* aqui está o erro, escrevi cotaDtde ao invés de cotaQtde, apenas uma letra "D" */
  `cotaComenta` VARCHAR(150) NOT NULL ,
  `cotaVerTxt` VARCHAR(1) NOT NULL ,
  `cotaNumero` VARCHAR(50) NOT NULL ,
  `cotacao_cotaId` INT NOT NULL ,
  PRIMARY KEY (`cotaItensId`) ,
  INDEX `fk_cotacaoItens_cotacao1_idx` (`cotacao_cotaId` ASC) ,
  CONSTRAINT `fk_cotacaoItens_cotacao1`
    FOREIGN KEY (`cotacao_cotaId` )
    REFERENCES `siscotaweb`.`cotacao` (`cotaId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.