Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ PHP - IF - FORM

Napisany przez: Nidan23 1.05.2019, 19:16:42

Chciałbym zrobić takie cudo, że przycisk "wyloguj" pojawi się dopiero wtedy gdy się zalogujemy. Kod obecny wklejam poniżej:

  1. <?php
  2. if(http://www.php.net/unset($_SESSION['zalogowany'])) {
  3. http://www.php.net/echo http://www.php.net/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.

Napisany przez: adbacz 1.05.2019, 20:01:41

Jeśli już, to takie coś smile.gif

  1. <?php
  2. if(http://www.php.net/unset($_SESSION['zalogowany'])) {
  3. include 'API/dot.php';
  4. }
  5. ?>

Napisany przez: Nidan23 1.05.2019, 20:57:33

Zrobiłem i nie działa ://///////////

Napisany przez: viking 2.05.2019, 07:11:51

A dlaczego miało by działać?

Kod
unset ( mixed $var [, mixed $... ] ) : void

Funkcja unset nic nie zwraca. Zobacz isset.

Napisany przez: adbacz 2.05.2019, 07:13:10

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

  1. <?php
  2. if(http://www.php.net/isset($_SESSION['zalogowany'])) {
  3. include 'API/dot.php';
  4. }
  5. ?>

Napisany przez: Nidan23 2.05.2019, 13:21:26

Zrobiłem jak mówiłeś, nic...

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


Kod dot.php

  1. <http://december.com/html/4/element/form.html method="POST" action="wylog.php">
  2. <http://december.com/html/4/element/input.html class="pz" type="submit" value="wyloguj" name="wyloguj">
  3. </http://december.com/html/4/element/form.html>

Napisany przez: viking 2.05.2019, 14:48:32

A gdzie niby w tym kodzie jest session_start? Php to nie wróżka.

Napisany przez: Nidan23 2.05.2019, 18:43:24

Session start jest powyżej, razem z session register...

  1. <?php http://www.php.net/echo http://www.php.net/file_get_contents('config.php');
  2. http://www.php.net/session_start();
  3. http://www.php.net/session_register("zalogowany");
  4. ?>

Napisany przez: viking 3.05.2019, 04:50:50

Aha. I błędy też są ale je ukrywasz. Start sesji ma być umieszczony przed treścią wysłaną do przeglądarki.

Napisany przez: Nidan23 3.05.2019, 11:00:57

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...

Napisany przez: viking 3.05.2019, 11: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. http://www.php.net/echo 'x';
  3. http://www.php.net/session_start();


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

Napisany przez: dublinka 3.05.2019, 12:30:15

Podaje Ci przykład jak można to zrobić.

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


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. http://www.php.net/echo 'x';
  3. http://www.php.net/session_start();


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

Napisany przez: Nidan23 3.05.2019, 15:37:55

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ł.

Napisany przez: viking 3.05.2019, 15:49:29

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.

Napisany przez: Nidan23 3.05.2019, 16: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. http://www.php.net/session_start();
  2. $kom = "";
  3. if(!http://www.php.net/isset($_SESSION['zalogowany'])){
  4. $_SESSION['komunikat'] = "Nie jesteś zalogowany!";
  5. http://www.php.net/echo $_SESSION['komunikat'], "<br>";
  6. http://www.php.net/echo "<br>","Aby widzieć tę stronę musisz być zalogowany", "</font>", "</b>", "<br>", "</div>";
  7. http://www.php.net/echo http://www.php.net/file_get_contents('sklad/footer.php');
  8. http://www.php.net/exit();
  9. }

Napisany przez: viking 3.05.2019, 16:29:54

Teraz nie wiem o czym mówisz. Kod możesz wstawić dowolny o ile będzie za nagłówkami.

Napisany przez: Nidan23 3.05.2019, 16:36:19

To mi coś nie styka, kod np. taki:

  1. if(!http://www.php.net/isset($_SESSION['zalogowany'])){
  2. $_SESSION['komunikat'] = "Nie jesteś zalogowany!";
  3. http://www.php.net/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.

Napisany przez: viking 3.05.2019, 16:39:04

Wstawiasz \" albo odpowiednio odwrotnie '. Sugeruje czytanie dokumentacji.

Napisany przez: Nidan23 3.05.2019, 16:50:08

Dobra, zrobiłem takie cudo:

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


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(); } ?>

Napisany przez: viking 3.05.2019, 17:00:28

W tym kodzie wyżej po echo jest błąd skladniowy. Brakuje srednika. Zwracaj uwagi na błędy w końcu.

Napisany przez: Nidan23 3.05.2019, 17:09:59

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

Napisany przez: dublinka 4.05.2019, 08:49:10

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. http://www.php.net/session_start();
  2. $kom = "";
  3. if(!http://www.php.net/isset($_SESSION['zalogowany'])){
  4. $_SESSION['komunikat'] = "Nie jesteś zalogowany!";
  5. http://www.php.net/echo $_SESSION['komunikat'], "<br>";
  6. http://www.php.net/echo "<br>","Aby widzieć tę stronę musisz być zalogowany", "</font>", "</b>", "<br>", "</div>";
  7. http://www.php.net/echo http://www.php.net/file_get_contents('sklad/footer.php');
  8. http://www.php.net/exit();
  9. }

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

Napisany przez: viking 4.05.2019, 09:33:41

Akurat kod z echo jest ok wink.gif

Napisany przez: dublinka 4.05.2019, 13:08:25

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?

Napisany przez: Nidan23 4.05.2019, 15:00:55

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ć

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)