Ir ao conteúdo

Posts recomendados

Postado

Caros amigos

 

Por favor, me perdoa por minha dúvida. 

 

Preciso criar uma função que após logar no sistema, o PHP faz uma busca no Banco de Dados.

 

Seria o seguinte:

=>  tudo que for maior que a DATA e HORA atual o STATUS fica em espera.

 

Como faço essa busca  e alteração no Banco, sem ter que informar o ID ?

 

Grato,

 

Renato

  • Moderador
Postado

@remazela Olá, seja bem vindo em nosso Clube do Hardware.

 

Bom.. sem ter que informar o ID, presumo que você queira editar o valor do campo de TODOS os registros que tenham a tal data e hora...

 

Você pode fazer isso.

Não é necessário criar uma função para isso..

Na página restrita, depois de ter feito o login você deve fazer um UPDATE set no campo desejado a partir da data e hora gerada no php.

 

PS: é indubitável que use o tipo datetime no campo da tabela mysql

 

<?php
 //data e hora atual no formato mysql
 $dataHora = date("Y-m-d H:i:s");   

 include 'conexao.php';
 $atualiza = mysqli_query($conexao,"UPDATE tabela SET Status = 'Em espera'  
                                     WHERE dataHora >= $dataHora ");

 

 

Postado
5 horas atrás, DiF disse:

@remazela Olá, seja bem vindo em nosso Clube do Hardware.

 

Bom.. sem ter que informar o ID, presumo que você queira editar o valor do campo de TODOS os registros que tenham a tal data e hora...

 

Você pode fazer isso.

Não é necessário criar uma função para isso..

Na página restrita, depois de ter feito o login você deve fazer um UPDATE set no campo desejado a partir da data e hora gerada no php.

 

PS: é indubitável que use o tipo datetime no campo da tabela mysql

 


<?php
 //data e hora atual no formato mysql
 $dataHora = date("Y-m-d H:i:s");   

 include 'conexao.php';
 $atualiza = mysqli_query($conexao,"UPDATE tabela SET Status = 'Em espera'  
                                     WHERE dataHora >= $dataHora ");

 

 

 

Caro amigo

 

Por favor, me perdoa por perturbar com minha dúvida, mas infelizmente não deu certo.

 

a minha tabela está assim:

CREATE TABLE IF NOT EXISTS `cotacao` (
  `cotaId` int(11) NOT NULL AUTO_INCREMENT,
  `cotaNumero`    varchar(255) DEFAULT NULL,         
  `cotaDtInicio`  date NULL DEFAULT NULL,
  `cotaHrsInicio` time NULL DEFAULT NULL,
  `cotaDtFim`     date NULL DEFAULT NULL,      
  `cotaHrsFim`    time NULL DEFAULT NULL,  
  `cotaTitulo`    varchar(255) DEFAULT NULL,   
  `cotaObserva`   varchar(255) DEFAULT NULL,      
  `cotaStatus`    int(1) NOT NULL,  
  `clienteId`     varchar(11) DEFAULT NULL,  
  `desc_categ`    varchar(255) DEFAULT NULL,
  `desc_pgto`     varchar(255) DEFAULT NULL,     
  PRIMARY KEY (`cotaId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

 

Escrevi esse código, mas consigo alterar se digitar o código num input text, o que não quero.

            //Alterar o Status da Cotação para Analisar
            cotaId = $_POST['cotaId'];
			$cotaStatus = '2'; 
			$sql_produto = 'UPDATE cotacao SET cotaStatus = :cotaStatus	WHERE cotaId = :cotaId';
			 
			try{
				$query_produto = $conecta->prepare($sql_produto);                       
				$query_produto->bindValue(':cotaStatus',$cotaStatus,PDO::PARAM_STR);
				$query_produto->bindValue(':cotaId',$cotaId,PDO::PARAM_STR);                   
				$query_produto->execute();
			  
			    echo '<br/>';
				echo '<div class="comunicado">Cotação está em Processo de Análise!</div><!--aviso-->';

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

 

Preciso ler linha a linha da tabela e o que tiver com a DATA e HORA vencida, o sistema muda o STATUS para 2(análise).

 

Estou usando PDO para minha SELECT, INSERT, UPDATE e DELETE.

 

Infelizmente, não consigo escrever esse comando que lê a tabela e altera. 

 

Por favor, se puder me ajudar ficarei muito grato.

 

Atenciosamente,

 

Renato

 

 

 

 

 

  • Moderador
Postado

@remazela Pelo seu código, você tem um campo para cada data e hora.  

Recomendaria alterar estes campos:

cotaDtInicio`  date NULL DEFAULT NULL,
  `cotaHrsInicio` time NULL DEFAULT NULL,
  `cotaDtFim`     date NULL DEFAULT NULL,      
  `cotaHrsFim`    time NULL DEFAULT NULL,  

reduzindo de 4 para 2 usando o tipo datetime.

deixando no formato:

aaaa-mm-dd h:m:s

 

Alterando isto, você seria capaz de usar o exemplo que dei a cima comparando a data e hora atual do sistema com a data e hora desejada.

//Alterar o Status da Cotação para Analisar
$cotaId = $_POST['cotaId'];

/*Pega a data e hora atual no formato do mysql 
   Se quiser fazer deste modo deves alterar
   o tipo de campo de date e time 
   para datetime.
   Assim você cria só dois campos
   um para o inicio e outro para o fim
   No exemplo ali deixei o nome do campo
   de cotaDtHrFim que o tipo dele é datetime
   onde a data e hora ficam juntas mesma linha 
*/
//saida: 2017-01-19 22:16:00
$dataHora = date("Y-m-d H:i:s");    

$cotaStatus = '2'; 
$sql_produto = "UPDATE cotacao 
                SET cotaStatus = :cotaStatus
                WHERE cotaId = :cotaId AND cotaDtHrFim >=:dataHora";

   try{
	$query_produto = $conecta->prepare($sql_produto);                       
	$query_produto->bindValue(':cotaStatus',$cotaStatus,PDO::PARAM_STR);
	$query_produto->bindValue(':cotaId',$cotaId,PDO::PARAM_STR);    
             $query_produto->bindValue(':dataHora',$dataHora,PDO::PARAM_STR);                
             $query_produto->execute();
			  
	echo '<br/>';
	echo '<div class="comunicado">Cotação está em Processo de Análise!</div><!--aviso-->';

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

É por aí a coisa.... se você não alterar os campos que mencionei, terias que usar mais de uma clausula AND  para cara campo que quer comparar deixando a instrução grande demais comprometendo o desempenho.

 

PS: não tenho como testar... então não garanto que vá funcionar. 

 

Postado

Caro amigo

 

Grato por sua ajuda, apenas uma dúvida:

 

Como preciso de informar DATA e HORA, o input ficaria assim no caso do datetime:

 

<input type="datetime" id="dtHrs" name="dtHrs" /> seria isso ?

 

Grato,

 

Renato

  • Moderador
Postado

@remazela Olá, Não necessariamente!

 

Até porque o tipo datetime ainda não é um atributo que funciona em todos os navegadores. No momento acho que só o opera e o safari interpretam.

 

Se você quiser usar apenas um campo, é possível utilizando jQuery e um plugin específico

como por exemplo o 

datetimepicker 

http://xdsoft.net/jqplugins/datetimepicker/

 

ou 

 

Format Datetime

https://github.com/agschwender/jquery.formatDateTime

 

Usando eles você pode enviar para  php o formato certo.

 

Mas se não for usar, também dá para fazer com campos separados e depois mescla-los.

 

Por exemplo:

 

<input type="text" id="dt" name="dt" />
<input type="text" id="Hrs" name="Hrs" />

 

No php


 

$dt = $_POST["dt"];
$hrs = $_POST["Hrs"];
$datetime = $dt . " " . $hrs;

Mas agora torna um outro problema. O usuário não vai querer ficar digitando neste formato:
2017-01-20 15:03:00

Então você pode permitir que ele escreva a data convencional brasileira como 20/01/2017   e no php você ajusta ela para o formato correto desta forma:


Crie uma função que separe os valores a partir de um caractere de separação como a barra e inverta os valores.

 

function converteData($data){
    if(count(explode("/",$data)) > 1): 
         return implode("-",array_reverse(explode("/",$data)));
    elseif(count(explode("-",$data)) > 1): 
         return implode("/",array_reverse(explode("-",$data)));
    endif;
}

Existe um jeito mais "simples" de fazer mas aí você teria que criar duas funções distintas para converter de uma para outra. Com esta tanto faz o jeito que vai receber a data, sempre dará o inverso de acordo com o seu objetivo.

Por exemplo SE usar a função com o formato do SQL, ele retorna o formato brasileiro. 
SE usar a função com o formato brasileiro, ele retorna o formato do SQL !

echo converteData("20/01/2017");
//Resultará em 2017-01-20

echo converteData("2017-01-20");
//resultará em 20/01/2017


Com isso podemos novamente reescrever o código ali em cima desta forma:

//inclui o arquivo php que contem a função e outras.
include 'funcoesDoSistema.php'; 
//Pega os valores vindo do campo
$dt = $_POST["dt"];
$hrs = $_POST["Hrs"];

$dataConvertida = converteData($dt);
$dataHora = $dataConvertida . " " . $hrs;

 

Agora que tens já a variável que recebe a data e hora juntas, você pode usar na sua aplicação no exemplo que postei mais acima em outro post!

 

Acho que agora fui mais claro!

 

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...