Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, sou novo aqui mais já programo a algum tempo. Talvez minha duvida seja tosca. Mas beleza. Tenho a seguinte função.
public function publicar() {
try {
$materiaDAO = new materiaDAOIMP();
$materiaDTO = new materiaDTO();
$materiaDTO->setOp(3);
$dados = $materiaDAO->pesquisarMateria($materiaDTO);
foreach ($dados as $linhas) {
$altMatDTO = new materiaDTO();
$dataAgora = date('d/m/Y H:i:s');
$data_banco = date('d/m/Y H:i:s', $linhas->getAgendamento());
if (strtotime($dataAgora) <= strtotime($data_banco)) {
$altMatDTO->setOp(4);
$altMatDTO->setId($linhas->getId());
$materiaDAO->modificarMateria($altMatDTO);
echo 'entrei';
}
}
return true;
} catch (Exception $exc) {
echo $exc->getTraceAsString();
return false;
}
}
Estou utlizando ela para fazer um update no status da Materia quando a data do slq for igual a do banco. Porem ela não esta entrando na comparação de data. o restante esta funcionando. Alguém pode me ajudar?Altere para isso:
$dataAgora = new DateTime('now');
$dataBanco = DateTime::createFromFormat('d/m/Y H:i:s', $linhas->getAgendamento());
if ($dataAgora <= $dataBanco) {
// ... resto do codigo
Lembre-se de mudar o primeiro parâmetro de DateTime::createFromFormat para o formato que está vindo do banco de dadosData Agora 07/11/2014 11:27:33
Data Banco 31/12/1969 21:33:34
Data Agora STRTOTIME 1405088853
Data Banco STRTOTIME
Data banco está retornando vazia.
Tente com o código que passei acima
>
Altere para isso:
$dataAgora = new DateTime('now');
$dataBanco = DateTime::createFromFormat('d/m/Y H:i:s', $linhas->getAgendamento());
if ($dataAgora <= $dataBanco) {
// ... resto do codigo
Lembre-se de mudar o primeiro parâmetro de DateTime::createFromFormat para o formato que está vindo do banco de dados
Retornou esse erro:
Catchable fatal error: Object of class DateTime could not be converted to string in C:\xampp\htdocs\cmsbr\CTR\materiaCTR.php on line 128
O que tem na linha 128?
Em que momento você ta dando o $linhas->setAgendamento() ?
Vi que você chama o get, mas é provável que se problema esteja na hora de buscar a data do agendamento.
public function publicar() {
try {
$materiaDAO = new materiaDAOIMP();
$materiaDTO = new materiaDTO();
$materiaDTO->setOp(3);
$dados = $materiaDAO->pesquisarMateria($materiaDTO);
foreach ($dados as $linhas) {
$altMatDTO = new materiaDTO();
$dataAgora = new datetime('now');
$data_banco = DateTime::createFromFormat('d/m/Y H:i:s', $linhas->getAgendamento());
//$dataAgora = date('d/m/Y H:i:s');
//$data_banco = date('d/m/Y H:i:s', $linhas->getAgendamento());
128 - echo 'Data Agora ' . $dataAgora . '<br/>';
echo 'Data Banco ' . $data_banco . '<br/>';
echo 'Data Agora STRTOTIME ' . strtotime($dataAgora) . '<br />';
echo 'Data Banco STRTOTIME ' . strtotime($data_banco) . '<br />';
if (strtotime($dataAgora) <= strtotime($data_banco)) {
$altMatDTO->setOp(4);
$altMatDTO->setId($linhas->getId());
$materiaDAO->modificarMateria($altMatDTO);
echo 'entrei';
}
}
return true;
} catch (Exception $exc) {
echo $exc->getTraceAsString();
return false;
}
}
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of materiaDAOIMP
*
* @author MARKETING
*/
require_once 'conexaoDAOIMP.php';
require_once '../DTO/categoriaDTO.php';
require_once '../DTO/materiaDTO.php';
require_once 'materiaDAO.php';
class materiaDAOIMP implements materiaDAO {
//put your code here
public function modificarMateria(materiaDTO $materiaDTO) {
try {
$conexao = new conexaoDAOIMP();
$con = $conexao->conectaDB();
$stmt = $con->stmt_init();
$comando = "";
switch ($materiaDTO->getOp()) {
case 1:
$comando = "insert into materia(titulo, linha_fina, categoria, imagem, texto, status, data_publi, tags, agendamento) values (?, ?, ?, ?, ?, ?, ?, ?, ?);";
$stmt->prepare($comando) or die('Erro Preparação');
$stmt->bind_param('ssississs', $titulo, $linha_fina, $categoria, $imagem, $texto, $status, $data_publi, $tags, $agendamento);
$categoriaDTO = new categoriaDTO();
$categoriaDTO = $materiaDTO->getCategoria();
$titulo = $materiaDTO->getTitulo();
$linha_fina = $materiaDTO->getLinha_fina();
$categoria = $categoriaDTO->getId();
$imagem = $materiaDTO->getImagem();
$texto = $materiaDTO->getTexto();
$status = $materiaDTO->getStatus();
$data_publi = $materiaDTO->getData_publi();
$tags = $materiaDTO->getTags();
$agendamento = $materiaDTO->getAgendamento();
$stmt->execute();
$stmt->close();
break;
case 2:
$comando = "update materia set titulo=?, linha_fina=?, categoria=?, imagem=?, texto=?, status=?, data_publi=?, tags=?, agendamento=? where id=?;";
$stmt->prepare($comando) or die('Erro Preparação');
$stmt->bind_param('ssississsi', $titulo, $linha_fina, $categoria, $imagem, $texto, $status, $data_publi, $tags, $agendamento, $id);
echo 'entrei';
$categoriaDTO = new categoriaDTO();
$categoriaDTO = $materiaDTO->getCategoria();
$id = $materiaDTO->getId();
$titulo = $materiaDTO->getTitulo();
$linha_fina = $materiaDTO->getLinha_fina();
$categoria = $categoriaDTO->getId();
$imagem = $materiaDTO->getImagem();
$texto = $materiaDTO->getTexto();
$status = $materiaDTO->getStatus();
$data_publi = $materiaDTO->getData_publi();
$tags = $materiaDTO->getTags();
$agendamento = $materiaDTO->getAgendamento();
$stmt->execute();
$stmt->close();
break;
case 3:
$comando = "delete from materia where id=?";
$stmt->prepare($comando) or die('Erro Preparação');
$stmt->bind_param('i', $id);
$id = $materiaDTO->getId();
$stmt->execute();
$stmt->close();
break;
case 4:
$comando = "update materia set status=0 where id=?;";
$stmt->prepare($comando) or die('Erro Preparação');
$stmt->bind_param('i', $id);
$id = $materiaDTO->getId();
$stmt->execute();
$stmt->close();
break;
default:
break;
}
$conexao->closeDB($con);
return true;
} catch (Exception $exc) {
echo $exc->getMessage();
return false;
}
}
public function pesquisarMateria(materiaDTO $materiaDTO) {
try {
$conexao = new conexaoDAOIMP();
$dados[] = new materiaDTO();
$con = $conexao->conectaDB();
$stmt = $con->stmt_init();
$comando = "";
switch ($materiaDTO->getOp()) {
case 1:
$comando = "SELECT m.id, m.titulo, m.linha_fina, m.categoria, m.imagem, m.texto, m.status, m.data_publi, m.tags, m.agendamento, c.id, c.nome, c.status FROM materia m INNER JOIN categoria c ON c.id = m.categoria where m.titulo like ? order by m.id desc;";
$stmt->prepare($comando) or die('Erro preparação');
$stmt->bind_param('s', $titulo);
$titulo = '%' . $materiaDTO->getTitulo() . '%';
$stmt->execute();
$stmt->bind_result($idmat, $titulomat, $linhamat, $catmat, $imagemat, $textomat, $statusmat, $datamat, $tagmat, $agendamentomat, $idcat, $nomecat, $statuscat);
break;
case 2:
$comando = "SELECT m.id, m.titulo, m.linha_fina, m.categoria, m.imagem, m.texto, m.status, m.data_publi, m.tags, m.agendamento, c.id, c.nome, c.status FROM materia m INNER JOIN categoria c ON c.id = m.categoria where m.id=?;";
$stmt->prepare($comando) or die('Erro preparação');
$stmt->bind_param('i', $id);
$id = $materiaDTO->getId();
$stmt->execute();
$stmt->bind_result($idmat, $titulomat, $linhamat, $catmat, $imagemat, $textomat, $statusmat, $datamat, $tagmat, $agendamentomat, $idcat, $nomecat, $statuscat);
break;
case 3: //seleção agendade
$comando = "SELECT * from materia where status=1 and agendamento != '0000-00-00 00:00:00';";
$stmt->prepare($comando) or die('Erro preparação');
$stmt->execute();
$stmt->bind_result($idmat, $titulomat, $linhamat, $catmat, $imagemat, $textomat, $statusmat, $datamat, $tagmat, $agendamentomat);
break;
}
$cont = 0;
while ($stmt->fetch()) {
$catDTO = new categoriaDTO();
$catDTO->setId($idcat);
$catDTO->setStatus($statuscat);
$catDTO->setNome($nomecat);
$dado = new materiaDTO();
$dado->setId($idmat);
$dado->setTitulo($titulomat);
$dado->setLinha_fina($linhamat);
$dado->setCategoria($catDTO);
$dado->setImagem($imagemat);
$dado->setTexto($textomat);
$dado->setStatus($statusmat);
$dado->setData_publi($datamat);
$dado->setTags($tagmat);
$dado->setAgendamento($agendamentomat);
$dados[$cont] = $dado;
$cont++;
}
$stmt->close();
$conexao->closeDB($con);
return $dados;
} catch (Exception $exc) {
echo $exc->getMessage();
return null;
}
}
}
As 2 classes. DAO e CTR
E qual é a linha 128?
128 - echo 'Data Agora ' . $dataAgora . '<br/>';
Mude para
$dataAgora->format('d/m/Y')
Não consegui compreender
De:
echo 'Data Agora ' . $dataAgora . '<br/>';
Mude para :
echo 'Data Agora ' . $dataAgora->format('d/m/Y') . '<br/>';
Deu certo fiz assim:
echo 'Data Agora ' . $dataAgora->format('d/m/Y H:i:s') . '<br/>';
Mas agora deu esse erro.
Catchable fatal error: Object of class DateTime could not be converted to string in C:\xampp\htdocs\cmsbr\CTR\materiaCTR.php on line 130
echo 'Data Banco ' . $data_banco . '<br/>';
de:
echo 'Data Banco ' . $data_banco . '<br/>';
para:
echo 'Data Banco ' . $data_banco->format('d/m/Y H:i:s'). '<br/>';
Grande parte dessa confusão poderia ser resolvida usando campos do tipo data na base de dados :thumbsup:
No Banco de dados esta como Datatime. e não como String
**Fatal error**: Call to a member function format() on a non-object in **C:\xampp\htdocs\cmsbr\CTR\materiaCTR.php** on line **129**
echo 'Data Banco ' . $data_banco->format('d/m/Y H:i:s') . '<br/>';A variável se chama $data_banco ou $dataBanco?
$data_banco
em que formato a data está vindo do banco de dados?
2014-11-07 12:30:00
Esse é um registro direto do banco.
Então, mude isso:
$dataBanco = DateTime::createFromFormat('d/m/Y H:i:s', $linhas->getAgendamento());
para
$data_banco = DateTime::createFromFormat('Y-m-d H:i:s', $linhas->getAgendamento());
public function publicar() {
try {
$materiaDAO = new materiaDAOIMP();
$materiaDTO = new materiaDTO();
$materiaDTO->setOp(3);
$dados = $materiaDAO->pesquisarMateria($materiaDTO);
foreach ($dados as $linhas) {
$altMatDTO = new materiaDTO();
$dataAgora = new datetime('now');
//$dataAgora = date('d/m/Y H:i:s');
$data_banco = date('d/m/Y H:i:s', $linhas->getAgendamento());
echo 'Data Agora ' . $dataAgora->format('d/m/Y H:i:s') . '<br/>';
echo 'Data Banco ' . $data_banco . '<br/>';
echo 'Data Agora STRTOTIME ' . $dataAgora->format('d/m/Y H:i:s') . '<br />';
echo 'Data Banco STRTOTIME ' . $data_banco . '<br />';
if ($dataAgora <= strtotime($data_banco)) {
$altMatDTO->setOp(4);
$altMatDTO->setId($linhas->getId());
$materiaDAO->modificarMateria($altMatDTO);
echo 'entrei';
}
}
return true;
} catch (Exception $exc) {
echo $exc->getTraceAsString();
return false;
}
}
retorno :
Data Agora 07/11/2014 16:04:16
Data Banco 31/12/1969 21:00:00
Data Agora STRTOTIME 07/11/2014 16:04:16
Data Banco STRTOTIME 31/12/1969 21:00:00
Como deveria estar:
Data Agora 07/11/2014 16:04:16
Data Banco 2014-11-21 10:01:00
Data Agora STRTOTIME 07/11/2014 16:04:16
Data Banco STRTOTIME 2014-11-21 10:01:00
não faço ideia já tentei tudo que disseram e só deu erro.
Troque tudo isso ai, por:
public function publicar() {
try {
$materiaDAO = new materiaDAOIMP();
$materiaDTO = new materiaDTO();
$materiaDTO->setOp(3);
$dados = $materiaDAO->pesquisarMateria($materiaDTO);
foreach ($dados as $linhas) {
$altMatDTO = new materiaDTO();
$dataAgora = new DateTime('now');
$data_banco = DateTime::createFromFormat('Y-m-d H:i:s', $linhas->getAgendamento());
echo 'Data Agora ' . $dataAgora->format('d/m/Y H:i:s') . '<br/>';
echo 'Data Banco ' . $data_banco->format('d/m/Y H:i:s') . '<br/>';
if ($dataAgora <= $data_banco) {
$altMatDTO->setOp(4);
$altMatDTO->setId($linhas->getId());
$materiaDAO->modificarMateria($altMatDTO);
echo 'entrei';
}
}
return true;
} catch (Exception $exc) {
echo $exc->getTraceAsString();
return false;
}
}O Retorno Foi esse.
Data Agora 07/11/2014 16:17:39
Data Banco
Data Agora STRTOTIME 07/11/2014 16:17:39
Data Banco STRTOTIME
Dei um print_r na $linhas resutato foi
materiaDTO Object ( [id:materiaDTO:private] => [titulo:materiaDTO:private] => [linha_fina:materiaDTO:private] => [categoria:materiaDTO:private] => [imagem:materiaDTO:private] => [texto:materiaDTO:private] => [status:materiaDTO:private] => [data_publi:materiaDTO:private] => [tags:materiaDTO:private] => [agendamento:materiaDTO:private] => [op:materiaDTO:private] => )
Dá um echo nas variáveis $dataAgora e $data_banco depois de receber os valores e posta aqui pra vermos o que pode ser, dá um echo também no strtotime($dataAgora) e strtotime($data_banco).
Só com debug pra conseguir identificar o problema.