Я нанял разработчика PHP для выполнения небольшой задачи, он развернул программу, показал мне демо-версию, а затем она вообще не работает, и разработчик также не отвечает.
Задача:
Загрузите файл .mdb
для сохранения определенных данных в базу данных phpmyadmin
.
Enviorment: Локальная виртуальная машина windows 2010 Server
Приложение: Senrifugo HRM (с открытым исходным кодом)
Ошибка: SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
В организации, люди пробивают свою посещаемость через машину, и машина может экспортировать файл .mdb
со всеми данными. Ищите только данные Person Name
, Check-in
& Check-out
и сохраняйте их в базу данных phpmyadmin
.
Код
<?php
require_once 'public/constants.php';
require_once 'public/site_constants.php';
require_once 'public/email_constants.php';
require_once 'public/emptabconfigure.php';
require_once 'public/db_constants.php';
require_once 'public/application_constants.php';
require_once 'public/mail_settings_constants.php';
require_once 'application/modules/default/library/sapp/Global.php';
require_once 'public/text_constants.php';
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();
$attendancesabsensemodel = new Default_Model_Attendancesabsense();
$dbName = MDB_DATABASE_PATH . "att2000.mdb";
if (!file_exists($dbName)) {
die("HERE 1");
}
try {
$dbName = MDB_DATABASE_PATH . "att2000.mdb";
if (!file_exists($dbName)) {
die("HERE 2");
}
$database_path = realpath($dbName);
$database = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=$database_path; Uid=; Pwd=;");
// $date = new Datetime();
$aujourdhui = gmdate("Y-m-d");
$auj= gmdate("Y-m-d");
/*** The SQL SELECT statement ***/
$sql = "SELECT CHECKINOUT.USERID, CHECKINOUT.CHECKTIME, CHECKINOUT.CHECKTYPE, USERINFO.Badgenumber,USERINFO.Name
FROM CHECKINOUT INNER JOIN USERINFO ON CHECKINOUT.USERID = USERINFO.USERID
WHERE (((CHECKINOUT.CHECKTIME)>=#$aujourdhui#))";
// $sql = "SELECT * FROM CHECKINOUT WHERE DATE('Y-m-d H:i:s','Checkintime') = DATE(NOW())";
// die( $sql);
/*** fetch into an PDOStatement object ***/
$stmt = $database->query($sql);
// print_r($stmt);
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()){
$loginUserId = $auth->getStorage()->read()->id;
}
//this will fetch row by row and allows to change column name, format, etc:
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// die($row['USERID']);
$json['USERID'] = $row['USERID'];
// print_r($row);
if($row['CHECKTYPE']=="I")
{
$json['CHECKTIME '] = $row['CHECKTIME'];
$datetime1 = DateTime::createFromFormat('Y-m-d H:i:s', $auj.' 09:00:00');
// A Hack using pages.dateformat.default: 'm-d-Y'`
$datetime2 = DateTime::createFromFormat('Y-m-d H:i:s', $row['CHECKTIME']);
// print_r($auj);
$interval = $datetime1->diff($datetime2);
$elapsed = $interval->format('%h hours %i minutes %s seconds');
$json['CheckinTimeLate '] = $elapsed;
$data = array(
'attendancesabsense' => $row['Name'],
'badgenumb' => $row['Badgenumber'],
'attendancecheckin' => $row['CHECKTIME'],
'attendancecheckout' => "",
'absensestatut' => $elapsed,
'createdby' => $loginUserId,
'modifiedby' => $loginUserId,
);
$data['createddate'] = gmdate("Y-m-d H:i:s");
$data['modifieddate'] = gmdate("Y-m-d H:i:s");
$data['isactive'] = 1;
$where = '';
$Id = $attendancesabsensemodel->SaveorUpdateAttendanceAbsenseData($data, $where);
}
else{
$json['CHECKTIME '] = $row['CHECKTIME'];
$datetime1 = DateTime::createFromFormat('Y-m-d H:i:s', $auj.' 17:00:00');
// A Hack using pages.dateformat.default: 'm-d-Y'`
$datetime2 = DateTime::createFromFormat('Y-m-d H:i:s', $row['CHECKTIME']);
$interval = $datetime1->diff($datetime2);
$elapsed = $interval->format('%h hours %i minutes %s seconds');
$json['CheckOutTimeLate '] = $elapsed;
$data = array(
'attendancesabsense' => $row['Name'],
'badgenumb' => $row['Badgenumber'],
'attendancecheckin' => "",
'attendancecheckout' => $row['CHECKTIME'],
'absensestatut' => $elapsed,
'createdby' => $loginUserId,
'modifiedby' => $loginUserId,
);
$data['createddate'] = gmdate("Y-m-d H:i:s");
$data['modifieddate'] = gmdate("Y-m-d H:i:s");
$data['isactive'] = 1;
$where = '';
$Id = $attendancesabsensemodel->SaveorUpdateAttendanceAbsenseData($data, $where);
}
$response[] = array('items' => $json);
// print_r($response);
}
/*** close the database connection ***/
$database = null;
header('Content-Type: application/json');
echo "INSERTION CRON JOB DONE !";
echo json_encode($response);
}
catch (PDOException $e)
{
die($e->getMessage());
}
Приложение, показывающее данные из базы данных.