<?php
session_start();
ob_start();
date_default_timezone_set("Asia/Dhaka");

	include('connection.php');
	if(ISSET($_POST['editemployee']))
	{	
		$id = $_POST['id'];
		$EmployeeName = $_POST['EmployeeName'];
		$PhoneNo = $_POST['PhoneNo'];
		
	    $Address = $_POST['Address'];
	    $JobTitle = $_POST['JobTitle'];	
	    $Salary = $_POST['Salary'];
		
		$new_image = $_FILES['FileName']['name'];
		$old_image = $_POST['previous'];
		
		if($new_image !='')
		{
			$update_filename = $_FILES['FileName']['name'];
		}
		else
		{
			$update_filename = $old_image;
		}
		if($_FILES['FileName']['name' !=''])
		{
		if(file_exists("EmployeeImage/".$_FILES['FileName']['name']))
		{
			$FileName = $_FILES['FileName']['name'];
			$_SESSION['status'] = " Image already Exists".$FileName;
			header('Location: Employeedisplay.php');
		}
		}
		else
		{
			//updating 
			$query = "UPDATE employee SET EmployeeName='$EmployeeName', PhoneNo='$PhoneNo', Address='$Address', JobTitle='$JobTitle', Salary='$Salary', FileName='$update_filename' WHERE Id='$id'";
			$qurey_run = mysqli_query($conn, $query);
			
			if(qurey_run)
			{
				if($_FILES['FileName']['name'] !='')
				{
					move_uploaded_file($_FILES["FileName"]["tmp_name"], "EmployeeImage/".$_FILES["FileName"]["name"]);
					unlink("EmployeeImage/".$old_image);
				}
				$_SESSION['status'] = " Data Update Successfuly";
				header('Location: Employeedisplay.php');
			}
			else
			{
				$_SESSION['status'] = " Data Not Update. !";
				header('Location: Employeedisplay.php');
			}
		}
		
	}


ob_end_flush();
?>
