【发布时间】:2013-05-24 05:32:51
【问题描述】:
我有一个看起来像这样的 .csv 文件...
Name AC-No. Time State Exception Operation
Johnny Starks Depp 1220 4/12/2013 12:45:18 AM Check In OK
Johnny Starks Depp 1220 4/12/2013 5:46:58 AM Out Out
Johnny Starks Depp 1220 4/12/2013 6:22:41 AM Out Back Out
Johnny Starks Depp 1220 4/12/2013 10:42:17 AM Check Out Repeat
Johnny Starks Depp 1220 4/12/2013 10:42:19 AM Check Out OK
我已经可以将它上传到我的数据库了。我的问题是,它显示在表格中的结果。 在 mysql 数据库中,我有一个包含列 (Name, ACNo., Date, CheckIn, Breakout, Breakin, CheckOut) 的表。我想要发生的事情是我做错了.. .csv 文件中具有相同 DATE 的记录(显示在时间列中)将仅在同一行中在 TABLE 中使用 Check In、BreakOut、BreakIn 和 CheckOut 并且不会产生多条记录。 像这样..
Name |ACNo | Date | CheckIn | Breakout | Breakin | Checkout
| | | | | |
Johnny Starks Depp|1220 | 4/12/2013 | 12:45:18 AM | 5:46:58 AM | 6:22:41 AM | 10:42:19 AM
现在..我已经做了上面的示例,说明我想在表格中发生什么,但是...当我检查表格时,是的,它每行有不同的日期,但时间(签入,突破,休息,结帐) 错了。错误,因为例如 DATE 4/12/2013 中的时间记录在 DATE 4/13/2013 中。我使用的代码有什么问题?或者我还有什么办法可以做到这一点?这些是我的代码:
<?php
$conn = mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("dtrlogs",$conn);
$datehere ="";
if(isset($_POST['Submit']))
{
$file = $_FILES['file']['tmp_name'];
if($file == "")
{
?>
<script type="text/javascript">
alert('No File Selected!');
</script>
<?php
}
else
{
$handle = fopen($file,"r");
while(($fileop = fgetcsv($handle,1000,";")) !==false)
{
$Name = $fileop[0];
$ACNo = $fileop[1];
$Time = $fileop[2];
$State = $fileop[3];
$NewState = $fileop[4];
$Exception = $fileop[5];
$Operation = $fileop[6];
//i separated time/date in the Column TIME in the .csv file
$date = date('m/d/Y', strtotime($Time));
$hours = date('H:i:s A', strtotime($Time));
//this is what i used to prevent multiple dates
if($datehere != $date) {
$datehere = $date;
}
else{
$date = "";
}
//this is to insert the name and acno to the other table.
//(this is for the lists of employee)
$sql=mysql_query("SELECT * FROM employee Where ACNo = '$ACNo'");
$row=mysql_fetch_array($sql);
if($row == 0) {
$sql1 = mysql_query("INSERT INTO employee(ACNo, Name) VALUES('$ACNo','$Name')");
}
//Inserts record if Date is not yet recorded and if already has just updates
//the row's column (Checkin, breakout, breakin and Checkout)
//with its correct time according to the date
$query = mysql_query("SELECT * FROM dtrs Where ACNo = '$ACNo' AND Date = '$date'");
$rows = mysql_fetch_array($query);
if($rows == 0) {
$sql2 = mysql_query("INSERT INTO dtrs(Name, ACNo, Date, CheckIn, BreakOut,
BreakIn,CheckOut)
VALUES('$Name','$ACNo','$date','$CheckIn','$Breakout','$Breakin','$Checkout')");
}
else{
$sql2 = mysql_query("Update dtrs Set CheckIn = '$CheckIn', BreakOut =
'$Breakout', BreakIn = '$Breakin', CheckOut = '$Checkout'");
}
//this is my conditions to identify whether the TIME/HOUR is
//Stated as CheckIn, Breakout, Breakin, or Checkout
if($NewState == "Check In" || $State == 'Check In' && $Exception == "OK") {
if($Exception == "Invalid" || $Exception == "Repeat")
{}
else {
$CheckIn = $hours;
}
}
if($State == 'Out' && $Exception == "Out") {
if($Exception == "Invalid" || $Exception == "Repeat")
{}
else {
$Breakout = $hours;
}
}
if($State == 'Out Back' && $Exception == "Out") {
if($Exception == "Invalid" || $Exception == "Repeat")
{}
else {
$Breakin = $hours;
}
}
if($NewState == "Check Out" || $State == "Check Out" && $Exception == "OK") {
if($NewState == "Check In")
{}
else {
$Checkout = $hours;
}
}
}
if($sql2)
{
if($sql2)
{
?>
<script type="text/javascript">
alert('File Upload Successful!');
</script>
<?php
}
}
}
}
?>
【问题讨论】:
-
插入时返回的查询是什么?我的意思是 $CheckIn、$Breakout、$Breakin、$CheckOut 中有哪些值,它们在哪里声明?也许这就是问题所在。还有一个很好的提示,当某些东西没有插入更新或从数据库中选择时,调试您正在发送的字符串查询:)
-
变量($CheckIn、$Breakout、$Breakin、$CheckOut)中的值在 IF 条件中。此 IF 将识别 $Hour 的值是否被声明为 4(CheckIn、out、outback、CheckOut)之一。你明白我的意思吗?如果 $Hour 中的值声明为“Check In”,则 $Hour 中的值将放入 $CheckIn。并将再次循环并返回条件。无论如何,关于“还有一个很好的提示,当某些东西没有插入更新或从数据库中选择时,调试你正在发送的字符串查询:)”是什么意思?我没明白你在告诉我什么。对不起XD
-
@Steve 你说插入的时间是错误的,你能告诉我 csv 中的值与数据库中每列(CheckIn、out、outback、checkOut)的日期时间差吗?它们都有相同的时差吗?如果是,可能是因为您本地服务器中的 TimeZone 设置
-
@dArc 好的。对于那个很抱歉。当我调试时,我发现我的 .csv 文件中的所有 TIME 都是上传 BUT 一些 time 不在正确的行中w/它的正确日期或它应该属于的地方。我认为现在的问题是 csv 上传器如何在数据库中上传文件 OR 这是我的 IF 条件,导致插入的表数据排列不正确。