Ir para conteúdo

POWERED BY:

Arquivado

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

manica

[Resolvido] Bug estranho usando o Firefox

Recommended Posts

Olá pessoal,

No decorrer do desenvolvimento de um sistema em PHP utilizando PDO, MYSQL e rodando em um servidor Cloud WHM, identificamos um bug um tanto estranho.

 

Em determinada tela do sistema onde é realizado a mudança de status dos eventos cadastrados no sistema, ao realizar essa mudança de status do evento deve ser inserido um registro no banco, mas está inserindo 3 registros com as mesmas informações, a principio parece ser um problema na programação, mas utilizando o Chrome o problema não ocorre, testamos no IE9 também não ocorre o problema, apenas no Firefox ocorre esse problema de inserir 3 registros com as mesmas informações.

 

Já fizemos limpeza de cache que acredito não ter muito haver.

 

Alguém tem ideia do que pode estar ocorrendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está usando Ajax ou JS de alguma maneira neste momento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está sendo usando Ajax ou qualquer biblioteca javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a linha de comando PDO vocês estão utilizando para inserir este valor? Levando em consideração que existem diferentes possibilidades de inserir dados com PDO, já realizaram outros testes através de novos procedimentos?

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

leomarriel,

 

Não tentamos utilizar outra formas de inserção com PDO.

 

A forma que estou utilizando para inserir segue abaixo.

 

public function setItemHistorico($codigo='', $data='', $hora='', $mensagem='', $usuarioCriador='', $usuarioDestino='', $evento='', $statusEvento='', $conteudo='', $tipoHistorico='', $status='')
{
 if (empty($data) || $data == '00/00/0000')
  $data = date('Y-m-d');
 if (empty($hora))
  $hora = date('H:i:s');
 if (empty($mensagem))
  throw new Exception('informe_mensagem');
 if (empty($usuarioCriador))
  throw new Exception('faca_login_executar_acao');
 if (empty($evento))
  throw new Exception('informe_evento');
 if (empty($statusEvento))
  throw new Exception('informe_status_evento');
 if (empty($status))
  $status = '1';

 if (empty($codigo))
 {
  $consulta = $this->dbConnection->prepare("INSERT INTO itemhistorico (
   data, 
   hora, 
   mensagem, 
   usuariocriador, 
   usuariodestino, 
   evento, 
   statusevento, 
   conteudo, 
   tipohistorico, 
   status) 
  VALUES (
   :data, 
   :hora, 
   :mensagem, 
   :usuariocriador, 
   :usuariodestino, 
   :evento, 
   :statusevento, 
   :conteudo, 
   :tipohistorico, 
   :status)");
 }
 else
 {
  $consulta = $this->dbConnection->prepare("UPDATE itemhistorico SET 
   data= :data, 
   hora= :hora, 
   mensagem= :mensagem, 
   usuariocriador= :usuariocriador, 
   usuariodestino= :usuariodestino, 
   evento= :evento, 
   statusevento= :statusevento, 
   conteudo= :conteudo, 
   tipohistorico= :tipohistorico, 
   status= :status
  WHERE codigo = :codigo  ");
  $consulta->bindParam(':codigo', $codigo, PDO::PARAM_INT);
 }
 $consulta->bindParam(':data', $data, PDO::PARAM_STR);
 $consulta->bindParam(':hora', $hora, PDO::PARAM_STR);
 $consulta->bindParam(':mensagem', $mensagem, PDO::PARAM_STR);
 $consulta->bindParam(':usuariocriador', $usuarioCriador, PDO::PARAM_STR);
 $consulta->bindParam(':usuariodestino', $usuarioDestino, PDO::PARAM_STR);
 $consulta->bindParam(':evento', $evento, PDO::PARAM_STR);
 $consulta->bindParam(':statusevento', $statusEvento, PDO::PARAM_STR);
 $consulta->bindParam(':conteudo', $conteudo, PDO::PARAM_STR);
 $consulta->bindParam(':tipohistorico', $tipoHistorico, PDO::PARAM_STR);
 $consulta->bindParam(':status', $status, PDO::PARAM_STR);
 $consulta->execute();
 if (empty($codigo))
 {
  return $this->dbConnection->lastInsertId();
 }
 else
 {
  return $codigo;
 }
}

 

Abaixo segue a classe do objeto "$this->dbConnection".

 

class DB extends PDO
{
private $dsn = DB_LINK;
private $user = DB_USER;
private $password = DB_PASS;
public $handle = null;

public function __construct( )
{
 try
 {
  if ( $this->handle == null )
  {
   $pdo = parent::__construct( $this->dsn , $this->user , $this->password );
   $this->handle = $pdo;
   $this->exec("SET NAMES utf8");
   $this->exec("SET character_set='utf8'");
   $this->exec("SET collation_connection='utf8_general_ci'"); 
   $this->exec("SET character_set_connection='utf8'"); 
   $this->exec("SET character_set_client='utf8'"); 
   $this->exec("SET character_set_results='utf8'");
   if( $pdo instanceof PDO )
   {
    $this->handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   }
   return $this->handle;
  }
 }
 catch ( Exception $e )
 {
  $erros[] = $e->getMessage();
 }
}

public function __destruct( )
{
 $this->handle = NULL;
}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja este documento, e faça seus testes. Realmente um bug muito estranho.

 

Existem diferentes formas de se executar uma prepared statement com PDO:
// 1 - Usando "?" nos pontos-chave
$stmt = $pdo->prepare('INSERT INTO usuarios (nome, login) VALUES (?,?)');

// Passando os valores a serem usados no primeiro e segundo "?"
$dados = array('Rubens', 'rubens');
$consultou = $stmt->execute($dados);

// 2 - Usando pontos-chave nomeados
$stmt = $pdo->prepare('INSERT INTO usuarios (nome, login) VALUES (:nome, :login)');

// Passando os valores a serem usados em :nome e :login
array(':nome' => 'Rubens', ':login' => 'rubens');
$consultou = $stmt->execute($dados);

// 3 - Fazendo binding de parametros
$stmt = $pdo->prepare('INSERT INTO usuarios (nome, login) VALUES (:nome, :login)');

// Fazendo o binding
$nome = 'Rubens';
$login = 'rubens';
$stmt->bindParam(':nome', $nome, PDO::PARAM_STR, 128);
$stmt->bindParam(':login', $login, PDO::PARAM_STR, 20);

// Executando a SQL com os valores definidos com binding
$consultou = $stmt->execute();

 

Documento: phpbrasil

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu vou testar outras formas, mas acredito que não seja esse problema, pois em outras circunstâncias utilizamos a mesma função e não acontece o bendito do problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Eu vou testar outras formas, mas acredito que não seja esse problema, pois em outras circunstâncias utilizamos a mesma função e não acontece o bendito do problema.

 

Concordo plenamente, porém não vejo outra saída inicialmente a não ser eliminar essas possibilidades.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

encontramos o problema, era a duplicidade da tag:

 

<link rel="shortcut icon" href="" />

 

O browser executava uma vez e mais duas vezes devido a duplicidade da tag shortcut icon. O firefox provavelmente chama a mesma página quando o href do shortcut está vazio. E o engraçado que acontece apenas no firefox do windows testamos em Mac não ocorreu o problema.

 

Não sei se alguém tinha conhecimento disso, mas foi isso que aconteceu.

 

Valeu.

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.