• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

prosty sposób na ukrycie div dla user a widoczny dla admin

Aruba Cloud - Virtual Private Server VPS
+1 głos
537 wizyt
pytanie zadane 8 lutego 2022 w PHP przez gatka84 Bywalec (2,150 p.)
Szukam szukam i nie mogę nigdzie znaleźć jak w tytule dla zalogowanych ma być ukryty div i widoczny tylko dla admin i kombinuje jak to w prosty sposób zrobić z if gdzie porówna nazwę lub id i jeśli się zgadza to widać inaczej nie.

Ktoś może przerabiał coś takiego?

2 odpowiedzi

0 głosów
odpowiedź 8 lutego 2022 przez reaktywny Nałogowiec (46,230 p.)
Bardzo łatwo robi się takie rzeczy np. w Vue za pomocą dyrektyw. Jeśli aplikacja jest renderowana po stronie serwera to ten problem odpada, bo serwuje się odpowiedni template dla osób zalogowanych / niezalogowanych / admina.
komentarz 9 lutego 2022 przez gatka84 Bywalec (2,150 p.)
Bardziej szukam czegoś w php, nie chce Vue wprowadzać tylko dla jednego elementu

ale dziękuje za podpowiedź.
0 głosów
odpowiedź 9 lutego 2022 przez VBService Ekspert (256,600 p.)
edycja 9 lutego 2022 przez VBService

Bardziej szukam czegoś w php, nie chce Vue wprowadzać tylko dla jednego elementu

rozumiem, że ma być coś zupełnie proste, to może po prostu tak ...

 

przykład

index.php

<?php
  session_start();

  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Tu sprawdzenie login-a i hasła z bazy danych
    // dla demonstracji poniżej symulacja zalogowania
    $users = ['user', 'admin'];
    if (in_array($_POST['login'], $users, true)) {
      $_SESSION['zalogowany_rola'] = $_POST['login'];
      header('Location: content.php');
      exit();
    }
  } else {
    unset($_SESSION);
    session_destroy();
  }
?>
<style>
  form {
    margin: 2em;
  }
  input {
    display: block;
    margin: 1em 0;
  }
</style>
<form action="" method="post">
  <input type="text" id="login" name="login" placeholder="login" readonly />
  <input type="password" id="password" name="password" placeholder="password" readonly />

  <button type="submit" id="user">Login as user</button>
  <button type="submit" id="admin">Login as admin</button>
</form>
<script>
  const form = document.querySelector('form');
  form.addEventListener('click', loginAs);

  function loginAs(e) {
    if (e.target.nodeName == 'BUTTON') {
      form.querySelector('input#login').value = e.target.id;
      form.querySelector('input#password').value = '1234';
    } else {
      e.preventDefault();
    }    
  }
</script>

 

content.php

<?php
  session_start();

  if (isset($_COOKIE['PHPSESSID']) && isset($_SESSION['zalogowany_rola'])) {
    $user = $_SESSION['zalogowany_rola'];

    if ($user == 'admin') {
      $admin_content = '<div class="admin-content">'
                     . 'Zawartość tylko dla administratora.'
                     . '</div>';
    } else {
      $admin_content = '';
    }
  } else {
    $user = $admin_content = '';
  }
?>
<style>
  div, a {
    margin: 1em;
  }
  .admin-content {
    color: red;
  }
</style>
<div>Zalogowany: <?php echo $user; ?></div>

<?php echo $admin_content; ?>

<a href="index.php">zaloguj ponownie</a>

 

inna wersja  content.php

<?php
  session_start();

  $user = '';
  $admin_content = false;

  if (isset($_COOKIE['PHPSESSID']) && isset($_SESSION['zalogowany_rola'])) {
    $user = $_SESSION['zalogowany_rola'];

    if ($user == 'admin') {
      $admin_content = true;
    } else {
      $admin_content = false;
    }
  }
?>
<!DOCTYPE html>
<html lang="pl">
  <head>
    <meta charset="utf-8" />

    <style>
      div, a, p {
        margin: 1em;
      }
      div p {
        margin: 0;
      }
      div span {
        font-weight: bold;
      }
      .admin-content {
        color: red;
      }
      .admin-footer {
        font: 900 0.8em/1.1 monospace;
        margin: 2em 0 0 1em;
      }
    </style>
  </head>
  <body>

    <div>Zalogowany: <span><?php echo $user; ?></span></div>
    <p>Lorem ipsum ...</p>


<?php if ($admin_content): ?>
    <div class="admin-content">
      <p>Zawartość tylko dla administratora.</p>
      <p>Więcej dla administratora</p>
    </div>
<?php endif; ?>


    <div>Lorem ipsum ...</div>
    <a href="index.php">zaloguj ponownie</a>


<?php if ($admin_content): ?>
    <div class="admin-footer">
      Kolejna zawartość tylko dla administratora
    </div>
<?php endif; ?>

  </body>
</html>

 

komentarz 9 lutego 2022 przez gatka84 Bywalec (2,150 p.)
super dzięki posiedzę nad tym i popróbuje

i od razu prosiła bym jeszcze o info jak dokładnie powinna wyglądać baza do tego logowania tz

id user password     i coś jeszcze?

 jeśli tak to jakie dokładnie oznaczone ma to być w bazie
komentarz 9 lutego 2022 przez gatka84 Bywalec (2,150 p.)

a ma jeszcze takie pytanie czy przy obecnym content.php u mnie mogę jakoś zastosować

            $user = '';
			$admin_content = false;
			$user = $_SESSION['user'];

			if ($user == 'admin') {
				$admin_content = true;
			} else {
				$admin_content = false;
			}

 

i w tedy tam gdzie będzie potrzeba ukrycia tylko dla admni na stronach to dała bym

<?php if ($admin_content): ?>
    <div class="admin-content">
      <p>Zawartość tylko dla administratora.</p>
      <p>Więcej dla administratora</p>
    </div>
<?php endif; ?>

mam obecnie tak

session_start();
	
	if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
	{
		header('Location: index.php');
		exit();
	}
	require_once "connect.php";

	$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
	
	if ($polaczenie->connect_errno!=0)
	{
		echo "Error: ".$polaczenie->connect_errno;
	}
	else
	{
		$login = $_POST['login'];
		$haslo = $_POST['haslo'];
		
		$login = htmlentities($login, ENT_QUOTES, "UTF-8");
		$haslo = htmlentities($haslo, ENT_QUOTES, "UTF-8");
	
		if ($rezultat = @$polaczenie->query(
		sprintf("SELECT * FROM uzytkownicy WHERE user='%s' AND pass='%s'",
		mysqli_real_escape_string($polaczenie,$login),
		mysqli_real_escape_string($polaczenie,$haslo))))
		{
			$ilu_userow = $rezultat->num_rows;
			if($ilu_userow>0)
			{
				$_SESSION['zalogowany'] = true;				
				$wiersz = $rezultat->fetch_assoc();

				$_SESSION['id'] = $wiersz['id'];
				$_SESSION['user'] = $wiersz['user'];
				$_SESSION['usertype'] = $wiersz['usertype'];

				unset($_SESSION['blad']);
				$rezultat->free_result();
				header('Location: start.php');				
			} else {				
				$_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
				header('Location: index.php');				
			}			
		}		
		$polaczenie->close();
	}	
?>

próbuje to dodać po

$wiersz = $rezultat->fetch_assoc();

ale niestety błąd na stronie wywala

Undefined variable: admin_content in

jakiś pomysł czy muszę przerobić mój content.php do tego jak jest podane powyżej żeby zadziałało

komentarz 9 lutego 2022 przez VBService Ekspert (256,600 p.)
edycja 9 lutego 2022 przez VBService

id user password     i coś jeszcze?

dodać no choćby pole np. user_type (nazwa dowolna - typ pola ENUM Type) i w nim np.

  • user (czyli zalogowany - np. widzi kontent strony i może edytować swoje wpisy i swój profil)
  • admin (czyli zalogowany - np. widzi kontent strony z prawami edycji wszystkich wpisów i wszystkich profili itp.)

przykład

CREATE TABLE `uzytkownicy` (
    `id` int NOT NULL AUTO_INCREMENT,
    `user`  VARCHAR(30),
    `password` VARCHAR(30),
    `user_type` ENUM('user', 'admin'),
    PRIMARY KEY (id)
);

INSERT INTO `uzytkownicy` (`user`, `password`, `user_type`)
 VALUES ('user1', 'password1', 'user');

INSERT INTO `uzytkownicy` (`user`, `password`, `user_type`)
 VALUES ('user2', 'password2', 'user');

INSERT INTO `uzytkownicy` (`user`, `password`, `user_type`)
 VALUES ('user3', 'password3', 'admin');

 no i wtedy

$_SESSION['user_type'] = $wiersz['user_type'];

chyba, że zostawisz tak jak już masz nazwę usertype  (Twój wybór)

...
`usertype` ENUM('user', 'admin'),


INSERT INTO `uzytkownicy` (`user`, `password`, `usertype`) ...

 

komentarz 9 lutego 2022 przez VBService Ekspert (256,600 p.)
edycja 9 lutego 2022 przez VBService

admin_content to tylko nazwa zmiennej (typu boolean)

propozycja przeróbki

session_start();
     
   $_SESSION['admin_content'] = false;

    if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
    {
        header('Location: index.php');
        exit();
    }
    require_once "connect.php";
 
    $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
     
    if ($polaczenie->connect_errno!=0)
    {
        echo "Error: ".$polaczenie->connect_errno;
    }
    else
    {
        $login = $_POST['login'];
        $haslo = $_POST['haslo'];
         
        $login = htmlentities($login, ENT_QUOTES, "UTF-8");
        $haslo = htmlentities($haslo, ENT_QUOTES, "UTF-8");
     
        if ($rezultat = @$polaczenie->query(
        sprintf("SELECT * FROM uzytkownicy WHERE user='%s' AND pass='%s'",
        mysqli_real_escape_string($polaczenie,$login),
        mysqli_real_escape_string($polaczenie,$haslo))))
        {
            $ilu_userow = $rezultat->num_rows;
            if($ilu_userow>0)
            {
                $_SESSION['zalogowany'] = true;             
                $wiersz = $rezultat->fetch_assoc();
 
                $_SESSION['id'] = $wiersz['id'];
                $_SESSION['user'] = $wiersz['user'];
                $_SESSION['usertype'] = $wiersz['usertype'];
 
                $_SESSION['admin_content'] = ($_SESSION['usertype'] == 'admin') ? true : false;

                unset($_SESSION['blad']);
                $rezultat->free_result();
                header('Location: start.php');              
            } else {                
                $_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
                header('Location: index.php');              
            }           
        }       
        $polaczenie->close();
    }   
?>

i później gdziekolwiek, przykładowy kod html + php dla admina.

<?php if ($_SESSION['admin_content']): ?>
    <style>
     /* jakieś dodatkowe style css */
    </style>
    <div class="admin-content">
      <p>Zawartość tylko dla administratora.</p>
      <p>Więcej dla administratora <span>[data z serwera: <?php echo date("Y-m-d"); ?>]</span></p>
    </div>
    <script>
      // dodatkowy javascript itd.
    </script>
<?php endif; ?>

no i przy wylogowaniu np.

    unset($_SESSION);
    session_destroy();

 

1
komentarz 9 lutego 2022 przez gatka84 Bywalec (2,150 p.)
Wielkie dzięki działa

Podobne pytania

0 głosów
1 odpowiedź 526 wizyt
+2 głosów
10 odpowiedzi 1,447 wizyt
pytanie zadane 19 czerwca 2016 w Offtop przez Mr Popcorn Bywalec (2,340 p.)
0 głosów
1 odpowiedź 190 wizyt
pytanie zadane 17 kwietnia 2018 w PHP przez JeyJey Użytkownik (710 p.)

93,335 zapytań

142,330 odpowiedzi

322,415 komentarzy

62,669 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...