Ir para conteúdo
    • João Batista Neto

      iMasters InterCon 2017   10-10-2017

      Ainda dá tempo de se inscrever no iMasters InterCon 2017, o maior evento dev do Brasil!  
Entre para seguir isso  
Remazela

PHP - Update em Campo Date(Data)

Recommended Posts

Caros amigos

Por favor, recorro mais uma vez ao auxílio dos amigos, fiz várias pesquisa mas não tive sucesso.

Após digitar a data de cadastro, quero alterar a Data através de um INPUT - DATE.

Para gravar os campos faço desta forma (grava corretamente), o campos datas no BcoDados está como timestamp.

<?php
        $cotaStatus   = '1';         
        $cotaDtInicio = date('Y-m-d H:m:s');              
        $cotaDtFim    = date('Y-m-d H:m:s');        

        $sql = 'INSERT INTO cotacao (cotaDtInicio, cotaDtFim, clienteId, cotaStatus) 
                     VALUES (:cotaDtInicio, :cotaDtFim, :clienteId, :cotaStatus)';

        try{
            $query = $conecta->prepare($sql);             
            $query->bindValue(':cotaDtInicio',$cotaDtInicio,PDO::PARAM_STR);   
            $query->bindValue(':cotaDtFim',$cotaDtFim,PDO::PARAM_STR);   
            $query->bindValue(':clienteId',$clienteId,PDO::PARAM_STR);   
            $query->bindValue(':cotaStatus',$cotaStatus,PDO::PARAM_STR);                                         
            $query->execute(); 

?>

Quando busco o Código desejado, faço da seguinte forma:

    <?php 

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

       //Faço a pesquisa através do código ID
       $sql_pegaProd = 'SELECT * FROM cotacao WHERE cotaId = :cotaId';

       try{
         $query_pegaProd = $conecta->prepare($sql_pegaProd);
         $query_pegaProd->bindValue(':cotaId',$cotaId,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();
         }
         
         //Capturo os dados que desejo
         foreach($resultado_pegaProd as $resProd){
                 $cotaId         = $resProd['cotaId']; 
                 $edCotaDtInicio = $resProd['cotaDtInicio'];            
                 $edCotaDtFim    = $resProd['cotaDtFim'];  
         }  
    ?> 


    <!-- Preencho o form, com os dados -->
    <form name="cota_2" id="cota_2" action="" method="post" enctype="multipart/form-data">  

      <p class="p_esp">
        <label>
          <span>Data da Abertura.........:</span>
            <input type="date" id='cotaDtInicio' name="cotaDtInicio" size="10" min="2000-12-31" value="<?php echo $edCotaDtFim; ?>" >
        </label> 
      </p>

      <p class="p_esp">
        <label>
          <span>Data do Encerramento:</span>
            <input type="date" id='cotaDtFim' name="cotaDtFim" size="10" min="2000-12-31" value="<?php echo $edCotaDtFim; ?>" >
        </label>
      </p>     

O problema que nessa linha, não consigo mostrar a Data gravada no banco.

<input type="date" id='cotaDtInicio' name="cotaDtInicio" size="10" min="2000-12-31" value="<?php echo $edCotaDtFim; ?>" >

Como consigo mostrar a data gravada no banco para ser alterada ?

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo data "cotaDtFim" é "DateTime" ou "Date"? se for "DateTime", pode ser que precise formatar o valor antes de exibir, tente da seguinte maneira:

<input type="date" id='cotaDtInicio' name="cotaDtInicio" size="10" min="2000-12-31" value="<?php echo date('Y-m-d', strtotime($cotaDtInicio)); ?>" >

Uma sugestão, nesse caso como você esta fazendo uma consulta pelo "id", tente utilizar o método "fetch" ao invés do "fetchAll"; assim não será necessário o "foreach":

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

    // fetch ao invés do fetchAll
    $resultado_pegaProd = $query_pegaProd->fetch(PDO::FETCH_ASSOC);
}catch(PDOexception $error_pegaProd){
    echo 'Erro ao pegar o Produto'.$error_pegaProd->getMessage();
}

// não precisa do foreach
$cotaId         = $resProd['cotaId']; 
$edCotaDtInicio = $resProd['cotaDtInicio'];            
$edCotaDtFim    = $resProd['cotaDtFim'];  

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use DateTime, e adicione um @ na frente do timestatmp:

$timeStamp = "1484161995";
$date = new DateTime('@'.$timeStamp);

echo $date->format('d/m/Y');
Saída:

11/01/2017

Se o seu caso é o formato yyyy-mm-dd, basta alterar o format:

echo $date->format('Y-m-d');
Saída:

2017-01-11

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo data "cotaDtFim" é "DateTime" ou "Date"? se for "DateTime", pode ser que precise formatar o valor antes de exibir, tente da seguinte maneira:

<input type="date" id='cotaDtInicio' name="cotaDtInicio" size="10" min="2000-12-31" value="<?php echo date('Y-m-d', strtotime($cotaDtInicio)); ?>" >

Uma sugestão, nesse caso como você esta fazendo uma consulta pelo "id", tente utilizar o método "fetch" ao invés do "fetchAll"; assim não será necessário o "foreach":

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

    // fetch ao invés do fetchAll
    $resultado_pegaProd = $query_pegaProd->fetch(PDO::FETCH_ASSOC);
}catch(PDOexception $error_pegaProd){
    echo 'Erro ao pegar o Produto'.$error_pegaProd->getMessage();
}

// não precisa do foreach
$cotaId         = $resProd['cotaId']; 
$edCotaDtInicio = $resProd['cotaDtInicio'];            
$edCotaDtFim    = $resProd['cotaDtFim'];  

Caro amigo

Deus o abençoa por sua ajuda, deu certinho.

Observação: tive que voltar o fetchAll, pois quando só coloquei fetch, o PHP trouxe a data: 31-12-1969.

Não entendi, mas quando voltei o fetchAll, trouxe a data gravada no BcoDados, ou seja, a data atual 11-01-2017.

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo Gabriel

Deus o abençoa por sua ajuda.

Apenas uma dúvida, referente a sua explicação, após testar não deu certo, ou eu não entendi muito bem.

A linha que mostro a data vindo do BcoDados é essa:

<input type="date" id='cotaDtInicio' name="cotaDtInicio" size="10" min="2000-12-31" value="<?php echo $edCotaDtInicio; ?>" >
No seu exemplo, como colocaria a formatação ?

Grato,

Renato

Editado por Gabriel Heming
Remover quote desnecessário

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só alterar o valor do atributo 'value'.

value="<?php echo "sua data aqui"; ?>"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observação: tive que voltar o fetchAll, pois quando só coloquei fetch, o PHP trouxe a data: 31-12-1969.

Não entendi, mas quando voltei o fetchAll, trouxe a data gravada no BcoDados, ou seja, a data atual 11-01-2017.

Apenas uma correção, o código que passei na outra resposta está errado; é só alterar onde está "$resultado_pegaProd" para "$resProd"; quando você usa apenas o "fetch" é retornado apenas um item, tente assim:

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

    // fetch ao invés do fetchAll
    $resProd= $query_pegaProd->fetch(PDO::FETCH_ASSOC); // corrigido
}catch(PDOexception $error_pegaProd){
    echo 'Erro ao pegar o Produto'.$error_pegaProd->getMessage();
}

// não precisa do foreach
$cotaId         = $resProd['cotaId']; 
$edCotaDtInicio = $resProd['cotaDtInicio'];            
$edCotaDtFim    = $resProd['cotaDtFim'];  

Dê uma lida na documentação para entender melhor:

fetchAll: http://php.net/manual/pt_BR/pdostatement.fetchall.php

fetch: http://php.net/manual/pt_BR/pdostatement.fetch.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas uma correção, o código que passei na outra resposta está errado; é só alterar onde está "$resultado_pegaProd" para "$resProd"; quando você usa apenas o "fetch" é retornado apenas um item, tente assim:

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

    // fetch ao invés do fetchAll
    $resProd= $query_pegaProd->fetch(PDO::FETCH_ASSOC); // corrigido
}catch(PDOexception $error_pegaProd){
    echo 'Erro ao pegar o Produto'.$error_pegaProd->getMessage();
}

// não precisa do foreach
$cotaId         = $resProd['cotaId']; 
$edCotaDtInicio = $resProd['cotaDtInicio'];            
$edCotaDtFim    = $resProd['cotaDtFim'];  

Dê uma lida na documentação para entender melhor:

fetchAll: http://php.net/manual/pt_BR/pdostatement.fetchall.php

fetch: http://php.net/manual/pt_BR/pdostatement.fetch.php

Caro amigo

Obrigado por sua ajuda.

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

Entre para seguir isso  

×

Informação importante

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

Este projeto é mantido e patrocinado pelas empresas:
Hospedado por: