<?php
ob_start();
date_default_timezone_set("Asia/Dhaka");
// connect to the database
//Project Add Actions
    include('connection.php');
	//include ('includes/db.php');
	include('includes/header.php');

if (isset($_POST['projectsave'])) { // if save button on the form is clicked
    // name of the uploaded file
	
	$ProjectName = $_POST['ProjectName'];
	$ContactName = $_POST['ContactName'];
	$PhoneNo = $_POST['PhoneNo'];
	$SortAddress = $_POST['SortAddress'];
	$Address = $_POST['Address'];
	$Email = $_POST['Email'];
	$Status = $_POST['Status'];
	$PUserId = $_SESSION['UserId'];
  	$Note = $_POST['Note'];	
  	$filename = $_FILES['myfile']['name'];

    // destination of the file on the server
    $destination = 'upload/' . $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','webp', 'png', 'jpg', 'jpeg',  '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 project (ProjectName, ContactName, PhoneNo, SortAddress, Address, Email, Status, Note, FileName, size, downloads, PUserId) VALUES
			('$ProjectName', '$ContactName', '$PhoneNo', '$SortAddress','$Address', '$Email','$Status','$Note', '$filename', $size, 0,'$PUserId')";
            if (mysqli_query($conn, $sql)) {
                 $msg= "File uploaded successfully";
            }
        } else {
            echo "Failed to upload file.";
			
        }
    }
}
header("location:displayproject.php?msg=".$msg);
ob_end_flush();
?>
