Ir para conteúdo

Arquivado

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

bnogueira02

Agendamento de publicação com PHP

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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/>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

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/>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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