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 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;
}}
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.É 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());
>
É 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.
>
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.
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);
?>>
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 ?>¶r=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'];?>¶r=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 ?>¶r=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'];?>¶r=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>>
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 ?>¶r=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'];?>¶r=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>
**
tinha um ponto e vírgula depois de $cod_id