Jump to content


Photo

Fazer Diferença De Horas Que Estão No Mysql, Mas...


  • Faça o login para participar
40 replies to this topic

#31 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 28/01/2009, 04:19

Mais ou menos sem.ponto.... buscamos o mesmo objetivo por caminhos diferentes... acho que no meu método é melhor hehehehehe
Tu só leu o final neh kkkkkkkkkkkkkkkkkkkkkk

Mas... acho que o WALLACE nunca teve tanta atenção hehehehe

Boa sorte aí camarada... Quando o Português estiver realmente unificado entenderei melhor essa coisa aí de PICA pra lá PICA mais pra lá hehehehehe

(y) Até mais

#32 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 28/01/2009, 04:47

Mais ou menos sem.ponto.... buscamos o mesmo objetivo por caminhos diferentes... acho que no meu método é melhor hehehehehe

Concordo quando você diz que buscamos caminhos diferentes, não quando você diz que o seu método é melhor. kkkkk

Bom, você criou um interruptor alí para saber se tem alguém atoa, eu preferi verificar se o campo "sai" está nulo. Se o campo estiver nulo e o cara não estiver fazendo o serviço, também é justa causa! :D

Tu só leu o final neh kkkkkkkkkkkkkkkkkkkkkk

Quando ví o tamanho da rolagem eu desanimei, só se eu for doido pra ler aquilo tudo.... kkkkkkkkkkkk

Você conhece... manda a definição de pica... :P
att,
Muller Dias
ex-administrador Fórum WMO

#33 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 28/01/2009, 05:25

hehehhe

Então.... o 'interruptor' na verdade serve para não precisar de session, visto de que nada adianta para a forma que ele fez.

Então verificando se a linha está com o interruptor = 1, quando o trabalhador for sair fica fácil de inserir a hora da saída na mesma linha do registro de entrada.

Estava brincando ... Não digo que o meu é melhor, mas sei que funcionaria que é uma beleza... sem dúvidas

e acho que um bom sistema começa é ali na teoria... medidno tudo que pode ou não pode acontecer se fizer algo ou deixar de fazer... só depois que se parte para os códigos.

com o tempo a experiência elimina a necessidade de muita teoria, visto que já se fez muita coisa na área e as respotas já vem em forma de código.

Mas muitas vezes o código para quem não sabe a teoria de nada vale se não apenas para alimentar papagaio de pirata... quando o que realmente seria legal é a pessoa saber o que está fazendo antes de fazer.
Saber para que serve tal coisa... antes de usar.

Entender o que cada linah de tal código faz e como é sua sequência lógica.

é por isso que eu insisti na lógica com o Wallece... entendedno a lógica fica fácil escrever depois... claro que aí entra o do cara saber escrever...
Pode-se escrever uma história que de para entender a moral... e da para escrever uma que de para enteder e que também seja agradável de ler.

Espero que o Wallece tire o maior proveito de tudo que está neste tópico porque vou te dizer... o google que vai fazer a festa na indexação.

kkkkkkkkkkkkkkkkkkkkkkk


(y) Até mais

#34 Wallace Locus

Wallace Locus

    Turista

  • Usuários
  • 29 posts
  • Sexo:Não informado

Posted 28/01/2009, 22:24

caros atenciosos :) thanks pelas dicas...mas continuo a não dar com a solução.
programinha simples em php tá a custar atinar...puxa!

vi um tutorial no site do mysql e tentei com:

$sql="INSERT INTO persons (nome, semana, dia, mes, ano, turno, entra) VALUES ('".$_POST[nome]."', '".$_POST[semana]."','".$_POST[dia]."', '".$_POST[mes]."', '".$_POST[ano]."', '".$_POST[turno]."', '".$_POST[entra]."')
ON DUPLICATE KEY UPDATE VALUES('$_POST[sai]')";


mas não dá. enfim...já tou a ficar mole pra uma porcaria tão simples...mas quero encontrar a solução xxxxxx, ai sim...vou encontrar...!
digam algo...!

sobre a questão de saber se está a trabalhar ou não não relevante para agora, mas sim muito relevante gravar a hora de entrada e hora de saida no mesmo registo, coisa simples que estou a demorar, mais do q o habitual, a descobrir e aprender.

de momento, tenho os codigos assim:
manha.php

<body>
<?php
// Login/sessões
// link_1.php

// ligar à base de dados
//include("connect.php");

//include("auth.php");
//include("nav.php");
session_start();
if(!isset($_SESSION['username'])) {
echo 'Acesso interdito <BR>';
include('auth.php');
exit;
}
else {
include("auth.php");
include("nav.php");

//echo "<center><br>Bem vindo - " . $_SESSION['username'] . "</center>";
// fechar ligação mysql
mysql_close();
}
?>
<center>
<h2>Gestão de entradas e saídas</h2>
</center>
<font face=arial, size=1>
</font>
<script Language="JavaScript">
<!--
mydate = new Date();
myday = mydate.getDay();
mymonth = mydate.getMonth();
myweekday= mydate.getDate();
weekday= myweekday;

if(myday == 0)
day = " Domingo, "

else if(myday == 1)
day = " Segunda - Feira, "

else if(myday == 2)
day = " Terça - Feira, "

else if(myday == 3)
day = " Quarta - Feira, "

else if(myday == 4)
day = " Quinta - Feira, "

else if(myday == 5)
day = " Sexta - Feira, "

else if(myday == 6)
day = " Sábado, "

if(mymonth == 0)
month = "Janeiro "

else if(mymonth ==1)
month = "Fevereiro "

else if(mymonth ==2)
month = "Março "

else if(mymonth ==3)
month = "Abril "

else if(mymonth ==4)
month = "Maio "

else if(mymonth ==5)
month = "Junho "

else if(mymonth ==6)
month = "Julho "

else if(mymonth ==7)
month = "Agosto "

else if(mymonth ==8)
month = "Setembro "

else if(mymonth ==9)
month = "Outubro "

else if(mymonth ==10)
month = "Novembro "

else if(mymonth ==11)
month = "Dezembro "

document.write("<font face=arial, size=3><center />"+ day);
document.write(myweekday+" de "+month+ "</font>");
// -->
</script>

<?php
$mes["01"] = "Janeiro";
$mes["02"] = "Fevereiro";
$mes["03"] = "Março";
$mes["04"] = "Abril";
$mes["05"] = "Maio";
$mes["06"] = "Junho";
$mes["07"] = "Julho";
$mes["08"] = "Agosto";
$mes["09"] = "Setembro";
$mes["10"] = "Outubro";
$mes["11"] = "Novembro";
$mes["12"] = "Dezembro";

$diasemana["0"] = "Domingo";
$diasemana["1"] = "Segunda-feira";
$diasemana["2"] = "Terça-feira";
$diasemana["3"] = "Quarta-feira";
$diasemana["4"] = "Quinta-feira";
$diasemana["5"] = "Sexta-feira";
$diasemana["6"] = "Sabado";

$dia = date('d'); //Pega o dia
$semanan = date('w'); //Pega o dia da semana
$mesn = date('m'); //Pega o mês
$ano = date('Y'); //Pega o ano


$id = $_SESSION['username'];

$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("my", $con);

$sql = "select personID, nome, semana, dia, mes, ano, turno, entra, sai from persons where nome='" . $id . "' ORDER BY personID ASC";
//echo $sql;
$result = mysql_query($sql) or exit(mysql_error());

while($row = mysql_fetch_array($result))
{

$personid = $row["personID"];
$data1 = $row["entra"];
$data2 = $row["sai"];
}

?>
<center>
<div id='container'>
<fieldset name="Group1">
<legend style="background-color:#CCFFCC">Funcionário: <b><?php echo $id; ?></b></legend>
<br>
<label>Bom dia!</label>
<form id="form" name="form" action="insert.php?id=$personid" method="post">
<!--nome--><input type="hidden" name="nome" value="<?php echo $id; ?>"/>
<!--semana--><input type="hidden" name="semana" value="<?php echo $diasemana["$semanan"]?>"/>
<!--dia--><input type="hidden" name="dia" value="<?php echo $dia?>"/>
<!--mes--><input type="hidden" name="mes" value="<?php echo $mes["$mesn"]?>"/>
<!--ano--><input type="hidden" name="ano" value="<?php echo $ano?>"/>
<!--turno--><input type="hidden" name="turno" value="manha"/>
<br /><br />
<input id="entra" type="hidden" name="entra" value="" />
<input name="entrada" type="submit" value="entra" style="width: 72px; height: 47px" class="style1" onClick="data('entra');"/>
&nbsp;&nbsp;
<input id="sai" type="hidden" name="sai" value=""/>
<input name="saida" type="submit" value="sai" style="width: 72px; height: 47px" class="style2" onClick="data('sai');"/>
</form>
<br />
<br />

<!--saida: <input type="text" name="sai" value="<?php echo date('H:i:s');?>"/> <br />-->



</fieldset>
</center>
</div>
</center>
</body>



e o insert.php

<?php
session_start();

$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("my", $con);

if (!isset($_SESSION[id])){

$sql="INSERT INTO persons (nome, semana, dia, mes, ano, turno, entra) VALUES ('".$_POST[nome]."', '".$_POST[semana]."','".$_POST[dia]."', '".$_POST[mes]."', '".$_POST[ano]."', '".$_POST[turno]."', '".$_POST[entra]."')";

$query = mysql_query($sql) or die(mysql_error());

$_SESSION[id] = mysql_insert_id();

}
else {

$sql = "UPDATE persons SET sai = '".$_POST['sai']."' WHERE personID = '".$_SESSION[id]."'";
$query = mysql_query($sql) or die(mysql_error());
unset($_SESSION[id]);

}

echo "<p class='alert'>Pica efectuado! Tenha um bom dia! Nao se esqueca fazer logout! </p>";
echo "<center><a href='index.php'>voltar</a></center>";

mysql_close($con)

?>


sim, sem.Ponto tentei fazer como sugeriu...mas nao consegui.

para já quero saber como resolver o problema para como está, q é apenas a inserção de duas datas diferentes no mesmo registo.
usuario faz login, clica no botao entra, faz logout...e qd for pra sair...faz login e clica no botao sair...só isso.

sim Cab, tenho uma tabela de autenticacao. a autenticacao é atraves de sessions:

<?php
session_start();
// auth.php
// start session

include("connectDB.php");


if($_POST){
$_SESSION['username']=$_POST["username"];
$_SESSION['password']=$_POST["password"];
}

// query
$result=mysql_query("select * from users where login='" . $_SESSION['username'] . "' and password='" . $_SESSION['password'] . "'");

// número de registos
$num=mysql_num_rows($result);

// se não há registos aparece o ecrã de login.
if($num < 1){
echo "<br><br> <br><br><br> <br><br><div style='background-color:#CCFFCC'> Não está autenticado. Faça login sff.</div><br><br><b>Login</b></div>
<form method=POST action=index.php>
Utilizador: <input type=text name=\"username\"> <br />
Password: <input type=password name=\"password\">
<BR> <BR>
<input type=submit value=\" - Login - \">
</form><br><br>";

echo "<div><b>Novo funcionario</b></div>
<form method=post action=inscricao.php>
Utilizador: <input type=text name=\"nome\"><br>
Password: <input type=password name=\"pass\"><br>
<input type=submit value=\"inscrever\">
</form>";

exit;
}
?>


a database da autenticacao está assim:
`users` (
`user_id` smallint(10) NOT NULL AUTO_INCREMENT,
`login` varchar(20) COLLATE latin1_bin NOT NULL,
`password` varchar(20) COLLATE latin1_bin NOT NULL,
PRIMARY KEY (`user_id`)
)


já escrevi mt...mas o raio da solução ainda não chegou...tá mesmo pra demorar...tal assunto já aparece na 1ª resposta do google...

#35 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 28/01/2009, 22:55

sim, sem.Ponto tentei fazer como sugeriu...mas nao consegui.

Se você tentar aplicar o que eu disse e o que o Crab disse no seu atual código você não vai conseguir, talvez até consiga com gambiarra. Mas você quer aprender, não?

Então fuja da POG! :D

Apague isso aí e comece do zero seguindo uma lógica, não tem erro e nem dor de cabeça. ;)
att,
Muller Dias
ex-administrador Fórum WMO

#36 Wallace Locus

Wallace Locus

    Turista

  • Usuários
  • 29 posts
  • Sexo:Não informado

Posted 29/01/2009, 02:26

sim vou fazer, mas antes quero saber como resolver este dilema...
é possivel ou nao nestas circunstancias salvar as tais datas no mesmo registo?
se sabem me digam...
aprender a resolver e nao a reiniciar ;)


se não é possivel resolver, ou seja, gravar no mesmo registo com processo "login-pica-logout"
...
entao começar de novo com outra logica...!
se é possivel, ir atrás da solução...!

alinham?

#37 CMAC

CMAC

    Normal

  • Usuários
  • 93 posts
  • Sexo:Masculino

Posted 29/01/2009, 11:19

Com certeza é melhor começar do zero. Crie uma classe para realizar estes métodos. Assim você mantém seu código mais organizado para futuras modificações.

Outra coisa, na tabela do banco de dados você pode usar somente três campos:
id INT AUTO_INCREMENT
user_id smallint(10) NOT NULL
entra DATETIME
sai DATETIME

Para inserir a entrada fazia:
mysql_query("INSERT INTO `persons` (`user_id`, `entra`) VALUES(" . $_SESSION['user_id'] . ", NOW())");

Supondo que o id do usuário está na variável $_SESSION['user_id'].

Para dar saída, fazer:
$result = mysql_query("SELECT `id` FROM `persons` WHERE `sai` = NULL AND `user_id` = " . $_SESSION['user_id'] . " ORDER BY `id` DESC LIMIT 1");
if(mysql_num_rows($result)) {
	$row = mysql_fetch_array($result);
	mysql_query("UPDATE `persons` SET `sai` = NOW() WHERE id = " . $row['id']);
}

Se não quiser fazer a consulta antes de atualizar, podia guardar o id da última entrada na tabela do usuário, assim poupava uma query.

E se quiser saber o dia, semana, mês, turno? Use o PHP + Cabeça ;)

Nota: não testei o código acima, pode conter erros.

Edição feita por: CMAC, 29/01/2009, 11:20.


#38 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 29/01/2009, 13:19

CMAC... acho que tudo isso que tu disse já foi dito tbm igual ou com algumas diferenças, o que eu quero dizer agora é que não cabe mais a nós ajudar ... acho que WALLECE já teve toda a ajuda necessária para desenvolver o tal sistema.
Se colher todas as informações aqui postadas por nós todos daria para desenvolver um projeto de nível.
Como eu já disse... desprezar uma boa teoria antes de começar algo é dar de cara com uma parede de problemas depois
Eu dei a solução ali no meu post monstro... nunca tinha pensado em um sistema desses... mas depois desse tópico acho que com toda a informação aqui contida eu desenvolvo um desses numa tarde.
A lógica está toda aí... basta não ter a vergonha de começar novamente...

Eu já fiz tudo que podia... qualquer coisa, se quiser eu faço pra você, basta uma doação no pagseguro e vamos trabalhar.

:D

Brincadeira

Boa sorte amigo... bons estudos. Até mais

#39 Wallace Locus

Wallace Locus

    Turista

  • Usuários
  • 29 posts
  • Sexo:Não informado

Posted 29/01/2009, 16:30

este post já ta arrumado :)
n descobri a solução, n conseguir inserir duas horas no mesmo registo.
patient.
fica pra outra altura.

claro, agradecer a paciência de boa malta q está disponivel pra partilhar conhecimento...isso é mt bom!...apesar de n ter dado com a solução.
cool Brasil! :)

#40 kádoo

kádoo

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 11/02/2009, 18:21

eiiii tava vendo este forum.. e ae ja consegui resolver o problema??? to fazendo um sistema de ponto! ja to em fase terminal, ja passei por este problema agora to com outro problema pra montrar um sql se te interessar posto o codigo aki da sua duvida ow entao me manda uma mp! flw abracos!

#41 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 11/02/2009, 21:12

Fala Kádoo...

Acho que seria interessante vc postar a sua solução independente dele ter resolvido ou não... pois acredito em meu conceito de comunidade de que a moral é compartilhar conhecimento...
se não servir para o Wallace servirá para outro que cairá neste tópico seja lá de que forma.

Seria uma boa compartilhar

Abraço Até mais




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq