Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]funkcja Die
djtomaszq
post 20.07.2015, 08:44:30
Post #1





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

Ostrzeżenie: (0%)
-----


Mam taki fragment kodu/funkcje:

  1. function czy_zalogowany() {
  2. if(!$_SESSION['zalogowany']) {
  3. die('<p>Ta strona jest tylko dla zalogowanych.</p>');
  4. }
  5. }


umieszczam ją w różnych częściach strony jeśli nie jest przeznaczona dla użytkowników ma wyświetlać taki tekst jak wyżej.

Tylko, że wtedy ucina mi dalszą część strony i ten tekst wyświetla się poniżej szablonu strony. Jak temu zaradzić?
Go to the top of the page
+Quote Post
Forti
post 20.07.2015, 08:47:26
Post #2





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


Zamiast die wyświetlić po prostu jakiś komunikat? Twoim błędem jest połączenie warstwy widoku i logiki. Odziel je do różnych plików - najpierw wykonuje się logika, która dopiero wyświetla na końcu wygenerowany html.

DIE możesz zastąpić exception z tym że efekt będzie dokładnei taki sam. Wszystko do momentu DIE / exception zostanie wyświetlone.


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
djtomaszq
post 20.07.2015, 08:49:57
Post #3





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

Ostrzeżenie: (0%)
-----


Jeśli usunę Die i zostawię sam komentarz to wyświetla mi się wtedy ta strona którą chce ukryć.. a tą funkcje mam w pliku config.php a wyswietlam ją w innych plikach

jakiś mały przykład, bo nie wiem jak to rozmieścić..

Ten post edytował djtomaszq 20.07.2015, 08:51:12
Go to the top of the page
+Quote Post
Forti
post 20.07.2015, 08:55:11
Post #4





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


może po prostu if / else?
  1. if (user_ma_dostęp) {
  2. // strona dla usera
  3. } else {
  4. // brak dostępu
  5. }


trudne?


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
djtomaszq
post 20.07.2015, 09:01:45
Post #5





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

Ostrzeżenie: (0%)
-----


To nie jest trudne ale nie wiem gdzie mam to wstawić i jak dalej ehh :/

wywoluje tą funkcję w kilku plikach czyli muszę to zmieniać w każdym tak? Czy w config.php tą funkcję zmienić?

Napiszę więcej jak to wygląda bo może za mało danych podałem.
Strona index.php tam laduje szablon ogolny itp i tam includuje do diva podstrony na ktorych wlasnie jest ta funkcja i jesli się sprawdza to wyswietla napis z strona niedostepna wyswietla logo i wyswietla tlo i menu ale nie wyswietla części tego diva w ktorym jest biale tlo i ramka w ktorym pokazuje sie cos dla zarejestrowanych i w tej samej ramce chce zeby pokazalo to po DIE ale niestety ramka znika i jest tylko kolor tła...

Nie wiem czy to zrozumiale w miarę napisałem czy nic nowego..(?)
Go to the top of the page
+Quote Post
Daimos
post 20.07.2015, 09:20:14
Post #6





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


najprościej zrobić przekierowanie, na stronę, gdzie masz błąd. Czyli:
  1. function czy_zalogowany() {
  2. if(!$_SESSION['zalogowany']) {
  3. header("Location: mojplikzbledem.php");
  4. }
  5. }

a plik przygotuj tak, aby wyświetlał się cały szablon.
Nie wiem jak masz zbudowaną całą aplikację, ale chyba troszkę ją zakręciłeś, skoro nie masz możliwości zablokowania treści i pozostawienia reszty elementów, może czas przemyśleć strukturę aplikacji

Ten post edytował Daimos 20.07.2015, 09:21:39


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
djtomaszq
post 20.07.2015, 09:35:31
Post #7





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

Ostrzeżenie: (0%)
-----


plik index.php

  1. <html>
  2. <head>
  3. <title>W</title>
  4. <link rel="Shortcut icon" href="http://cdns2.freepik.com/darmowe-zdjecie/wariant-pi%C5%82ka_318-49974.jpg" />
  5. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  6. <link href="css/style.css" type="text/css" rel="stylesheet" />
  7. <link href="css/style_forum.css" type="text/css" rel="stylesheet" />
  8. <link href="css/style2.css" type="text/css" rel="stylesheet" />
  9. </head>
  10. <body>
  11. <?php
  12. include_once 'config.php';
  13. ?>
  14. <div id="top">
  15. <div id="NAGLOWEK"><span>Logo</span></div>
  16. <div id="LOGOWANIE"><?php include 'logowanie.php'; ?></div>
  17. <div id="menu_glowne"><center>
  18. <ul>
  19. <li><a href="index.php?parent=glowna">STRONA GŁÓWNA</a></li>
  20. <li><a href="index.php?parent=forum">FORUM</a></li>
  21. <li><a href="#">CZAT</a></li>
  22. <li><a href="#">MECZ</a></li>
  23. <li><a href="#">KONTAKT</a></li>
  24. <li><a href="#">POMOC</a></li>
  25. </ul></center>
  26. </div>
  27.  
  28. <div id="TRESC">
  29. <?
  30. SWITCH ($_GET['parent']){
  31.  
  32. CASE "forum":
  33. INCLUDE 'forum/forum.php';
  34. BREAK;
  35.  
  36. CASE "rejestr":
  37. INCLUDE 'register.php';
  38. BREAK;
  39.  
  40. CASE "logi":
  41. INCLUDE 'login.php';
  42. BREAK;
  43.  
  44. CASE "profi":
  45. include 'profile.php';
  46. BREAK;
  47.  
  48. CASE "lista":
  49. INCLUDE 'userlist.php';
  50. BREAK;
  51.  
  52. CASE "edycja":
  53. INCLUDE 'editprofile.php';
  54. BREAK;
  55.  
  56. DEFAULT:
  57. include 'pliki/glowna.php';
  58. BREAK;
  59. }
  60. ?>
  61. </div>
  62.  
  63. <div id="STOPKA"> Copyright &copy 2015 Theo</div>
  64. </div>
  65. </body>
  66. </html>


  1. function czy_zalogowany() {
  2. if(!$_SESSION['zalogowany']) {
  3. die('<p>Tylko dla zalogowanych !</p>');
  4. }
  5. }


plik profile.php

  1. <?php
  2. include_once 'config.php';
  3. db_connect();
  4.  
  5. czy_zalogowany();
  6. $_GET['id'] = (int)clear($_GET['id']);
  7. $user_data = get_user_data($_GET['id']);
  8. if($user_data === false) {
  9. echo '<p>Niestety, taki użytkownik nie istnieje.</p>
  10. <p><a href="index.php"><< Powrót</a></p>';
  11. } else {
  12. echo '<h2>Profil użytkownika</h2>
  13. <p>Nick: <b>'.$user_data['user_name'].'</b></p>
  14. <p>Imię: '.(empty($user_data['user_imie']) ? 'brak' : $user_data['user_imie']).'</p>
  15. <p>Wiek: '.(empty($user_data['user_wiek']) ? 'brak' : $user_data['user_wiek']).'</p>
  16. <p>Płeć: '.$user_data['user_plec'].'</p>
  17. <p>Email: '.$user_data['user_email'].'</p>
  18. <p>Data rejestracji: '.date("d.m.Y, H:i", $user_data['user_regdate']).'</p>
  19. <p>Strona WWW: '.(empty($user_data['user_website']) ? 'brak' : $user_data['user_website']).'</p>
  20. <p>Skąd: '.(empty($user_data['user_from']) ? 'brak' : $user_data['user_from']).'</p>';
  21. }
  22.  
  23. db_close();


Ten post edytował djtomaszq 20.07.2015, 09:36:17
Go to the top of the page
+Quote Post
Forti
post 20.07.2015, 09:57:01
Post #8





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


Niech funckja czy_zalogowany() zwraca true lub false.
  1. if (czy_zalogowany()) {
  2. // zalogowany
  3. } else {
  4. // nie zalogowany
  5. }



a najlepiej to wywal ją i daj po prostu if isset($_SESSION['zalogowany'])) lub array_key_exist. Jak nie będzie zalogowany to wywali ci pewnie błąd notice o nie istniejącym index "zalogowany".

Ten post edytował Forti 20.07.2015, 09:58:10


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
djtomaszq
post 20.07.2015, 10:30:19
Post #9





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

Ostrzeżenie: (0%)
-----


jak zrobie if to dalej nie ma reszty tła a jak isset to przy zalogowanym pokazuje mi ze brak dostepu a jak zrobie negacje to blad skladni..

tak jak mam wyzej kod jest wszystko dobrze tylko, że napisa "Ta strona tylko dla zalogowanych nie pokazuje sie w divie tylko poza szablonem strony..

EDIT:
  1. if(!$_SESSION['logged'])
  2. { echo' Brak dostępu';
  3. }else
  4. { dalsza czesc jak jest dostep... }

Tak działa. Nie jest to błędem? i jeśli wpisuje w pasek odrazu profile.php to pokazuje mi sie "brak dostępu" na białej stronie czyli zawartosc tego pliku. Czy to nie jest błędęm w programowaniu? Bo każdy kto by tak wpisał otrzyma wragment tylko tego pliku ? Jeśli tak to jak taki błąd naprawić?

Ten post edytował djtomaszq 20.07.2015, 10:31:18
Go to the top of the page
+Quote Post
Daimos
post 20.07.2015, 11:15:47
Post #10





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


1. podałem Ci rozwiązanie w pierwszym moim poście,
2. skoro za pomocą switch załączasz pliki php, to na tym poziomie możesz już sprawdzać prawa dostępu i w razie problemu załączyć plik osobny, z komunikatem o braku uprawnień


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
markuz
post 20.07.2015, 11:27:00
Post #11





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


  1. <?
  2.  
  3. $pages = array(
  4.  
  5. 'forum' => array(
  6. 'src' => 'forum/forum.php',
  7. 'logged' => false
  8. ),
  9.  
  10. 'rejestr' => array(
  11. 'src' => 'register.php',
  12. 'logged' => false
  13. ),
  14.  
  15. 'profi' => array(
  16. 'src' => 'profile.php',
  17. 'logged' => true
  18. )
  19.  
  20. );
  21.  
  22. ?><html>
  23. <head>
  24. <title>W</title>
  25. <link rel="Shortcut icon" href="http://cdns2.freepik.com/darmowe-zdjecie/wariant-pi%C5%82ka_318-49974.jpg" />
  26. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  27. <link href="css/style.css" type="text/css" rel="stylesheet" />
  28. <link href="css/style_forum.css" type="text/css" rel="stylesheet" />
  29. <link href="css/style2.css" type="text/css" rel="stylesheet" />
  30. </head>
  31. <body>
  32. <?php
  33. include_once 'config.php';
  34. ?>
  35. <div id="top">
  36. <div id="NAGLOWEK"><span>Logo</span></div>
  37. <div id="LOGOWANIE"><?php include 'logowanie.php'; ?></div>
  38. <div id="menu_glowne"><center>
  39. <ul>
  40. <li><a href="index.php?parent=glowna">STRONA GŁÓWNA</a></li>
  41. <li><a href="index.php?parent=forum">FORUM</a></li>
  42. <li><a href="#">CZAT</a></li>
  43. <li><a href="#">MECZ</a></li>
  44. <li><a href="#">KONTAKT</a></li>
  45. <li><a href="#">POMOC</a></li>
  46. </ul></center>
  47. </div>
  48.  
  49. <div id="TRESC">
  50. <?
  51.  
  52. // sprawdzamy czy użytkownik chce wejść na jakaś podstrone
  53. if(isset($_GET['parent'])) {
  54.  
  55. // sprawdzamy czy istnieje taka podstrona
  56. $name = $_GET['parent'];
  57. if(isset($pages[$name])) {
  58.  
  59. // sprawdzamy czy podstrona wymaga zalogowania oraz czy uzytkownik jest zalogowany
  60. if($pages[$name]['logged'] == true && !isset($_SESSION['logged'])) {
  61. echo "Błąd - brak autoryzacji";
  62. } else {
  63. // sprawdzamy czy istnieje plik dla danej podstrony
  64. $src = $pages[$name]['src'];
  65. if(file_exists($src)) {
  66. // wyswietlamy zawartosc podstrony
  67. include $src;
  68. } else {
  69. echo "Błąd 500";
  70. }
  71. }
  72.  
  73. } else {
  74. echo "Błąd 404";
  75. }
  76.  
  77. } else {
  78. include 'pliki/glowna.php';
  79. }
  80.  
  81. ?>
  82. </div>
  83.  
  84. <div id="STOPKA"> Copyright &copy 2015 Theo</div>
  85. </div>
  86. </body>
  87. </html>


Pisane z palca, ale powinieneś wiedzieć ocb.


--------------------
Go to the top of the page
+Quote Post
Daimos
post 20.07.2015, 12:11:35
Post #12





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Jeżeli ma plików niedużo, to może zostać przy swoim switch, bo file_exists jest niebezpieczne, przynajmniej w tej formie, którą zaproponowałeś wyżej. Trzeba wtedy robić porządną walidację.
Krótki przykład mini acl`a, Twoja funkcja czy_zalogowany:
  1. function czy_zalogowany() {
  2. if(isset($_SESSION['zalogowany']) && $_SESSION['zalogowany']) {
  3. return true;
  4. }
  5. return false;
  6. }

  1. <?
  2. $switch = isset($_GET['parent']) ? $_GET['parent'] : null;
  3. $loggedOnly = array('forum'); // tutaj wymieniasz elementy tylko dla zalogowanych
  4. if($switch && in_array($switch, $loggedOnly) && !czy_zalogowany())
  5. {
  6. $switch = 'brak_uprawnien';
  7. }
  8.  
  9. SWITCH ($switch){
  10.  
  11. CASE "forum":
  12. INCLUDE 'forum/forum.php';
  13. BREAK;
  14. CASE "brak_uprawnien":
  15. include "tresc_bledu.php"
  16. break;
  17. DEFAULT:
  18. include 'pliki/glowna.php';
  19. BREAK;
  20. }
  21. ?>


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
djtomaszq
post 21.07.2015, 19:34:17
Post #13





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

Ostrzeżenie: (0%)
-----


Nie rozumiem w drugim kodzie tych trzech linijek pierwszych ale... jesli zabezpieczam to w takim kodzie:
  1. if(!$_SESSION['logged'])
  2. echo ' Brak dostępu';
  3. else{ czesc strony dla zalogowanych


To mi dziala i musze sie zalogowac zeby tam wejsc. JEst ok ale moje pytanie teraz na ile to bezpieczne? Czy przy tym kodzie ktoś łatwo może wejść bez zalogowania na te forum ?
Go to the top of the page
+Quote Post
viking
post 21.07.2015, 19:41:08
Post #14





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Zależy w jaki sposób użytkownik był sprawdzony wcześniej. To tylko sprawdza już pewien status.
Może jeśli nie za trudne zainteresuj się mikroframeworkami (slim, silex, phlyty itd). By Ci to uporządkowało kod a zarazem poprawiło trochę warstwę logiki.


--------------------
Go to the top of the page
+Quote Post
djtomaszq
post 21.07.2015, 20:12:33
Post #15





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

Ostrzeżenie: (0%)
-----


Hmm wczesniej tzn? Podczas logowania?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.05.2024 - 08:23