Panel Administratora - dostęp

Odpowiedz Nowy wątek
2019-05-18 14:49
0

Witam,

chciałem zrobić do stronki panel administratora. Utworzyłem w bazie danych kolumne user_rang, 0 - zwykły użytkownik, 1 - admin. Chciałbym, żeby przy logowaniu sprawdzało kto się loguje, jeśli loguje się admin, to żeby od razu go przerzucało do adminpanel.php, a jak zwykły użytkownik to index.php. Napisałem już coś, ale nie wiem gdzie leży błąd, nie działa.

plik login.php



```<?php
session_start(); 

include('config.php');

if(isset($_SESSION['login_id'])){
  if (isset($_SESSION['pageStore'])) {
      $pageStore = $_SESSION['pageStore'];
header("location: $pageStore"); 
}

if (isset($_POST['signIn'])) {
if (empty($_POST['email']) || empty($_POST['password'])) {
echo "Wypełnij pola";
}
else
{

$email = $_POST['email'];
$password = $_POST['password'];
$ranga = $_POST['user_rang'];

include('config.php');

$sQuery = "SELECT id, password from account where email=? LIMIT 1"; 
$rQuery = "SELECT user_rang from account where user_rang=";

$stmt = $conn->prepare($sQuery);
$stmt->bind_param("s", $email);
$stmt->execute(); //wykonanie
$stmt->bind_result($id, $hash); 
$stmt->store_result(); // zapisz wynik

$stmt = $conn->prepare($rQuery); 

if ($ranga == "1") { 
header("location: adminpanel.php");

}

else {

echo('Brak uprawnień');

}

if($stmt->fetch()) { 
  if (password_verify($password, $hash)) {
          $_SESSION['login_id'] = $id;

          if (isset($_SESSION['pageStore'])) {
            $pageStore = $_SESSION['pageStore'];
          }
          else {
            $pageStore = "index.php";
          }
          header("location: $pageStore"); 
          $stmt->close();
          $conn->close();

        }
else {
       echo 'Niepoprawny login lub hasło!';
     }
      } else {
       echo 'Niepoprawny login lub hasło!';
     }
$stmt->close();
$conn->close(); 
}
}
?>

Pozostało 580 znaków

2019-05-18 15:04
0

A dlaczego range przchowujesz w zmiennje $_POST

$ranga = $_POST['user_rang'];

Nie lepiej w bazie jako odpowioednie pole i wtedy jak się loguje dany użytkownik to sprawdza czy dane pole nie jest 1 albo 0.

Pozostało 580 znaków

2019-05-18 15:06
0

W bazie jest ta kolumna user_rang, ale nie wiem jak to zapisać, żeby działało?
Coś takiego mam:



```if ($ranga == "1") { 
header("location: adminpanel.php");

}

else {

echo('Brak uprawnień');

}
edytowany 2x, ostatnio: xyz_, 2019-05-18 15:09

Pozostało 580 znaków

2019-05-18 15:12
0
<?php
session_start(); 

include('config.php');

if(isset($_SESSION['login_id'])){
  if (isset($_SESSION['pageStore'])) {
      $pageStore = $_SESSION['pageStore'];
header("location: $pageStore"); 
}

if (isset($_POST['signIn'])) {
if (empty($_POST['email']) || empty($_POST['password'])) {
echo "Wypełnij pola";
}
else
{

$email = $_POST['email'];
$password = $_POST['password'];
$ranga = $_POST['user_rang'];

include('config.php');

$sQuery = "SELECT id, password,user_rang from account where email= '$email' and ranga = '$ranga'"; 
$rQuery = "SELECT user_rang from account where user_rang=";

$stmt = $conn->prepare($sQuery);
$stmt->bind_param("s", $email);
$stmt->execute(); //wykonanie
//$stmt->bind_result($id, $hash); 
//$stmt->store_result(); // zapisz wynik

//$stmt = $conn->prepare($rQuery); 
//tutaj musisz sam pokonbinowac jak to będzie wyglądało czy to jest poprawny zapis bo nigdy nie używałem tej biblioteki
if ($stmt->user_rang == "1") { 
header("location: adminpanel.php");

}

else {

echo('Brak uprawnień');

}

if($stmt->fetch()) { 
  if (password_verify($password, $hash)) {
          $_SESSION['login_id'] = $id;

          if (isset($_SESSION['pageStore'])) {
            $pageStore = $_SESSION['pageStore'];
          }
          else {
            $pageStore = "index.php";
          }
          header("location: $pageStore"); 
          $stmt->close();
          $conn->close();

        }
else {
       echo 'Niepoprawny login lub hasło!';
     }
      } else {
       echo 'Niepoprawny login lub hasło!';
     }
$stmt->close();
$conn->close(); 
}
}
?>
edytowany 1x, ostatnio: pol90, 2019-05-18 15:13

Pozostało 580 znaków

2019-05-18 15:18
0

Ogólnie jak zmieniłem na twoje to nie działa teraz w ogóle logowanie, bo wywala błąd tu:

  • $ranga = $_SESSION['user_rang'];
  • $stmt->bind_param("s", $email);

Pozostało 580 znaków

2019-05-18 15:23
0

No to weź odhaszuj te linijki mussiz sam pokombinowac bo ja z w tej bibliotece PDO nigdy nie robiłem.

//$stmt->bind_result($id, $hash); 
//$stmt->store_result(); // zapisz wynik

//$stmt = $conn->prepare($rQuery); 

Pozostało 580 znaków

2019-05-18 15:24
0

Próbowałem z odhszowanymi i też to samo, ale dzięki za pomoc. Może ktoś jeszcze się wypowie?

edytowany 1x, ostatnio: xyz_, 2019-05-18 15:25

Pozostało 580 znaków

2019-05-18 15:30
0

Jakby coś to tutaj masz sprawdzone rozwiązanie: https://github.com/delight-im/PHP-Auth


Pozostało 580 znaków

2019-05-18 15:33
0

Dzięki, ale wolałbym zostać przy swoim, bo bym musiał cały kod przerabiać.

w ogóle ta cala ranga istnieje w bazie ? - zdun 2019-05-19 13:17
Tak istnieje, zrobiłem ją typu int(1). 1-Admin, 0-zwykły user - xyz_ 2019-05-19 13:25
domyslam sie ze trzymasz gdzies dane dla admina ? - zdun 2019-05-19 13:33
chodzi Ci o osobną strone dla admina? Tak, adminpanel.php, normalny user ma index.php - xyz_ 2019-05-19 13:47

Pozostało 580 znaków

2019-05-19 14:05
0

Troche masz tam haos.

Struktura tabeli: ID, password, user_rang, email


<?php

session_start();

                                            function ReturnRow($ServerName, $UserName, $UserPassword, $DbName, $TableContent)
                                            {

                                                $Connection = mysqli_connect($ServerName, $UserName, $UserPassword);

                                                if(!$Connection)
                                                {

                                                die ('Nie można się polączyć z MySQL : ' . mysqli_connect_error());

                                                }

                                                $SelectDB = mysqli_select_db($Connection, $DbName);

                                                if(!$SelectDB)

                                                {

                                                print 'Nie mozna polaczyc sie z baza danych ' . mysqli_connect_error();

                                                }

                                                    $HasloZFormularza = "haslo";
                                                    $LoginZFormularza = "[email protected]";

                                                    $sql = "SELECT id, password, user_rang, email FROM $TableContent WHERE password='$HasloZFormularza' AND email='$LoginZFormularza'";
                                                    $result = mysqli_query($Connection,$sql);

                                                    if (mysqli_num_rows($result) > 0) 
                                                        {

                                                            while($row = mysqli_fetch_assoc($result))
                                                                {

                                                                    if($row['user_rang'] == 1)
                                                                    {

                                                                        $_SESSION['usr'] = '1';
                                                                        header('location: adminpanel.php');
                                                                        exit;

                                                                    } else {

                                                                        $_SESSION['usr'] = '0';
                                                                        header('location: index.php');
                                                                        exit;

                                                                    }

                                                                }

                                                        } else {

                                                            print 'Brak danych spełniajacyc hte kryteria';

                                                        }

                                                mysqli_close($Connection);
                                            }

                                        ReturnRow('localhost', 'root', 'pass', 'rangi', 'account');
// server, user, haslo, nazwa bazy, nazwa tabeli

?>

Teraz tylko sprawdzasz sesje na kazdej z tych stron

edytowany 1x, ostatnio: zdun, 2019-05-19 16:25
Pokaż pozostałe 2 komentarze
Tak zmieniłem tam na dole na swoją bazę danych i usunąłem pass, bo nie ma żadnego. Ogólnie jak włączę stronę logowanie od razu w rogu wyskakuje "Brak danych spełniających te kryteria" nawet bez wpisywania czegokolwiek, a jak próbuje się zalogować nic nie wyświetla tylko dalej zostaje na tej stronie. - xyz_ 2019-05-19 14:43
Linia 28 i 29 tam sa dane Twoje potrzebne do zalologowania. Teraz sa na sztywno. Zmien to na swoje z formularza. Tam jest tylko sprawdzenie hasla i emaila czy sa takie jak w bazie - zdun 2019-05-19 14:50
Dalej to samo. Ogólnie ten swój kod wkleiłem zamiast swojego, tak miało być? - xyz_ 2019-05-19 14:57
sprawdz jakie masz nazwy w tabeli $sql = "SELECT id, password, user_rang, email FROM $TableContent WHERE password='$HasloZFormularza' AND email='$LoginZFormularza'"; Jesli masz informacje ze brak danych to haslo lub/i email roznią się - zdun 2019-05-19 16:24
Zreszta pokaz co masz w tabeli jakie masz nazwy wierszy - zdun 2019-05-19 16:27

Pozostało 580 znaków

2019-05-19 16:31
0

Tak wygląda tabela:
title

Tak wygląda register.php:



```<?php
session_start();

if(isset($_SESSION['login_id'])){
  if (isset($_SESSION['pageStore'])) {
      $pageStore = $_SESSION['pageStore'];
header("location: $pageStore");
    }
}
 if (isset($_POST['signUp'])) {
if(!empty($_POST['fullName']) && !empty($_POST['email']) && !empty($_POST['newPassword']) && !empty($_POST['g-recaptcha-response'])){
$captcha = $_POST['g-recaptcha-response'];
$secretKey = "6LeVDJ4UAAAAAK1bx9E5VKOxNOnulyemW8l4Kfpi"; 
$ip = $_SERVER['REMOTE_ADDR']; //ip jest również wysyłane przez google
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip); google'a
        $responseKeys = json_decode($response,true);     
        if(intval($responseKeys["success"]) !== 1) { 

        } else {
      echo "Rejestracja zakończona sukcesem!";
        }
}

if (empty($_POST['fullName']) || empty($_POST['email']) || empty($_POST['newPassword']) || empty($_POST['g-recaptcha-response'] )) {
    $captcha = $_POST['g-recaptcha-response'];
echo "Proszę wypełnić wszystkie wymagane pola.";
}
else
{

        //if (empty($_POST['fullName']) || empty($_POST['email']) || empty($_POST['newPassword'] || empty($_POST['g-recaptcha-response']) )) {
$fullName = $_POST['fullName'];
$email = $_POST['email'];
$password = $_POST['newPassword'];
$hash = password_hash($password, PASSWORD_DEFAULT);

include('config.php');

$sQuery = "SELECT id from account where email=? LIMIT 1";
$iQuery = "INSERT Into account (fullName, email, password) values(?, ?, ?)"; 

if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $conn->prepare($sQuery);
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->bind_result($id);
$stmt->store_result();
$rnum = $stmt->num_rows;

if($rnum==0) { 
          $stmt->close();

          $stmt = $conn->prepare($iQuery);
          $stmt->bind_param("sss", $fullName, $email, $hash);
          if($stmt->execute()) {

        //echo 'Rejestracja zakończona sukcesem!';
        }
        } else { 
       echo 'Ktoś już zarejestrował się na ten adres email.';
     }
$stmt->close();
$conn->close(); 
}
}
edytowany 1x, ostatnio: xyz_, 2019-05-19 17:04
No to widzisz ze haslo masz haszowane wiec jak moze to dzialac. Pokaz ten kawalek ktory odpowiedzialny jest za to w pliku gdzie dodajesz do bazy nowego usera - zdun 2019-05-19 16:54
dodałem - xyz_ 2019-05-19 17:04
Ok a teraz powiedz mi w jaki sposob ustawiasz range - zdun 2019-05-19 17:12
Domyślnie jest ustawiona na 0 w bazie, a Adminowi zmieniłem ręcznie na 1 przez bazę danych. - xyz_ 2019-05-19 17:13

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0