<?php
// ini_set('display_errors', 1);
// ini_set('display_startup_errors', 1);
// error_reporting(E_ALL);

ob_start();
date_default_timezone_set("Asia/Dhaka");
// connect to the database
    include('connection.php');
include('includes/header.php');

if (isset($_POST['Employeesave'])) { // if save button on the form is clicked
    // name of the uploaded file
	
	$EmployeeName = $_POST['EmployeeName'];
	$PhoneNo = $_POST['PhoneNo'];
	
	$Address = $_POST['Address'];
	$JobTitle = $_POST['JobTitle'];	
	$Salary = $_POST['Salary'];	
  	
	$Status = $_POST['Status'];
	$EUserId = $_SESSION['UserId'];
    $filename = $_FILES['myfile']['name'];
	
	
	
    // destination of the file on the server
    $destination = 'EmployeeImage/' . $filename;

    // get the file extension
    $extension = pathinfo($filename, PATHINFO_EXTENSION);

    // the physical file on a temporary uploads directory on the server
    $file = $_FILES['myfile']['tmp_name'];
    $size = $_FILES['myfile']['size'];

    if (!in_array($extension, ['zip', 'pdf', 'txt', 'doc', 'docx', 'png', 'PNG', 'jpg', 'JPG', 'jpeg','JPEG', 'GIF','gif'])) {
        echo "You file extension must be .zip, .pdf, .txt, .doc, .docx, .png, .jpg, .jpeg or .gif";
    } elseif ($_FILES['myfile']['size'] > 1000000) { // file shouldn't be larger than 1Megabyte
        echo "File too large!";
    } else {
        // move the uploaded (temporary) file to the specified destination
        if (move_uploaded_file($file, $destination))
			{
			        
            $sql = "INSERT INTO employee (EmployeeName, PhoneNo, Address, JobTitle, Salary, Status, FileName, size, downloads, EUserId) VALUES
			('$EmployeeName', '$PhoneNo',  '$Address', '$JobTitle', '$Salary','$Status', '$filename', $size, 0, '$EUserId')";
			         
            if (mysqli_query($conn, $sql)) {
                echo  "File uploaded successfully";
            }else{
                #var_dump(mysqli_error($conn));
            }
        } else {
            echo ("<SCRIPT LANGUAGE='JavaScript'>
    window.alert('Failed to upload file')
    window.location.href='javascript:history.go(-1)';
    </SCRIPT>");
			
        }
    }
}
header("location:Employeedisplay.php");
ob_end_flush();
?>