【发布时间】:2016-09-05 21:15:09
【问题描述】:
我正在尝试在我的数据库中创建一个签入/签出表。我的签到表格可以正常工作,将时间插入我的数据库。当我尝试结帐时出现问题。第一次进入时一切都很好......
但是当我尝试再次签入和签出时,会发生这种情况...
到目前为止一切都很好,但是当我退房时...
目前,我的代码更新了所有匹配的child_id 的out 列和totalTime 列。
这是我的代码:
// Select the correct child from the database
$sql_childID = "SELECT id FROM child
WHERE firstName = '$childFirstName'
AND lastName = '$childLastName'";
$result = $pdo->query($sql_childID);
$row = $result->fetch();
$var = $row['id'];
// Insert the check out time for the child
$query = "UPDATE checkinout
SET `out` = :nowTime
WHERE child_id = $var
AND `in` IS NOT NULL";
$statement = $pdo->prepare($query);
$statement->bindValue(':nowTime', date("YmjHis"));
$statement->execute();
// Select check in time for specified child
$sql_inTime = "SELECT `in` FROM checkinout
WHERE child_id = $var";
$inResult = $pdo->query($sql_inTime);
$inRow = $inResult->fetch();
$inTime = strtotime($inRow['in']);
// Select the check out time for specified child
$sql_outTime = "SELECT `out` FROM checkinout
WHERE child_id = $var";
$outResult = $pdo->query($sql_outTime);
$outRow = $outResult->fetch();
$outTime = strtotime($outRow['out']);
// Find total hours
$totalTime = abs($outTime - $inTime)/(60*60);
// Update totalHours column for specified child
$queryTotalTime = "UPDATE checkinout
SET totalTime = :totalTime
WHERE child_id = $var
AND 'out' IS NOT NULL";
$statement = $pdo->prepare($queryTotalTime);
$statement->bindValue(':totalTime', $totalTime);
$statement->execute();
【问题讨论】:
-
child_id是用户的id吗?如果是这样,一个人怎么能签到两次而不签出?
-
我对 PHP 还是很陌生,所以表单没有任何验证。从技术上讲,您可以签到两次。我正在尝试找出在不影响流程中其他行的情况下插入结帐时间和总小时数的逻辑。
-
是的,child_id 是用户的id。在表格中,您将输入名字和姓氏,然后签入或签出孩子
-
让我编辑我的图片更准确...
-
所以您只想在结账时更新一条记录?如果是这样,我认为问题出在:AND
inIS NOT NULL。应该是out而不是in?