Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana skryptu logowania
Forum PHP.pl > Forum > PHP
MiQss
Witam, od razu mówię że za bardzo się nie znam na PHP, lecz muszę z lekka zmienić podany skrypt logowania, tak aby przekierowanie na stronę nie odbywało się na hide.php tylko na stronę, która nazywa się tak samo jak login użytkownika np. admin.php

KOD:
  1. <?php session_start();
  2. require_once('db.php');
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <link href="css/style.css" rel="stylesheet" type="text/css" />
  7. <title>Skrypt logowania z wykorzystaniem PHP i bazy MySQL</title>
  8. <meta name="description" content="Kurs jQuery" />
  9. <meta name="keywords" content="kurs, jquery, mlaskowski.pl" />
  10. </head>
  11.  
  12.  
  13. <?php
  14. /* jeżeli nie wypełniono formularza - to znaczy nie istnieje zmienna login, hasło i sesja auth
  15. * to wyświetl formularz logowania
  16. */
  17. if (!isset($_POST['login']) && !isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  18. ?>
  19.  
  20. <form name="form-logowanie" action="index.php" method="post">
  21. Login: <input type="text" name="login" /><br />
  22. Hasło: <input type="password" name="password" />
  23. <input type="submit" name="zaloguj" value="Zaloguj" />
  24. </form>
  25.  
  26. <?php
  27. }
  28. /* jeżeli istnieje zmienna login oraz password i sesja z autoryzacją użytkownika jest FALSE to wykonaj
  29. * skrypt logowania
  30. */
  31. elseif (isset($_POST['login']) && isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  32.  
  33. // jeżeli pole z loginem i hasłem nie jest puste
  34. if (!empty($_POST['login']) && !empty($_POST['password'])) {
  35.  
  36. // dodaje znaki unikowe dla potrzeb poleceń SQL
  37. $login = mysql_real_escape_string($_POST['login']);
  38. $password = mysql_real_escape_string($_POST['password']);
  39.  
  40. // szyfruję wpisane hasło za pomocą funkcji md5()
  41. $password = md5($password);
  42.  
  43. /* zapytanie do bazy danych
  44. * mysql_num_rows - sprawdzam ile wierszy odpowiada zapytaniu mysql_query
  45. * mysql_query - pobierz wszystkie dane z tabeli user gdzie login i hasło odpowiadają wpisanym danym
  46. */
  47. $sql = mysql_num_rows(mysql_query("SELECT * FROM `user` WHERE `login` = '$login' AND `password` = '$password'"));
  48.  
  49. // jeżeli powyższe zapytanie zwraca 1, to znaczy, że dane zostały wpisane poprawnie i rejestruję sesję
  50. if ($sql == 1) {
  51.  
  52. // zmienne sesysje user (z loginem zalogowanego użytkownika) oraz sesja autoryzacyjna ustawiona na TRUE
  53. $_SESSION['user'] = $login;
  54. $_SESSION['auth'] = TRUE;
  55.  
  56. // przekierwuję użytkownika na stronę z ukrytymi informacjami
  57. echo '<meta http-equiv="refresh" content="1; URL=hide.php">';
  58. echo '<p style="padding-top:10px";><strong>Proszę czekać...</strong><br />trwa logowanie i wczytywanie danych</p>';
  59. }
  60.  
  61. // jeżeli zapytanie nie zwróci 1, to wyświetlam komunikat o błędzie podczas logowania
  62. else {
  63. echo '<p style="padding-top:10px;color:red";>Błąd podczas logowania do systemu<br />';
  64. echo '<a href="index.php">Wróć do formularza</a></p>';
  65. }
  66. }
  67.  
  68. // jeżeli pole login lub hasło nie zostało uzupełnione wyświetlam błąd
  69. else {
  70. echo '<p style="padding-top:10px;color:red";>Błąd podczas logowania do systemu<br />';
  71. echo '<a href="index.php">Wróć do formularza</a></p>';
  72. }
  73. }
  74.  
  75. // jeżeli sesja auth jest TRUE to przekieruj na ukrytą podstronę
  76. elseif ($_SESSION['auth'] == TRUE && !isset($_GET['logout'])) {
  77. echo '<meta http-equiv="refresh" content="1; URL=hide.php">';
  78. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />trwa wczytywanie danych</p>';
  79. }
  80.  
  81. // wyloguj się
  82. elseif ($_SESSION['auth'] == TRUE && isset($_GET['logout'])) {
  83. $_SESSION['user'] = '';
  84. $_SESSION['auth'] = FALSE;
  85. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  86. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />trwa wylogowywanie</p>';
  87. }
  88. ?>
  89.  
  90. </body>
  91.  
  92. </html>


Dzięki!
Turson
Wrzuć kod w odpowiedni BBCode dla PHP
Michael2318
Znajdź:
  1. echo '<meta http-equiv="refresh" content="1; URL=hide.php">';


zmień na:

  1. echo '<meta http-equiv="refresh" content="1; URL='.$login.'.php">';
MiQss
A jeszcze chciałem się spytać, bo jak chcę zmienić w linijce 79 na to samo co wyżej dałem (oczywiście wyżej działa) to klops. Wywala na stronę http://index.php
Dzięki.

Na górze u mnie jest:
  1. echo '<meta http-equiv="refresh" content="1; URL=/'.$login.'/index.php">';
Michael2318
Ty w ogóle masz pojęcie co robisz?

  1. echo '<meta http-equiv="refresh" content="1; URL='.$login.'.php">';
MiQss
Wiem, ja chcę żeby mi do katalogu przenosiło:) źle podałem.
Michael2318
Zmienna $login ma określony zasięg i tam już się jej nie da obsłużyć, na to wygląda.

Zamiast $login, przypisz tam sesję - $_SESSION['user'] - bo w niej też masz zawarty login, a zmienna $_SESSION jest globalna.

EDIT:

Jeśli mówimy o tym kawałku kodu:

  1. elseif ($_SESSION['auth'] == TRUE && isset($_GET['logout'])) {
  2. $_SESSION['user'] = '';
  3. $_SESSION['auth'] = FALSE;
  4. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  5. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />trwa wylogowywanie</p>';
  6. }


To tam jednak też nie możesz użyć $_SESSION bo nadpisujesz ją (a właściwie przypisujesz NULLa). Zrób więc tak:

  1. elseif ($_SESSION['auth'] == TRUE && isset($_GET['logout'])) {
  2. $login = $_SESSION['user'];
  3. $_SESSION['user'] = '';
  4. $_SESSION['auth'] = FALSE;
  5. echo '<meta http-equiv="refresh" content="1; URL=/'.$login.'/index.php">';
  6. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />trwa wylogowywanie</p>';
  7. }
MiQss
Dziękuje Ci bardzo!:)

Ostatnie pytanko. Mam dwa pliki i chcę przesłać zmienną $file_to_download z tego pliku

  1. <?php session_start();
  2. require_once('archive/db.php');
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-2" />
  7. </head>
  8. <body>
  9.  
  10.  
  11. <?php if ($_SESSION['auth'] == TRUE) {
  12. $file_to_download = 'testowy.php'; //<----------------- TUTAJ ZMIEŃ NAZWĘ PLIKU
  13. echo '<form action="index.php" method="get">.'file_to_download'.</form>
  14.  
  15.  
  16. header("Content-Type: application/octet-stream");
  17. header("Content-Disposition: attachment; filename=" . $file_to_download);
  18.  
  19. readfile($file_to_download);} else { echo '<meta http-equiv="refresh" content="1; URL=index.php">'; }


do tego, aby był umiejscowiony tam gdzie jest napis "nazwa pliku"

  1. <?php session_start();
  2. require_once('archive/db.php');
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-2" />
  7. <link href="archive/frame.css" rel="stylesheet" type="text/css" />
  8. <title>APOTEX</title>
  9. </head>
  10. <body>
  11.  
  12. <?php if ($_SESSION['auth'] == TRUE) {
  13. echo '
  14. <div class="center">
  15. <div id="panel">
  16. <br>
  17. <text><a href="download.php">POBIERZ</a> Nazwa pliku:</p></text>' //////////////// TUTAJ
  18. <text><a href="http://test.schwarz-dtp.pl/index.php?logout">Wyloguj się</a></text>
  19. <br>
  20. </div>
  21. </div>
  22. ';
  23. }
  24. else {
  25. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  26. echo '
  27. <link href="archive/style.css" rel="stylesheet" type="text/css" />
  28. <div class="center">
  29. <div id="paneltext">
  30. <br>
  31. <center><text><strong>Próba nieautoryzowanego dostępu...</strong><br /><br><br>trwa przenoszenie do formularza logowania</text></center>
  32. <br>
  33. <br>
  34. </div>
  35. </div>
  36. ';
  37. }
  38. ?>
  39.  
  40. </body>
  41.  
  42. </html>
Michael2318
Wyjścia są dwa - albo includujesz ten plik do tego drugiego i wtedy masz dostępną zmienną $file_to_download w oby dwu plikach albo zapisujesz gdzieś wartość tej zmiennej, tak aby była ona dostępna globalnie - baza danych, ciasteczko/sesja.

Przeważnie takie dane się trzyma w bazie albo da się je odtworzyć na podstawie wartości w bazie danych, ale równie dobrze możesz przypisać pod tym:

  1. $file_to_download


  1. $_SESSION['file'] = $file_to_download;


i w tym drugim pliku odbierasz tę zmienną w ten sposób:

  1. $_SESSION['file'];


Aczkolwiek trzymanie nazw plików w sesji to trochę średni pomysł, ale nie wiem czy bazujesz na bazie danych, do czego Ci to potrzebne i jak z tego korzystasz, więc jak zrobisz to ostatecznie, to już Twoja decyzja.
MiQss
Niestety ta opcja nie zawsze działa raz tak raz nie
Michael2318
Jeżeli pod tym:

  1. $file_to_download = 'testowy.php'; //<----------------- TUTAJ ZMIEŃ NAZWĘ PLIKU


umieściłeś zmienną sesyjną:

  1. $_SESSION['file'] = $file_to_download;


I plik, w którym się to wszystko znajduje jest wykonywany ZAWSZE, jako pierwszy, przed tym drugim, gdzie chcesz uzyskać nazwę tego pliki i robisz to w ten sposób:

  1. echo $_SESSION['file'];


To skrypt nie ma prawa nie działać.
MiQss
Plik w którym znajduję się nazwa jest wywoływany jako 2.
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.