Ir para conteúdo

POWERED BY:

Arquivado

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

Remazela

PHP - Erro no campo Monetário

Recommended Posts

Caros amigos

 

Estou cm um erro que não estou conseguindo entender. Tenho 03 campos float.

Qtde | Vr_Unit. | Vr_Total

 

Quando informo os campos desta forma: 

QTDE.....: 50

Vr_Unit.: 0,55

Vr_Total: 27,50

 

A conta correta, mas no banco grava desta forma:

QTDE.....: 50

Vr_Unit.: 0,00  ==> desprezou as casas decimais

Vr_Total: 27,00

 

Conforme imagem em anexo.

 

Abaixo o código fonte do sistema:

<?php session_start(); ?>

<div id="content">

   <?php include_once("menu.php");?>     

   <div id="content_conteudo">

   <label><span style="font:20px Arial; font-weight:bold; color:#006666;">Produto solicitado na Cotação</span></label> 

    <?php 

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

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


    $cotaItensIdGet = isset($_GET['cotaItensId']) ? $_GET['cotaItensId'] : false;
    $cotaItensId    = isset($_POST['cotaItensId']) ? $_POST['cotaItensId'] : $cotaItensIdGet; 

    $codProdClieGet = isset($_GET['codProdClie']) ? $_GET['codProdClie'] : false;
    $codProdClie    = isset($_POST['codProdClie']) ? $_POST['codProdClie'] : $codProdClieGet; 

    ?>   
   
    <?php 

      if(isset($_POST['executar']) && $_POST['executar'] == 'Gravar'){     
        $editRespQtde     = $_POST['editRespQtde']; 
        $editRespVlr      = $_POST['editRespValor'];  
        $editRespTotal    = $_POST['editRespTotal']; 
        $editRespMarca    = strip_tags(trim($_POST['editRespMarca']));          
        $editRespPgto     = strip_tags(trim($_POST['editRespPgto'])); 
        $editRespEntrega  = strip_tags(trim($_POST['editRespEntrega'])); 
        $editRespObs      = strip_tags(trim($_POST['editRespObs'])); 
        $editUnid         = strip_tags(trim($_POST['editUnid'])); 
        $editCotaRespId   = $_POST['cotaRespId'];        
  

        $sql_produto = 'UPDATE cotacaoResposta SET  cotaRespQtde    = :editCotaRespQtde,
                                                    cotaRespVlr     = :editCotaRespVlr, 
                                                    cotaRespTotal   = :editCotaRespTotal, 
                                                    cotaRespMarca   = :editCotaRespMarca,
                                                    cotaRespObs     = :editCotaRespObs, 
                                                    cotaRespEntrega = :editCotaRespEntrega, 
                                                    cotaRespPgto    = :editCotaRespPgto,
                                                    apres_unid      = :prodUnid 
                                              WHERE cotaRespId      = :cotaRespId';
         
        try{
            $query_produto = $conecta->prepare($sql_produto);  
            $query_produto->bindValue(':editCotaRespQtde',$editRespQtde,PDO::PARAM_STR);  
            $query_produto->bindValue(':editCotaRespVlr',$editRespVlr,PDO::PARAM_STR);  
            $query_produto->bindValue(':editCotaRespTotal',$editRespTotal,PDO::PARAM_STR);  
            $query_produto->bindValue(':editCotaRespMarca',$editRespMarca,PDO::PARAM_STR);              
            $query_produto->bindValue(':editCotaRespObs',$editRespObs,PDO::PARAM_STR);  
            $query_produto->bindValue(':editCotaRespEntrega',$editRespEntrega,PDO::PARAM_STR);                          
            $query_produto->bindValue(':editCotaRespPgto',$editRespPgto,PDO::PARAM_STR);                        
            $query_produto->bindValue(':prodUnid',$editUnid,PDO::PARAM_STR);
            $query_produto->bindValue(':cotaRespId',$editCotaRespId,PDO::PARAM_STR);                   
            $query_produto->execute();
          
            echo '<div class="comunicado">Produto Editado com Sucesso!</div><!--aviso-->';

            //Redirecionando para Caixa de Enrada do Cliente
            echo '<meta http-equiv="refresh" content="2, 
                     URL=painel.php?exe=fornecedor/cotacao_itens&cotaNumero='.$cotaNumero.'&clienteId='.$clienteId.'" />';

          } catch(PDOexception $error_novoProduto) {
            echo 'Erro ao Editar o Produto '.$error_novoProduto->getMessage();
          }

      } //Fim do IF

    ?>  


    <?php

       $sql_pegaCotItens = 'SELECT pro.codProdClie, pro.produtoDescr, pro.apres_unid,
                                   cota.clienteId, cota.cotaItensId, cota.cotaNumero, cota.cotaQtde, cota.cotaComenta
                             FROM cotacaoItens cota
                       INNER JOIN produto pro ON pro.codProdClie = cota.codProdClie
                            WHERE pro.clienteId = :clienteId  
                              AND cota.cotaNumero = :cotaNumero  
                              AND cota.cotaItensId = :cotaItensId ';        

       try{
         $query_pegaCotItens = $conecta->prepare($sql_pegaCotItens);
         $query_pegaCotItens->bindValue(':clienteId',$clienteId,PDO::PARAM_STR);  
         $query_pegaCotItens->bindValue(':cotaNumero',$cotaNumero,PDO::PARAM_STR);  
         $query_pegaCotItens->bindValue(':cotaItensId',$cotaItensId,PDO::PARAM_STR);           
         $query_pegaCotItens->execute();

         $resultado_pegaCotItens = $query_pegaCotItens->fetchAll(PDO::FETCH_ASSOC);
        
         
         }catch(PDOexception $error_pegaCotItens){
              echo 'Erro ao pegar o Item'.$error_pegaCotItens->getMessage();
         }
         
         foreach($resultado_pegaCotItens as $resCotItens){     
                 $editCotaItensId = $resCotItens['cotaItensId'];          
                 $cotaNumero      = $resCotItens['cotaNumero'];     
                 $editCotaTitulo  = $resCotItens['cotaTitulo'];                    
                 $editcodProdClie = $resCotItens['codProdClie'];                                  
                 $cotCotaQtde     = $resCotItens['cotaQtde'];     
                 $cotCotaComenta  = $resCotItens['cotaComenta']; 
                 $descrProd       = $resCotItens['produtoDescr']; 
                 $apresProd       = $resCotItens['apres_unid'];
                 $clienteId       = $resCotItens['clienteId'];
                 $fornecedorId    = $resCotItens['fornecedorId'];
         }  

    ?>      


    <?php 

       $cotaRespId = $_POST['cotaRespId'];

       $sql_pegaProd = 'SELECT * FROM cotacaoResposta WHERE cotaRespId = :cotaRespId';

       try{
         $query_pegaProd = $conecta->prepare($sql_pegaProd);
         $query_pegaProd->bindValue(':cotaRespId',$cotaRespId,PDO::PARAM_STR);  
         $query_pegaProd->execute();

         $resultado_pegaProd = $query_pegaProd->fetchAll(PDO::FETCH_ASSOC);
        
         
         }catch(PDOexception $error_pegaProd){
              echo 'Erro ao pegar o Produto'.$error_pegaProd->getMessage();
         }
         
         foreach($resultado_pegaProd as $resProd){
                 $editCotaRespId      = $resProd['cotaRespId'];           
                 $prodUnid            = $resProd['apres_unid']; 
                 $editCotaRespQtde    = $resProd['cotaRespQtde'];
                 $editCotaRespVlr     = $resProd['cotaRespVlr'];
                 $editCotaRespTotal   = $resProd['cotaRespTotal'];
                 $editCotaRespMarca   = $resProd['cotaRespMarca'];                 
                 $editCotaRespPgto    = $resProd['cotaRespPgto'];
                 $editCotaRespObs     = $resProd['cotaRespObs'];
                 $editCotaRespEntrega = $resProd['cotaRespEntrega'];
         }  

    ?> 


      <p class="p_esp">
      <label>
        <span>Cód. / Desc.:</span>
        <input type="text" id='titulo' name="titulo" size="80" value="<?php echo $editcodProdClie .' - '.$descrProd; ?>" disabled > 
      </label>

        <label>
          <span>Quantidade.:</span>
          <input type="text" id='Qtde' name="Qtde" size="10" value="<?php echo $cotCotaQtde; ?>" disabled >     
          &nbsp;&nbsp;&nbsp;
          <span>Espécie:</span>
          <input type="text" id='apresProd' name="apresProd" size="3" value="<?php echo $apresProd; ?>" disabled > 
        </label>

        <label>
          <span>Comentário.:</span>
          <input type="text" id='Comenta' name="Comenta" size="80" value="<?php echo $cotCotaComenta; ?>" disabled >
        </label>
      </p>   

  <br/>
  <form name="frm_prod" id="frm_prod" action="" enctype="multipart/form-data" method="post" onSubmit="return enviardados();">

   <h2 class="h2_aviso">Digite abaixo sua proposta, para o produto acima.</h2>

      <p class="p_esp">
        <label>

          <span>Espécie........:</span>
            <select class="selec" id="editUnid" name="editUnid" >
              <option><?php echo $prodUnid;?></option>
              <?php 
                $cnx = mysql_connect("localhost", "root", "");
                mysql_select_db("siscota", $cnx);
                $resultado = mysql_query("SELECT * FROM unidade");
                while($unid = mysql_fetch_assoc($resultado)){
                  ?>
                    <option value="<?php echo $unid["apres_unid"]; ?>"><?php echo $unid["apres_unid"];?></option>
                  <?php 
                } //Fim do while
              ?>
            </select>
          &nbsp;&nbsp;

          <span>Quantidade:</span>
          <input type="text" id='editRespQtde' name="editRespQtde" size="5" value="<?php echo $editCotaRespQtde; ?>" />     
          &nbsp;&nbsp;

          <span>Vr Unit:</span>
          <input type="text" id='editRespValor' name="editRespValor" size="8" value="<?php echo $editCotaRespVlr; ?>" 
                                                                     onKeyUp="dinheiro(this,12)" />
          &nbsp;&nbsp;
          <span>Total:</span>
          <input type="text" name="editRespTotal" id="editRespTotal" size="15" 
                                                                     value="<?php echo $editCotaRespTotal; ?>"  
                                                                     readonly="readonly" />

        </label>        

        <label>

          <span>Cond. Pgto..:</span>
          <input type="text" id='editRespPgto' name="editRespPgto" size="11" value="<?php echo $editCotaRespPgto; ?>" >
          &nbsp;&nbsp;

          <span>Marca:</span>
          <input type="text" id='editRespMarca' name="editRespMarca" size="30" 
                                               value="<?php echo $editCotaRespMarca; ?>" onkeyup="up(this)" >
          &nbsp;&nbsp;&nbsp;

          <span>Prazo de Entrega:</span>
          <input type="text" id='editRespEntrega' name="editRespEntrega" size="5" value="<?php echo $editCotaRespEntrega; ?>" 
                                                           onkeypress="return numberOnly(event)" > Dia(s)         
        </label>

        <label>
          <span>Observação.:</span>
          <input type="text" id='editRespObs' name="editRespObs" size="96" value="<?php echo $editCotaRespObs; ?>"  onkeyup="up(this)" >
        </label>

      </p> 

    <p class="p_esp">  
       <input class="btn_can" type="submit" name="button" id="button" value="Cancelar" 
          onclick="frm_prod.action='painel.php?exe=fornecedor/cotacao_itens&cotacao=<?php echo $cotaNumero;?>'; frm_prod.submit()" />

       <input class="btn_cor" type="submit" name="executar" id="executar" value="Gravar" />

       <input type="hidden" name="clienteId" value="<?php echo $clienteId;?>" />  
       <input type="hidden" name="cotaNumero" value="<?php echo $cotaNumero; ?>">       
       <input type="hidden" name="cotaItensId" value="<?php echo $cotaItensId;?>" />
       <input type="hidden" name="codProdClie" value="<?php echo $codProdClie;?>" />  
       <input type="hidden" name="cotaRespId" value="<?php echo $cotaRespId;?>" />    
            
    </p>    

    </form>

   </div><!--conteudo-->

</div><!--contet-->
 
<?php include_once("footer.php");?>

<!--Script para Validar o Formulário -->
<script language="JavaScript" >

    function enviardados(){
     
        if(document.frm_prod.respQtde.value == "" || document.frm_prod.respQtde.value.length < 1) { 
           alert( "Preencha o campo QUANTIDADE corretamente!" );
           document.frm_prod.respQtde.focus();
           return false;
        }           

        if(document.frm_prod.respValor.value == "" || document.frm_prod.respValor.value.length < 1) { 
           alert( "Preencha o campo VALOR corretamente!" );
           document.frm_prod.respValor.focus();
           return false;
        }    

        if(document.frm_prod.respPgto.value == "" || document.frm_prod.respPgto.value.length < 1) { 
           alert( "Preencha o campo CONDIÇÃO de PAGAMENTO corretamente!" );
           document.frm_prod.respPgto.focus();
           return false;
        } 

        if(document.frm_prod.respEntrega.value == "" || document.frm_prod.respEntrega.value.length < 1) { 
           alert( "Preencha o campo PRAZO de ENTREGA corretamente!" );
           document.frm_prod.respEntrega.focus();
           return false;
        }                        
      
      
    return true;

    }       

   
   //converte minusculas em maiusculas
    function up(lstr){              
      var str=lstr.value;           //obtem o valor
      lstr.value=str.toUpperCase(); //converte as strings e retorna ao campo
    }
  

  //Valida os campos numéricos do formulário
  function numberOnly(e){
      var tecla = new Number();
      if(window.event) {
          tecla = e.keyCode;
      }else if(e.which) {
          tecla = e.which;
      }else {
          return true;
      }

      if((tecla >= "48") && (tecla <= "57") || tecla == 8){
          return true;
      }else{
          return false;
      }
  }  


//Valida os campos moeda do formulário 
  function dinheiro(cur,len) {
     n='__0123456789';
     d=cur.value;
     l=d.length;
     r='';

     if (l > 0){
        z=d.substr(0,l-1);
        s='';
        a=2;

          for (i=0; i < l; i++){
              c=d.charAt(i);
              if (n.indexOf(c) > a){
                  a=1;
                  s+=c;
              };
          };


          l=s.length;
          t=len-1;
          if (l > t){
              l=t;
              s=s.substr(0,t);
          };


          if (l > 2){
              r=s.substr(0,l-2)+','+s.substr(l-2,2);
          } else {
              if (l == 2){
                  r='0,'+s;
              } else  {
                  if (l == 1){
                      r='0,0'+s;
                  };
              };
          };


          if (r=='0,00'){
             return false;             
          } else {
              l=r.length;
              if (l > 6){
                  j=l%3;
                  w=r.substr(0,j);
                  wa=r.substr(j,l-j-6);
                  wb=r.substr(l-6,6);
                  if (j > 0){
                      w+='.';
                  };

                  k=(l-j)/3-2;
                  for (i=0; i < k; i++){
                      w+=wa.substr(i*3,3)+'.';
                  };
                  r=w+wb;
              };
          };

     };

     if (r.length <= len){
      cur.value=r;
     } else {
      cur.value=z;
     };

     return 'ok';

  };  


      function id(el) {
        return document.getElementById( el );
      }
      function total( un, editRespQtde ) {
        return parseFloat(un.replace(',', '.'), 10) * parseFloat(editRespQtde.replace(',', '.'), 10);
      }
      window.onload = function() {
        id('editRespValor').addEventListener('keyup', function() {
        var result = total( this.value , id('editRespQtde').value );
        id('editRespTotal').value = String(result.toFixed(2)).formatMoney();
        });

        id('editRespQtde').addEventListener('keyup', function(){
        var result = total( id('editRespValor').value , this.value );
        id('editRespTotal').value = String(result.toFixed(2)).formatMoney();
        });
      }

      String.prototype.formatMoney = function() {
        var v = this;

        if(v.indexOf('.') === -1) {
        v = v.replace(/([\d]+)/, "$1,00");
        }

        v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20");
        v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2");
        v = v.replace(/([\d]+)([\d]{3}),([\d]{2})$/, "$1.$2,$3");

        return v;
      };


</script>    

 

Grato a todos,

 

Atenciosamente,

 

Renato

0_casasDecimais.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Remazela,

 

Recomendo o tipo de coluna em seu MySQL como float(12,2). Você deverá salvar os valores monetários com " . " ao invés da vírgula, utilize uma função para "limpar/substituir a vírgula pelo ponto e salvar no db, e para trazer os dados utilizar a função number_format() para trazer os valores formatados.
 

<?php

$valor=10.00;

echo 'R$ '.number_format($valor,2,',','.');

//saída: R$ 10,00

?>

Para retirar a vírgula e por o ponto, utilize algo como:

function moeda($get_valor) { 
   $source = array('.', ',');  
   $replace = array('', '.'); 
   $valor = str_replace($source, $replace, $get_valor); //remove os pontos e substitui a virgula pelo ponto 
   return $valor; //retorna o valor formatado para gravar no banco 
}

Se for no PHP 7 (Não funcionará em PHP5, a função anterior também roda em PHP7, aqui estamos apenas dando mais consistência a função no retorno do tipo de dados)

 

function moeda($get_valor) : float {
   $source = array('.', ',');  
   $replace = array('', '.');
   $valor = str_replace($source, $replace, $get_valor); //remove os pontos e substitui a virgula pelo ponto
   return $valor; //retorna o valor formatado para gravar no banco
}

 

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.