• 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

Object Storage Arubacloud
+1 głos
248 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 (40,990 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 (253,340 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 (253,340 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 (253,340 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ź 423 wizyt
+2 głosów
10 odpowiedzi 957 wizyt
pytanie zadane 19 czerwca 2016 w Offtop przez Mr Popcorn Bywalec (2,340 p.)
0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 17 kwietnia 2018 w PHP przez JeyJey Użytkownik (710 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...