Ir para conteúdo

POWERED BY:

Arquivado

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

joeythai

É erro de sintaxe ou de lógica ?

Recommended Posts

Bom dia pessoal,

 

Está quase pronto o mini sistema de cálculo de tempo que estou fazendo, porém, não estou conseguindo fazer um update na data final, estou pegando o submit de fora de um formulário, por isso, usei o método $_GET, mesmo assim não funcionou, ele está passando o id certinho, só não faz o update. Eis o código para darem uma olhada. Aceito sugestões de melhorias também, sou novo em PHP, então toda ajuda é bem vinda.

 

 
 <?php 
 ini_set('display_errors','on');
 error_reporting(E_ALL); 
 
 
 function formataData($data){
  $data = implode('/', explode('-', $data));
  return date('d/m/Y H:i:s', strtotime($data));
  }
 
 date_default_timezone_set('America/Sao_Paulo');
 
 include 'includes/mysqlconecta.php';
 
    if($_SERVER['REQUEST_METHOD']=='POST' &&  isset($_POST['play'])){
  extract($_POST);   
  
   $data = date('Y-m-d H:i:s'); 
 
   $login = $_SESSION['login'];    
  
  if(empty($_POST['area_acionada'] )== 'Selecione'){
  
 echo '<script>alert("Por favor, selecione a equipe que deseja acionar")</script>;'; 
 
  }
  
   elseif(isset($_POST['area_acionada'])){
 $area_acionada = $_POST['area_acionada']; 
 
  $insereDados = "INSERT INTO tb_time_acionamento VALUES (null, '$login','$data',null, null,null,'$area_acionada',null,null,null); ";
  }  
  
mysql_query($insereDados); 
$vai = 'acionamento_teste.php';
header('Location:'.$vai); 
  }  
 
 
  
  if(isset($_GET['parar'])){
  extract($_POST);
$cod_id = $_GET['cod_id'];
      $dataF = date('Y-m-d H:i:s');
  $upDados = "UPDATE tb_time_acionamento SET fim = '$dataF' WHERE cod_id = '$cod_id'; ";
  
mysql_query($upDados); 
  }  
  
  $dataF = date('Y-m-d H:i:s');
  $data = date ('2015-04-20 18:00:00');
     
$total = strtotime($dataF - $data);
echo $total;
   ?>
 
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TESTE - Acionamento</title>
 
<style type="text/css">
 
#play{
border-radius:100px;
background-color:#096;
color:#FFF;
}
 
#pause{
border-radius:100px;
background-color:#026;
color:#FFF;
}
 
#stop{
border-radius:100px;
background-color:#F00;
color:#FFF;
}
 
#parar{
border-radius:100px;
background-color:#F00;
color:#FFF;
}
 
table{
width:150px;
font-size:14px;
}
.cabec{
background-color:#069;
color:#FFF;
}
#area_acionada{
width:200px;
}
tr:hover{
 
}
button{
outline:0;
}
 
.acao:hover{
background-color:#999;
color:#FFF;
}
</style>
 
</head>
 
<body>
 
 
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<div id="time_acionado">
     <table>
        
        <th colspan="4"><h1>Acionamento de Equipe</h1></th>
      
        <tr class="acao">
        <td colspan="4">
        <label><strong>Área Acionada:</strong></label>
        <select name="area_acionada" id="area_acionada">
        <option value="selecione" selected disabled="disabled">Selecione</option>
         <option value="Microsoft">Microsoft</option>
            <option value="Redes">Redes</option>
            <option value="Telecom">Telecom</option>
            <option value="Outros">Outros</option>
           
        </select>
        
        </td>
        </tr>
        <tr>
        
        <td>        
        
        <button type="submit" name="play"  id="play">Play</button>
      </td>
        <td>
        <button type="submit" name="pause" id="pause">II</button>
       </td>
        <td>
      
        <button type="button" id="stop" name="stop">Stop</button>
        </td>
        </tr>     
        </table>
        </div>
        
       </form>
    
  <?php
  $pega = "SELECT * FROM tb_time_acionamento";
  $res = mysql_query($pega);
    ?>
 
<table>
<tr>
<td class="cabec">Equipe</td>
    <td class="cabec">Inicio</td>
    <td class="cabec">Fim</td>
    <td class="cabec">Total</td>
    <td class="cabec">Ação</td>
</tr>
 
<?php
 while($linha = mysql_fetch_array($res)){
 
 
  ?>
<tr class="acao">
     <td onClick="avisa();"><? echo  $linha['equipe'];?></td>
        <td><? echo formataData($linha['inicio']);?></td>
        <td><? echo formataData($linha['fim']);?></td>  
        <td><? echo formataData($linha['total']);?></td>               
        <td><a href="acionamento_teste.php?cod_id=<?php echo $linha['cod_id'];?>"><button type="button" id="parar" name="parar">Parar</button></a></td>    
    </tr>
    <? } ?>
</table>
 
 
 
 
 
</body>
</html> 

Estou fazendo isso numa página só pois, o código é pequeno e não vale a pena separá-lo. Desde já muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É interessante como uma grande parte de programadores PHP acham que adicionando o display erros irá mostrar tudo quanto é falha que ele cometer.

 

Você está com problema de sintaxe MySQL, e como você saberá disso ? costume usar em suas consultas sempre a função

 mysql_error()

ou

mysql_errno()

para que o mysql retorne o erro caso ocorra algum.

mysql_query($upDados)or die(mysql_error());

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

É interessante como uma grande parte de programadores PHP acham que adicionando o display erros irá mostrar tudo quanto é falha que ele cometer.

 

Você está com problema de sintaxe MySQL, e como você saberá disso ? costume usar em suas consultas sempre a função

 mysql_error()

ou

mysql_errno()

para que o mysql retorne o erro caso ocorra algum.

mysql_query($upDados)or die(mysql_error());

 

 

**

$upDados = "UPDATE tb_time_acionamento SET fim = '$dataF' WHERE cod_id = '$cod_id'";

tinha um ponto e vírgula depois de $cod_id

Anderson, o ponto em vírgula em questão não influencia pois um finaliza o comando sql e o outro finaliza o comando php, o primeiro é opcional.

 

Alaerte vou seguir o seu conselho inserindo essas funções, porém, fiz o teste com as duas e nenhuma não retornou nenhum erro, creio que não é erro de sintaxe pois se fosse já teria sido exibido, esse é justamente o problema, não exibir nenhum erro para que eu possa corrigí-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Anderson, o ponto em vírgula em questão não influencia pois um finaliza o comando sql e o outro finaliza o comando php, o primeiro é opcional.

 

Alaerte vou seguir o seu conselho inserindo essas funções, porém, fiz o teste com as duas e nenhuma não retornou nenhum erro, creio que não é erro de sintaxe pois se fosse já teria sido exibido, esse é justamente o problema, não exibir nenhum erro para que eu possa corrigí-lo.

Dei um var_dump($upDados) e o PHP imprimiu NULL, mas como está null, não entendi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem valor.

 

Depure os recebimentos via GET e POST, dessa forma você saberá quais valores estão sendo enviados para sua página.

<?php
var_dump($_POST);
print '<br><br>';
var_dump($_GET);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sem valor.

 

Depure os recebimentos via GET e POST, dessa forma você saberá quais valores estão sendo enviados para sua página.

<?php
var_dump($_POST);
print '<br><br>';
var_dump($_GET);
?>

fiz esse debug ai que você falou e ele imprimiu :

 

array(0) { }

array(0) { }

 

não sendo passado o valor tanto do get, quanto pelo post. Esse update que quero fazer é apenas da data atual, eu não tenho esse campo no formulário, ou seja, não preciso de um formulário para isso. Será que tenho que fazer esse update de outra forma ? Pensando bem nunca vi um update que não utilize um formulário, todos os exemplos de updates são os mesmos, cadastros, fichas, etc, será que isso que está influenciando ?

fiz esse debug ai que você falou e ele imprimiu :

 

array(0) { }

array(0) { }

 

não sendo passado o valor tanto do get, quanto pelo post. Esse update que quero fazer é apenas da data atual, eu não tenho esse campo no formulário, ou seja, não preciso de um formulário para isso. Será que tenho que fazer esse update de outra forma ? Pensando bem nunca vi um update que não utilize um formulário, todos os exemplos de updates são os mesmos, cadastros, fichas, etc, será que isso que está influenciando ?

Alaerte, alterei essa linha no código, inserir depois da tag de fechamento ?>&parar=parar, após isso, já consegui exibir o erro do mysql "Erro 1292'

 

<code>

<td><a href="acionamento_teste.php?cod_id=<?php echo $linha['cod_id'];?>&parar=parar"><button type="button" id="parar" name="parar">Parar</button></a></td>

</code>

fiz esse debug ai que você falou e ele imprimiu :

 

array(0) { }

array(0) { }

 

não sendo passado o valor tanto do get, quanto pelo post. Esse update que quero fazer é apenas da data atual, eu não tenho esse campo no formulário, ou seja, não preciso de um formulário para isso. Será que tenho que fazer esse update de outra forma ? Pensando bem nunca vi um update que não utilize um formulário, todos os exemplos de updates são os mesmos, cadastros, fichas, etc, será que isso que está influenciando ?

Alaerte, alterei essa linha no código, inserir depois da tag de fechamento ?>&parar=parar, após isso, já consegui exibir o erro do mysql "Erro 1292'

 

<code>

<td><a href="acionamento_teste.php?cod_id=<?php echo $linha['cod_id'];?>&parar=parar"><button type="button" id="parar" name="parar">Parar</button></a></td>

</code>

agora já é exibo o debug que fiz, aparece

array(1) { ["cod_id"]=> string(2) "41" }

array(0) { }

 

em cada item que clico ele exibe o id correto.

 

Sem valor.

 

Depure os recebimentos via GET e POST, dessa forma você saberá quais valores estão sendo enviados para sua página.

<?php
var_dump($_POST);
print '<br><br>';
var_dump($_GET);
?>

Cara muito obrigado mesmo, consegui resolver aqui, agora está atualizando a data fim. Como o botão de ação não está no formulário e nem a data que eu preciso, eu passei o valor da variável via url e peguei via get, aí deu certo.

agora só preciso fazer o cálculo entre duas datas do tipo datetime, seria correto eu fazer ?

 

<code>

$dataF = date('Y-m-d H:i:s');
$total = strtotime(strtotime($dataF) - strtotime($data));

</code>

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz esse debug ai que você falou e ele imprimiu :

 

array(0) { }

array(0) { }

 

não sendo passado o valor tanto do get, quanto pelo post. Esse update que quero fazer é apenas da data atual, eu não tenho esse campo no formulário, ou seja, não preciso de um formulário para isso. Será que tenho que fazer esse update de outra forma ? Pensando bem nunca vi um update que não utilize um formulário, todos os exemplos de updates são os mesmos, cadastros, fichas, etc, será que isso que está influenciando ?

Alaerte, alterei essa linha no código, inserir depois da tag de fechamento ?>&parar=parar, após isso, já consegui exibir o erro do mysql "Erro 1292'

 

<code>

<td><a href="acionamento_teste.php?cod_id=<?php echo $linha['cod_id'];?>&parar=parar"><button type="button" id="parar" name="parar">Parar</button></a></td>

</code>

agora já é exibo o debug que fiz, aparece

array(1) { ["cod_id"]=> string(2) "41" }

array(0) { }

 

em cada item que clico ele exibe o id correto.

Cara muito obrigado mesmo, consegui resolver aqui, agora está atualizando a data fim. Como o botão de ação não está no formulário e nem a data que eu preciso, eu passei o valor da variável via url e peguei via get, aí deu certo.

agora só preciso fazer o cálculo entre duas datas do tipo datetime, seria correto eu fazer ?

 

<code>

$dataF = date('Y-m-d H:i:s');
$total = strtotime(strtotime($dataF) - strtotime($data));

</code>

Alterei o código para fazer o cálculo entre uma data atual que eu pego do sistema e subtraio a data de inicio salva na base de dados, mas não deu certo desse jeito:

 

<code>

if(isset($_GET['parar'])){
extract($_GET);
$cod_id = $_GET['cod_id'];
$data1 = "Select inicio from tb_time_acionamento where code_di = '$cod_id'";
$inicio = formataData($data1);
$fim = date('d/m/Y H:i:s');
// Converte as datas para objetos DateTime do PHP
// PARA O PHP 5.3 OU SUPERIOR
$inicio = DateTime::createFromFormat('d/m/Y H:i:s', $inicio);
//PARA O PHP 5.2
// $inicio = date_create_from_format('d/m/Y H:i:s', $inicio);
$fim = DateTime::createFromFormat('d/m/Y H:i:s', $fim);
// $fim = date_create_from_format('d/m/Y H:i:s', $fim);
// Calcula a diferença entre as duas datas
$intervalo = $inicio->diff($fim);
// Imprime a diferença entre as duas
// datas de modo formatado
$total = $intervalo->format(
'%H:%I:%S
');
$upDados = "UPDATE tb_time_acionamento SET fim = '$dataF', status = 'Encerrado', total = '$total' WHERE cod_id = '$cod_id' AND fim is NULL";
mysql_query($upDados) or die(' Erro ao realizar o update '.mysql_errno());
$vai ='acionamento_teste.php';
header('Location: '.$vai);
}

</code>

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.