<?php 
include('../includes/connection.php');
session_start();
	
	if(empty($_SESSION['UserId'])){
		
    if(isset($_POST['Email']) && isset($_POST['Password'])){
		$Email = $_POST['Email'];
		$Password = $_POST['Password'];
		
       if(!empty($Email) && !empty($Password)){
           $sql = "select UserId from user where Email='$Email' and Password='$Password'";
            $sql_query = mysqli_query($conn, $sql);
			
			$mysqli_num_rows = mysqli_num_rows($sql_query);
			
			 if($mysqli_num_rows){
				$data = mysqli_fetch_array($sql_query);
				$UserId = $data['UserId'];
				
				
                $_SESSION['UserId']=$UserId;
				
                header("location:../../index.php");
				
       }else{
           echo 'Invalid Email Or Password!';
	   }
            }else{
               
        echo 'Fill Up All Fields!';
    }
	
	}
?>

<!doctype html>
<html class="no-js" lang="en">

<head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>LOGIN || MRITTIKA NOKHA</title>
	
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <!-- Place favicon.ico in the root directory -->
    <link rel="shortcut icon" type="image/x-icon" href="plc/images/icon.png">
    <link rel="apple-touch-icon" href="apple-touch-icon.png">
    

    <!-- All css files are included here. -->
    <!-- Bootstrap fremwork main css -->
    <link rel="stylesheet" href="../../plc/css/bootstrap.min.css">
    <!-- Owl Carousel  main css -->
    <link rel="stylesheet" href="../../plc/css/owl.carousel.min.css">
    <link rel="stylesheet" href="../../plc/css/owl.theme.default.min.css">
    <!-- This core.css file contents all plugings css file. -->
    <link rel="stylesheet" href="../../plc/css/core.css">
    <!-- Theme shortcodes/elements style -->
    <link rel="stylesheet" href="../../plc/css/shortcode/shortcodes.css">
    <!-- Theme main style -->
    <link rel="stylesheet" href="../../plc/style.css">
    <!-- Responsive css -->
    <link rel="stylesheet" href="../../plc/css/responsive.css">
    <!-- User style -->
    <link rel="stylesheet" href="../../plc/css/custom.css">


    <!-- Modernizr JS -->
    <script src="../../plc/js/vendor/modernizr-2.8.3.min.js"></script>
	

	
	
	
	
</head>
<body style="">
    
    
    <!-- Start Login Register Content -->
                <div class="row">
                    <div class="col-md-6 col-md-offset-3">
                        <div class="htc__login__register__wrap">
                            <!-- Start Single Content -->
                            <div class="col-lg-4 m-auto">
                                <div class="card bg-dark mt-5">
                                    <div class="copyright bg__theme">
                                        <h3 class="text-center py-3">Login Form in MRITTIKA NOKHA </h3>
                                    </div>
                                    <div class="card-body">
                                        <form action="login.php" method="post">
                                            <input type="text" name="Email" placeholder=" Email" class="form-control mb-3">
                                            <input type="password" name="Password" placeholder=" Password" class="form-control mb-3">
                                            <button class="btn btn-success mt-3" name="Login">Login</button>
                                        </form>
                                    </div>
                                </div>
                            </div>
                            <!-- End Single Content -->
                           
                        </div>
                    </div>
                </div>
               
    
    

 

</body>
</html>
   
<?php
	}else{
		header("location:../../index.php");
	}

?>                
