Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP - IF - FORM
Forum PHP.pl > Forum > PHP
Nidan23
Chciałbym zrobić takie cudo, że przycisk "wyloguj" pojawi się dopiero wtedy gdy się zalogujemy. Kod obecny wklejam poniżej:

  1. <?php
  2. if(unset($_SESSION['zalogowany'])) {
  3. echo file_get_contents('API/dot.php');
  4. }
  5. ?>


Jeżeli wiecie jak załączyć formularz do kodu php, to chętnie skorzystam, mi coś nie styka.
adbacz
Jeśli już, to takie coś smile.gif

  1. <?php
  2. if(unset($_SESSION['zalogowany'])) {
  3. include 'API/dot.php';
  4. }
  5. ?>
Nidan23
Zrobiłem i nie działa ://///////////
viking
A dlaczego miało by działać?
Kod
unset ( mixed $var [, mixed $... ] ) : void

Funkcja unset nic nie zwraca. Zobacz isset.
adbacz
No tak, fakt. unset() usuwa zmienną/indeks, dlatego if() nie działa - nie zauważyłem. Spróbuj tak:

  1. <?php
  2. if(isset($_SESSION['zalogowany'])) {
  3. include 'API/dot.php';
  4. }
  5. ?>
Nidan23
Zrobiłem jak mówiłeś, nic...

  1. <?php
  2. if(!isset($_SESSION['zalogowany'])) {
  3. include 'API/dot.php';
  4. ?>


Kod dot.php

  1. <form method="POST" action="wylog.php">
  2. <input class="pz" type="submit" value="wyloguj" name="wyloguj">
  3. </form>
viking
A gdzie niby w tym kodzie jest session_start? Php to nie wróżka.
Nidan23
Session start jest powyżej, razem z session register...

  1. <?php echo file_get_contents('config.php');
  2. session_register("zalogowany");
  3. ?>
viking
Aha. I błędy też są ale je ukrywasz. Start sesji ma być umieszczony przed treścią wysłaną do przeglądarki.
Nidan23
Są błędy, ale je ukrywam? Nie widzę sensu, jak jest błąd to wolę go naprawić niż ukryć, dziwne masz podejście kolego...
Po prostu ja ich nie widzę, a nikt w internetach, w sprawdzonych zródłach o tym nie mówi, a sesja działa, jestem na każdej podstronie zalogowany - sprawdzone dzięki skryptowi wylogowania...
viking
Skoro jesteś taki pewny to założysz się o 1000 cebulionów że nie ma żadnego warninga w kodzie
  1. <?php
  2. echo 'x';


Wklej sobie nawet tutaj https://wtools.io/php-sandbox jak nie wierzysz.
dublinka
Podaje Ci przykład jak można to zrobić.

  1. <?php
  2.  
  3. $Log = 'asd'; // dane do zalogowania login
  4. $Pwd = 'pwd'; // dane do zalogowania Hasło
  5.  
  6. if(!function_exists('LogIn'))
  7. {
  8.  
  9. function LogIn($ArgObj1)
  10. {
  11.  
  12. $ArgObj1 = "<form method=\"POST\" action=" . $_SERVER['SCRIPT_NAME'] . "?step=1>";
  13. $ArgObj1 .= "login: <input type=\"text\" name=\"LoginName\">";
  14. $ArgObj1 .= "Hasło: <input type=\"text\" name=\"PasswordName\">";
  15. $ArgObj1 .= "<input type=\"submit\" value=\"Loguj sie\" name=\"input\">";
  16. $ArgObj1 .= "</form>";
  17.  
  18. return $ArgObj1;
  19.  
  20. }
  21.  
  22. }
  23.  
  24. if(!function_exists('ShowLogOutLinkAndDetails'))
  25. {
  26.  
  27. function ShowLogOutLinkAndDetails($Arg2, $sess)
  28. {
  29.  
  30. $Arg2 = "Witaj: " . $_SESSION['login'];
  31. $Arg2 .= "<br>";
  32. $Arg2 .= "<a href=" . $_SERVER['SCRIPT_NAME'] . "?step=2>Wyloguj</a>";
  33.  
  34. return $Arg2;
  35.  
  36. }
  37.  
  38. }
  39.  
  40.  
  41.  
  42. @$step = $_GET['step'];
  43.  
  44. (!isset($step)) ? $step = 0 : $step = $step;
  45.  
  46. switch($step):
  47.  
  48. case('0'):
  49.  
  50. if(isset($_SESSION['reg']))
  51. {
  52.  
  53. print ShowLogOutLinkAndDetails($Arg2 = true, $_SESSION['login']);
  54.  
  55.  
  56. } else {
  57.  
  58. echo LogIn($ArgObj1 = true);
  59.  
  60. }
  61.  
  62. break;
  63.  
  64. case('1'):
  65.  
  66. $submit = $_POST['input'];
  67. $LoginName = $_POST['LoginName'];
  68. $PasswordName = $_POST['PasswordName'];
  69.  
  70. if(isset($_SESSION['reg']))
  71. {
  72.  
  73. print ShowLogOutLinkAndDetails($Arg2 = true, $_SESSION['login']);
  74.  
  75.  
  76. } else {
  77.  
  78.  
  79. if($submit)
  80. {
  81.  
  82. if(($LoginName == $Log) && ($PasswordName == $Pwd))
  83. {
  84.  
  85. if ($_SERVER['REQUEST_METHOD'] === 'POST')
  86. {
  87.  
  88.  
  89. if(session_status() == PHP_SESSION_ACTIVE)
  90. {
  91.  
  92. $_SESSION['login'] = $LoginName;
  93. $_SESSION['pass'] = $PasswordName;
  94. $_SESSION['reg'] = 'ok';
  95.  
  96. header('location:' . $_SERVER['SCRIPT_NAME']);
  97.  
  98. }
  99.  
  100.  
  101. }
  102.  
  103.  
  104. } else {
  105.  
  106. exit("Dane są nieprawidłowe <a href=". $_SERVER['SCRIPT_NAME'] .">WSTECZ</a>"); // nigdy nie podawaj przyczyny bledu chyba ze to bedzie blad loginu czy hasla
  107. }
  108.  
  109. } else {
  110.  
  111. exit("error 001"); // nigdy nie podawaj przyczyny bledu ; error 001 jest jak nie zostaje wyslany formularz. Tu albo to albo od razu header bez cackania sie
  112.  
  113. }
  114. }
  115.  
  116. break;
  117.  
  118. case('2'):
  119.  
  120. unset($LoginName);
  121. unset($PasswordName);
  122. unset($reg);
  123. $_SESSION = array();
  124.  
  125. header('location:' . $_SERVER['SCRIPT_NAME']);
  126.  
  127. break;
  128.  
  129. default:
  130. header('location:' . $_SERVER['SCRIPT_NAME']);
  131.  
  132.  
  133. endswitch;
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148. ?>


Cytat(viking @ 3.05.2019, 12:30:16 ) *
Skoro jesteś taki pewny to założysz się o 1000 cebulionów że nie ma żadnego warninga w kodzie
  1. <?php
  2. echo 'x';


Wklej sobie nawet tutaj https://wtools.io/php-sandbox jak nie wierzysz.


no ofkoz ze wywali. Kolego autorze. Nie daje sie NIC przed wywolaniem sesji - nawet entera a Ty jedziesz z plikiem
Nidan23
Jakiś warning może będzie, ale chciałbym zauważyć, że jest to plik dołączany do każdej pod strony - także tej, która jest widoczna tylko dla osób zalogowanych i tam to śmiga. Więc jeżeli macie jakiekolwiek inny pomysł jak ukryć przycisk wylogowania, to chętnie przygarnę pomysł.
viking
No to ja ci mówię jeszcze raz że nie ma prawa działać sesja z tym błędem. Pewnie masz zły kod który sprawdza czy dupa Maryny jest równa true albo przypisanie zamiast porównania i dlatego się jakiś if wykonuje.
Nidan23
Miałeś rację, co do sesji, ale to nie wyjaśnia, dlaczego nie mogę dać inputa i formularza jako echo.

Skąd wiem, że miałeś rację? Bo to działa:

  1. $kom = "";
  2. if(!isSet($_SESSION['zalogowany'])){
  3. $_SESSION['komunikat'] = "Nie jesteś zalogowany!";
  4. echo $_SESSION['komunikat'], "<br>";
  5. echo "<br>","Aby widzieć tę stronę musisz być zalogowany", "</font>", "</b>", "<br>", "</div>";
  6. echo file_get_contents('sklad/footer.php');
  7. exit();
  8. }
viking
Teraz nie wiem o czym mówisz. Kod możesz wstawić dowolny o ile będzie za nagłówkami.
Nidan23
To mi coś nie styka, kod np. taki:

  1. if(!isSet($_SESSION['zalogowany'])){
  2. $_SESSION['komunikat'] = "Nie jesteś zalogowany!";
  3. echo "<form method="POST" action="wylog.php">
  4. <input class="pz" type="submit" value="wyloguj" name="wyloguj">
  5. </form>";
  6. }


I okazało się, że to przez określenia jak ja na to mówię, czyli "class", "method" etc., bo są w tych pierdolinikach "". Ale nie mam pojęcia jak to naprawić, więc dlatego powstał ten wątek.
viking
Wstawiasz \" albo odpowiednio odwrotnie '. Sugeruje czytanie dokumentacji.
Nidan23
Dobra, zrobiłem takie cudo:

  1. <?php
  2. if(!isSet($_SESSION['zalogowany'])){
  3. echo '<form method="POST" action="wylog.php">
  4. <input class="pz" type="submit" value="wyloguj" name="wyloguj">
  5. </form>'
  6. }
  7. ?>


Tylko problem jest taki, że przycisk nie wykonuje akcji/skryptu "wylog.php" i dalej jest na stronie nawet będąc wylogowanym.

EDIT, no tak session, czekaj.

EDIT2. Kod edytowałem, masz u góry poprawiony, żeby nie spamować. Nic się nie zmieniło, ani nie wykonuje skryptu, ani nie ukrywa go będąc wylogowanym.

EDIT3. Po dodaniu "exit();" a wcześniej po zakończeniu "echo" tym ";" wyświetla mi się przycisk i to:

  1. '; exit(); } ?>
viking
W tym kodzie wyżej po echo jest błąd skladniowy. Brakuje srednika. Zwracaj uwagi na błędy w końcu.
Nidan23
Cytat(viking @ 3.05.2019, 18:00:28 ) *
W tym kodzie wyżej po echo jest błąd skladniowy. Brakuje srednika. Zwracaj uwagi na błędy w końcu.


Jak mówiłem, poprawiłem to, lecz nadal nie działa
dublinka
Cytat(Nidan23 @ 3.05.2019, 17:16:15 ) *
Miałeś rację, co do sesji, ale to nie wyjaśnia, dlaczego nie mogę dać inputa i formularza jako echo.

Skąd wiem, że miałeś rację? Bo to działa:

  1. $kom = "";
  2. if(!isSet($_SESSION['zalogowany'])){
  3. $_SESSION['komunikat'] = "Nie jesteś zalogowany!";
  4. echo $_SESSION['komunikat'], "<br>";
  5. echo "<br>","Aby widzieć tę stronę musisz być zalogowany", "</font>", "</b>", "<br>", "</div>";
  6. echo file_get_contents('sklad/footer.php');
  7. exit();
  8. }

Jak to dziala to ja jestem Świety Mikołaj. Zamiast kropek jako "łączników" dajesz przecinki. Przeanalizuj sobie ten pzyklad ktory podalem.

Podaj ten kod ktory masz ale wszystko to co wazne.

Ten mój przykład pisałem zbyt szybko i zrobilem kilka bledow. Min: zamiast dac unset na sesje dalem na zmienna ktora notabene juz nie istniala biggrin.gif Drugie to dodanie wznej rzeczy jaka jest zmiana identyfikatora sesji którą to nalezy zawsze dac przed i po rejestracji sesji. Trzecia sprawa dotyczy samego usunięcia sesji.

  1. <?php
  2.  
  3. $Log = 'asd'; // dane do zalogowania login
  4. $Pwd = 'pwd'; // dane do zalogowania Hasło
  5.  
  6. if(!function_exists('LogIn'))
  7. {
  8.  
  9. function LogIn($ArgObj1)
  10. {
  11.  
  12. $ArgObj1 = "<form method=\"POST\" action=" . $_SERVER['SCRIPT_NAME'] . "?step=1>";
  13. $ArgObj1 .= "login: <input type=\"text\" name=\"LoginName\">";
  14. $ArgObj1 .= "Hasło: <input type=\"password\" name=\"PasswordName\">";
  15. $ArgObj1 .= "<input type=\"submit\" value=\"Loguj sie\" name=\"input\">";
  16. $ArgObj1 .= "</form>";
  17.  
  18. return $ArgObj1;
  19.  
  20. }
  21.  
  22. }
  23.  
  24. if(!function_exists('ShowLogOutLinkAndDetails'))
  25. {
  26.  
  27. function ShowLogOutLinkAndDetails($sess)
  28. {
  29.  
  30. return "Witaj: " . $sess . "<br><a href=" . $_SERVER['SCRIPT_NAME'] . "?step=2>Wyloguj</a>";
  31.  
  32. }
  33.  
  34. }
  35.  
  36.  
  37.  
  38. @$step = $_GET['step'];
  39.  
  40. (!isset($step)) ? $step = 0 : $step = $step;
  41.  
  42. switch($step):
  43.  
  44. case('0'):
  45.  
  46. if(isset($_SESSION['user']['login']))
  47. {
  48.  
  49. print ShowLogOutLinkAndDetails($_SESSION['user']['login']);
  50.  
  51.  
  52. } else {
  53.  
  54. echo LogIn($ArgObj1 = true);
  55.  
  56. }
  57.  
  58. break;
  59.  
  60. case('1'):
  61.  
  62. $submit = $_POST['input'];
  63. $LoginName = $_POST['LoginName'];
  64. $PasswordName = $_POST['PasswordName'];
  65.  
  66. if(isset($_SESSION['user']['login']))
  67. {
  68.  
  69. print ShowLogOutLinkAndDetails($_SESSION['user']['login']);
  70.  
  71.  
  72. } else {
  73.  
  74.  
  75. if($submit)
  76. {
  77.  
  78. if(($LoginName == $Log) && ($PasswordName == $Pwd))
  79. {
  80.  
  81. if ($_SERVER['REQUEST_METHOD'] === 'POST')
  82. {
  83.  
  84.  
  85. if(session_status() == PHP_SESSION_ACTIVE)
  86. {
  87.  
  88.  
  89. $_SESSION['user']['login'] = $LoginName;
  90. $_SESSION['user']['password'] = $PasswordName;
  91.  
  92.  
  93. header('location:' . $_SERVER['SCRIPT_NAME']);
  94.  
  95. }
  96.  
  97.  
  98. }
  99.  
  100.  
  101. } else {
  102.  
  103. exit("Dane są nieprawidłowe <a href=". $_SERVER['SCRIPT_NAME'] .">WSTECZ</a>"); // nigdy nie podawaj przyczyny bledu chyba ze to bedzie blad loginu czy hasla
  104. }
  105.  
  106. } else {
  107.  
  108. exit("error 001"); // nigdy nie podawaj przyczyny bledu ; error 001 jest jak nie zostaje wyslany formularz
  109.  
  110. }
  111. }
  112.  
  113. break;
  114.  
  115. case('2'):
  116.  
  117. unset($_SESSION['user']['login']);
  118. unset($_SESSION['user']['password']);
  119.  
  120. $_SESSION = array();
  121. if (ini_get("session.use_cookies")) {
  122. setcookie(session_name(), '', time() - 42000,
  123. $params["path"], $params["domain"],
  124. $params["secure"], $params["httponly"]);
  125. }
  126.  
  127. header('location:' . $_SERVER['SCRIPT_NAME']);
  128.  
  129. break;
  130.  
  131. default:
  132. header('location:' . $_SERVER['SCRIPT_NAME']);
  133.  
  134.  
  135. endswitch;
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150. ?>
viking
Akurat kod z echo jest ok wink.gif
dublinka
Cytat(viking @ 4.05.2019, 09:33:41 ) *
Akurat kod z echo jest ok wink.gif

Nio tak. Zapomnialem o małych różnicach pomiędzy echo i print :/


Kolego! heloo ? did you solved you probs questionmark.gif?
Nidan23
Cytat(dublinka @ 4.05.2019, 14:08:25 ) *
Kolego! heloo ? did you solved you probs questionmark.gif?


Muszę doczytać o zmienny globalnych, czy jak to się nazywa w php, bo stosujesz chociażby $_SERVER, dostosuje skrypt pod moje potrzeby i dam Ci znać
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.