Ir para conteúdo

Arquivado

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

paikoala

Erro com contador de Visualizações em PDO

Recommended Posts

Usei um código já pronto usando conexão MYSQL que já estão ficando ultrapassados e fica mostrando um alerta na pagina. Fiz a conversão dele para PDO mas não esta funcionando direito. O código antigo cria a tabela no banco de dados e atualiza normalmente a cada visualização de pagina ou usuário único novo entrando no site, mas o novo código em PDO só atualiza uma tabela já existente, chegando a um novo dia ele não cria a nova tabela para poder registrar o pedido. Ambos os códigos estão aqui neste post. Não entendo muito de PDO, alguém poderia me ajudar por favor? O que posso ter feito de errado?

Antigo Código com MYSQL:

<?php



require ('conexao.php');

 //  Configurações do Script

 // ==============================

 $_CV['registraAuto'] = true;       // Registra as visitas automaticamente?

 $_CV['conectaMySQL'] = true;       // Abre uma conexão com o servidor MySQL?

 $_CV['iniciaSessao'] = true;       // Inicia a sessão com um session_start()?

 $_CV['servidor'] = $host;    // Servidor MySQL

 $_CV['usuario'] = $username;          // Usuário MySQL

 $_CV['senha'] = $pass;                // Senha MySQL

 $_CV['banco'] = $dbname;            // Banco de dados MySQL

 $_CV['tabela'] = 'visitas';        // Nome da tabela onde os dados são salvos



 // Verifica se precisa fazer a conexão com o MySQL

 if ($_CV['conectaMySQL'] == true) {

    $_CV['link'] = mysql_connect($_CV['servidor'], $_CV['usuario'], $_CV['senha']) or die("MySQL: Não foi possível conectar-se ao servidor [".$_CV['servidor']."].");

    mysql_select_db($_CV['banco'], $_CV['link']) or die("MySQL: Não foi possível conectar-se ao banco de dados [".$_CV['banco']."].");

 }

 // Verifica se precisa iniciar a sessão

 if ($_CV['iniciaSessao'] == true) {

    session_start();

 }

/**

 * Registra uma visita e/ou pageview para o visitante

 */

 function registraVisita() {

    global $_CV;

    $sql = "SELECT COUNT(*) FROM `".$_CV['tabela']."` WHERE `data` = CURDATE()";

    $query = mysql_query($sql);

    $resultado = mysql_fetch_row($query);

    // Verifica se é uma visita (do visitante)

    $nova = (!isset($_SESSION['ContadorVisitas'])) ? true : false;

    // Verifica se já existe registro para o dia

    if ($resultado[0] == 0) {

        $sql = "INSERT INTO `".$_CV['tabela']."` VALUES (NULL, CURDATE(), 1, 1)";

    } else {

        if ($nova == true) {

            $sql = "UPDATE `".$_CV['tabela']."` SET `uniques` = (`uniques` + 1), `pageviews` = (`pageviews` + 1) WHERE `data` = CURDATE()";

        } else {

            $sql = "UPDATE `".$_CV['tabela']."` SET `pageviews` = (`pageviews` + 1) WHERE `data` = CURDATE()";

        }

    }

    // Registra a visita

    mysql_query($sql);

    // Cria uma variavel na sessão

    $_SESSION['ContadorVisitas'] = md5(time());

 }

/**

 * Função que retorna o total de visitas

 *

 * @param string $tipo - O tipo de visitas a se pegar: (uniques|pageviews)

 * @param string $periodo - O período das visitas: (hoje|mes|ano)

 *

 * @return int - Total de visitas do tipo no período

 */

 function pegaVisitas($tipo = 'uniques', $periodo = 'hoje') {

    global $_CV;

    switch($tipo) {

        default:

        case 'uniques':

            $campo = 'uniques';

            break;

        case 'pageviews':

            $campo = 'pageviews';

            break;

    }

    switch($periodo) {

        default:

        case 'hoje':

            $busca = "`data` = CURDATE()";

            break;

        case 'mes':

            $busca = "`data` BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND LAST_DAY(CURDATE())";

            break;

        case 'ano':

            $busca = "`data` BETWEEN DATE_FORMAT(CURDATE(), '%Y-01-01') AND DATE_FORMAT(CURDATE(), '%Y-12-31')";

            break;

    }

    // Faz a consulta no MySQL em função dos argumentos

    $sql = "SELECT SUM(`".$campo."`) FROM `".$_CV['tabela']."` WHERE ".$busca;

    $query = mysql_query($sql);

    $resultado = mysql_fetch_row($query);

    // Retorna o valor encontrado ou zero

    return (!empty($resultado)) ? (int)$resultado[0] : 0;

 }

 if ($_CV['registraAuto'] == true) { registraVisita(); }

?>

Novo Código com PDO:

<?php



require ('conexao.php'); 

 //  Configurações do Script

 // ==============================

 $_CV['registraAuto'] = true;       // Registra as visitas automaticamente?

 $_CV['conectaMySQL'] = true;       // Abre uma conexão com o servidor MySQL?

 $_CV['iniciaSessao'] = true;       // Inicia a sessão com um session_start()?

 $_CV['servidor'] = $host;    // Servidor MySQL

 $_CV['usuario'] = $username;          // Usuário MySQL

 $_CV['senha'] = $pass;                // Senha MySQL

 $_CV['banco'] = $dbname;            // Banco de dados MySQL

 $_CV['tabela'] = 'visitas';        // Nome da tabela onde os dados são salvos



 // Verifica se precisa fazer a conexão com o MySQL

 if ($_CV['conectaMySQL'] == true) {

    $_CV['link'] = new PDO('mysql:host='.$_CV['servidor'].';dbname='.$_CV['banco'].'', ''.$_CV['usuario'].'', ''.$_CV['senha'].'') or die("MySQL: Não foi possível conectar-se ao servidor [".$_CV['servidor']."].");

 }

 // Verifica se precisa iniciar a sessão

 if ($_CV['iniciaSessao'] == true) {

    session_start();

 }

/**

 * Registra uma visita e/ou pageview para o visitante

 */

 function registraVisita() {

    global $_CV;

    $sql = "SELECT COUNT(*) FROM `".$_CV['tabela']."` WHERE `data` = CURDATE()";

    $query = $_CV['link']->query ($sql);

    $resultado = $query->fetchAll();

    // Verifica se é uma visita (do visitante)

    $nova = (!isset($_SESSION['ContadorVisitas'])) ? true : false;

    // Verifica se já existe registro para o dia

    if ($resultado[0] == 0) {

        $sql = "INSERT INTO `".$_CV['tabela']."` VALUES (NULL, CURDATE(), 1, 1)";

    } else {

        if ($nova == true) {

            $sql = "UPDATE `".$_CV['tabela']."` SET `uniques` = (`uniques` + 1), `pageviews` = (`pageviews` + 1) WHERE `data` = CURDATE()";

        } else {

            $sql = "UPDATE `".$_CV['tabela']."` SET `pageviews` = (`pageviews` + 1) WHERE `data` = CURDATE()";

        }

    }

    // Registra a visita

    $_CV['link']->query ($sql);

    // Cria uma variavel na sessão

    $_SESSION['ContadorVisitas'] = md5(time());

 }



/**

 * Função que retorna o total de visitas

 *

 * @param string $tipo - O tipo de visitas a se pegar: (uniques|pageviews)

 * @param string $periodo - O período das visitas: (hoje|mes|ano)

 *

 * @return int - Total de visitas do tipo no período

 */

 function pegaVisitas($tipo = 'uniques', $periodo = 'hoje') {

    global $_CV;

    switch($tipo) {

        default:

        case 'uniques':

            $campo = 'uniques';

            break;

        case 'pageviews':

            $campo = 'pageviews';

            break;

    }

    switch($periodo) {

        default:

        case 'hoje':

            $busca = "`data` = CURDATE()";

            break;

        case 'mes':

            $busca = "`data` BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND LAST_DAY(CURDATE())";

            break;

        case 'ano':

            $busca = "`data` BETWEEN DATE_FORMAT(CURDATE(), '%Y-01-01') AND DATE_FORMAT(CURDATE(), '%Y-12-31')";

            break;

    }

    // Faz a consulta no MySQL em função dos argumentos

    $sql = "SELECT SUM(`".$campo."`) FROM `".$_CV['tabela']."` WHERE ".$busca;

    $query = $_CV['link']->query ($sql);

    $resultado = $query->fetchAll();

    // Retorna o valor encontrado ou zero

    return (!empty($resultado)) ? (int)$resultado[0] : 0;

 }

 if ($_CV['registraAuto'] == true) { registraVisita(); }



?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

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