PHP页面登录用两个文件夹


PHP page login with two folders

我有page login.php:

<?php 
include '../f-connect.php';
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])){
     extract($_POST);
     $password = sha1($password);
     $sql = "SELECT u.*, r.* FROM users as u INNER JOIN roles AS r ON r.id_roles = u.roles_id WHERE u.login = '$login' AND u.password = '$password' AND r.name  = 'provider'";
     $req = $db->prepare($sql);
     $req->execute();
    if($req->rowCount() > 0){
        $data = $req->fetch();
        $_SESSION['Auth']= array(
            'id_user' => $data['id_user'],
            'firstname' => $data['firstname'],
            'lastname' => $data['lastname'],
            'login' => $data['login'],
            'password' => $data['password'],
            'roles_id' => $data['roles_id'],
            'id_roles' => $data['id_roles'],
            'name' => $data['name'],
        );


            $_SESSION['flash']['success'] = "You are now connected";
        header("Location:../Provider/profilProvider.php");
    }else{
        echo '<div class ="alert alert-warning">Login or password incorrect</div>';
    }
}elseif(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])){
     extract($_POST);
     $password = sha1($password);
     $sql = "SELECT u.*, r.* FROM users as u INNER JOIN roles AS r ON r.id_roles = u.roles_id WHERE u.login = '$login' AND u.password = '$password' AND r.name  = 'customer'";
     $req = $db->prepare($sql);
     $req->execute();
    if($req->rowCount() > 0){
        $data = $req->fetch();
        $_SESSION['Auth']= array(
            'id_user' => $data['id_user'],
            'firstname' => $data['firstname'],
            'lastname' => $data['lastname'],
            'login' => $data['login'],
            'password' => $data['password'],
            'roles_id' => $data['roles_id'],
            'id_roles' => $data['id_roles'],
            'name' => $data['name'],
        );

            $_SESSION['flash']['success'] = "You are now connected";
        header("Location:../customer/profilCustomer.php");
    }else{
        echo '<div class ="alert alert-warning">Login or password incorrect</div>';
    }
}
?>

我有两个文件夹包含:

folder one : 
provider : 
   ->profilProvider.php
   ->listProviders.php
   ->addProvider.php
   ->updateProvider.php

folder two : 
   customer : 
    ->profilCustomer.php
    ->listCustomers.php
    ->addCustomer.php
    ->updateCustomer.php

And i have table users:

 - id_user : int 
 - firstname :varchar(100) 
 - lastname : varchar(100) 
 - login : varchar(100) 
 - password : varchar(100) 
 - roles_id : int

和表角色:

- id_roles : int
- name : varchar(100)  ['provider', 'costumer']

当我输入登录名和密码时,我想重定向到这两个文件夹之一

例如:

  • 如果角色等于提供者,我会去profilProvider.php提供程序文件夹
  • 中的页
  • 如果角色等于客户,我会去profilcustomer .php客户文件夹
  • 中的页面

但不指示我在相关文件夹

您必须提供文件的确切路径,因为头位置是基于项目结构考虑的。

My Project - (Main Folder) 
login.php 
provider - (Sub Folder One)
->profilProvider.php    
->listProviders.php     
->addProvider.php       
->updateProvider.php 
customer - (Sub Folder Two)     
->profilCustomer.php    
->listCustomers.php    
->addCustomer.php   
->updateCustomer.php

你在这两种情况下给出的标题位置将导致错误,因为你的文件夹/目录的路径似乎不正确。

原因:

您的项目结构看起来像上面的那个。我的疑问只是与包含'../f-connect.php';,因为这里提供的路径似乎与您的项目结构不正确。

如果这看起来是正确的,那么你必须按照我现在的建议在你的代码中单独替换头位置。

注意:由于"…/"将从当前工作文件夹返回一个目录。根据您的jsfiddle解释,您在项目文件夹中有您的login.php文件。因此,您必须单独更改标题位置。

项目中需要ob_start()的解决方案。

如果你发现头已经发送错误而重定向,你可以使用ob_start()后的包括'./f-connect.php'行。

替换代码:

<?php
// Database Connectivity
include '../f-connect.php';
// Checking condition based on the form Submission
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])){
     extract($_POST);
     $password = sha1($password);
     $sql = "SELECT u.*, r.* FROM users as u INNER JOIN roles AS r ON r.id_roles = u.roles_id WHERE u.login = '$login' AND u.password = '$password' AND r.name  = 'provider'";
     $req = $db->prepare($sql);
     $req->execute();
    if($req->rowCount() > 0){
        $data = $req->fetch();
        session_start();
        $_SESSION['Auth']= array(
            'id_user' => $data['id_user'],
            'firstname' => $data['firstname'],
            'lastname' => $data['lastname'],
            'login' => $data['login'],
            'password' => $data['password'],
            'roles_id' => $data['roles_id'],
            'id_roles' => $data['id_roles'],
            'name' => $data['name'],
        );
        $_SESSION['flash']['success'] = "You are now connected";
        // This header Location will provide you an error 
        // since "../" will go back one directory from the Current working folder.
        // As per you jsfiddel explanation you have your login.php file inside the project folder.
        //header("Location:../Provider/profilProvider.php");
        header("Location: provider/profilProvider.php");
        }else{
        echo '<div class ="alert alert-warning">Login or password incorrect</div>';
        }
    }
    else if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])){
     extract($_POST);
     $password = sha1($password);
     $sql = "SELECT u.*, r.* FROM users as u INNER JOIN roles AS r ON r.id_roles = u.roles_id WHERE u.login = '$login' AND u.password = '$password' AND r.name  = 'customer'";
     $req = $db->prepare($sql);
     $req->execute();
    if($req->rowCount() > 0){
        $data = $req->fetch();
        session_start();
        $_SESSION['Auth']= array(
            'id_user' => $data['id_user'],
            'firstname' => $data['firstname'],
            'lastname' => $data['lastname'],
            'login' => $data['login'],
            'password' => $data['password'],
            'roles_id' => $data['roles_id'],
            'id_roles' => $data['id_roles'],
            'name' => $data['name'],
        );
        $_SESSION['flash']['success'] = "You are now connected";
        header("Location: customer/profilCustomer.php");
    }else{
        echo '<div class ="alert alert-warning">Login or password incorrect</div>';
    }
}
?>