ďťż
Podstrony
|
telcocafeMam problem ze skryptem logowania z Eksperta 9-10/2005. Trochę go przerobiłem.. :D No i problem taki, że nie działa... Gdyby ktoś znalazł by mi w nim błąd, gdzie on jest, i powiedział, to byłbym wdzięczny...<?php session_start(); session_register("status_uzyt"); echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"; echo "<html><head>"; echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\" />"; echo "<meta http-equiv=\"content-language\" content=\"pl\">"; echo "<title>Prosta strona ze skryptem logowania</title>"; echo "<style>"; echo "p {margin: 20px; background-color: #efefef;}"; echo "</style>"; echo "<body>"; function pokaz_okno_log() { echo "<p>"; echo "<form name="logowanie" action="index.php" method="post">"; echo "Login: <input type="text" name="login"><br>"; echo "Hasło: <input type="password" name=\"haslo\"><br>"; echo "<input type="hidden" name="strona" value="sprawdz">"; echo "<input type="submit" value="Zaloguj">"; echo "</p>"; } // Na początku skryptu najlepiej jest sprawdzić czy zmienna nie zawiera // żadnych danych - jeżeli nie zawiera możemy nadać jej naszą wartość // zabraniającą dostępu do strony if(empty($_SESSION['status_uzyt'])) { $_SESSION['status_uzyt'] = "0"; } // Pobieramy zmienną, która decyduje o tym, jaka strona jest wyświetlana if($HTTP_POST_VARS["strona"] == "") { $strona = $HTTP_GET_VARS["strona"]; } else { $strona = $HTTP_POST_VARS["strona"]; } // Sprawdzamy zawartość zmiennej $strona i wywołujemy odpowiednią akcję skryptu if($strona == "") { // Zmiennna nie została ustawiona czyli skrypt został wywołany bez niej. // Wyświetlamy więc stronę główną z możliwością przejścia do strony ukrytej if($_SESSION['status_uzyt'] == 0) { pokaz_okno_log(); } } elseif($strona == "zaloguj") { pokaz_okno_log(); } elseif($strona == "sprawdz") { include("./uprawnienia.php"); for($i=0;$i<count($Uzytkownik);$i++) { $UzytkownikDane[$i] = explode("|", $Uzytkownik[$i]); } // W tym miejscu srpawdzamy czy użytkownik podał odpowiednie dane w formularzu for($i=0;$i<count($Uzytkownik);$i++) { if($HTTP_POST_VARS["login"] == $UzytkownikDane[$i][0] && $HTTP_POST_VARS["haslo"] == $UzytkownikDane[$i][1]) { $_SESSION['status_uzyt'] = $UzytkownikDane[$i][2]; echo "<p>Gratuluję - zalogowałeś się na konto \""; echo $UzytkownikDane[$i][0]."\". Teraz możesz przejść do "; if($_SESSION['status_uzyt'] == 3) { echo "<a href=\"index.php?strona=superadministrator\">podstrony Superadministraotra</a> oraz do "; echo "<a href=\"index.php?strona=administrator\">podstrony Administraotra</a>, a także do "; echo "<a href=\"index.php?strona=uzytkownik\">podstrony Użytkownika</a> "; } elseif($_SESSION['status_uzyt'] == 2) { echo "<a href=\"index.php?strona=administrator\">podstrony Administraotra</a> oraz do "; echo "<a href=\"index.php?strona=uzytkownik\">podstrony Użytkownika</a> "; } elseif($_SESSION['status_uzyt'] == 1) { echo "<a href=\"index.php?strona=MarCynks\">gry na swoim koncie</a> "; } elseif($_SESSION['status_uzyt'] == 4) { echo "<a href=\"index.php?strona=Ala\">gry na swoim koncie</a> "; } } } if($_SESSION['status_uzyt'] == 0) { // Jeżeli użytkownik podał nieprawidłowe dane, wówczas ustalamy wartość zmiennej // na 0, wyświetlamy odpowiedni komunikat i pokazujemy okno do logowania $_SESSION['status_uzyt'] = 0; echo "<p>Logowanie nieudane. Spróbuj jeszcze raz.</p>"; pokaz_okno_log(); } } elseif($strona == "wyloguj") { // W tym miejscu wylogowujemy użytkownika. Wystarczy zmienną "$status_uzyt" ustawić // na wartość 0 i pokazać odpowiedni komunikat $_SESSION['status_uzyt'] = 0; echo "<p>Zostałeś wylogowany. Aby przejść na stronę główną <a href=\"index.php\">kliknij w tym miejscu</a>.</p>"; } elseif($strona == "superadministrator") { // Strona dostępna tylko dla Superadministratora if($_SESSION['status_uzyt'] == 3) { echo "<p>Znajdujesz się na stronie dostępnej tylko dla Superadministratorów. <a href=\"index.php?strona=wyloguj\">Możesz się wylogować.</a></p>"; } else { echo "<p>Ta strona dostępna jest tylko dla zalogowanych użytkowników (Superadministratorów).</p>"; pokaz_okno_log(); } } elseif($strona == "administrator") { // Strona dostępna tylko dla administratora if($_SESSION['status_uzyt'] == 2 || $_SESSION['status_uzyt'] == 3) { echo "<p>Znajdujesz się na stronie dostępnej tylko dla Superadministratorów i Administratorów. <a href=\"index.php?strona=wyloguj\">Możesz się wylogować.</a></p>"; } else { echo "<p>Ta strona dostępna jest tylko dla zalogowanych użytkowników (Superadministratorów i Administratorów).</p>"; pokaz_okno_log(); } } elseif($strona == "uzytkownik") { // Strona dostępna tylko dla Użytkownika if($_SESSION['status_uzyt'] == 1 || $_SESSION['status_uzyt'] == 2 || $_SESSION['status_uzyt'] == 3) { echo "<p>Znajdujesz się na stronie dostępnej tylko dla Superadministratorów, Administratorów i zalogowanych Użytkowników. <a href=\"index.php?strona=wyloguj\">Możesz się wylogować.</a></p>"; } else { echo "<p>Ta strona dostępna jest tylko dla zalogowanych użytkowników.</p>"; pokaz_okno_log(); } } elseif($strona == "MarCynks") { // Strona dostępna tylko dla Użytkownika if($_SESSION['status_uzyt'] == 1 || $_SESSION['status_uzyt'] == 2 || $_SESSION['status_uzyt'] == 3) { echo "<p>Jesteś zalogowany na konto MarCynks. Teraz graj do woli w WNM!!!<br>Aby się wylogować, kliknij tutaj:<a href=\"index.php?strona=wyloguj\">Wyloguj</a></p>"; } else { echo "<p>Ta strona dostępna jest tylko dla zalogowanych użytkowników. Musisz się zalogować.</p>"; pokaz_okno_log(); } } elseif($strona == "Ala") { // Strona dostępna tylko dla Użytkownika if($_SESSION['status_uzyt'] == 4 || $_SESSION['status_uzyt'] == 3) { echo "<p>Jesteś zalogowany na konto Ala. Teraz graj do woli w WNM!!!<br>Aby się wylogować, kliknij tutaj:<a href=\"index.php?strona=wyloguj\">Wyloguj</a></p>"; } else { echo "<p>Ta strona dostępna jest tylko dla zalogowanych użytkowników. Musisz się zalogować.</p>"; pokaz_okno_log(); } } echo "</body>"; echo "</html>"; ?> To był plik "index.php", teraz będzie plik "strona.php":<?php session_start(); session_register("jest_adminem"); $plik_skryptu = "strona.php"; function naglowek($tytul){ echo "<html>"; echo "<head>"; echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\" />"; echo "<meta http-equiv=\"content-language\" content=\"pl\">"; echo "<title>{$tytul}</title>"; echo "<body>"; } function pokaz_okno_log($komunikat) { global $plik_skryptu; echo "<p>{$komunikat}</p>"; echo "<form name=\"logowanie\" action=\"{$plik_skryptu}\" method=\"post\">"; echo "Login: <input type=\"text\" name=\"login\"><br>"; echo "Hasło: <input type=\"password\" name=\"haslo\"><br>"; echo "<input type=\"hidden\" name=\"strona\" value=\"sprawdz\">"; echo "<input type=\"submit\" value=\"Zaloguj\"></form>"; } function stopka(){ echo "</body>"; echo "</html>"; } if(empty($_SESSION['jest_adminem'])) { $_SESSION['jest_adminem'] = "nie"; } if($HTTP_POST_VARS["strona"] == "") { $strona = $HTTP_GET_VARS["strona"]; } else { $strona = $HTTP_POST_VARS["strona"]; } if($strona == "") { if($_SESSION['jest_adminem'] == "tak") { ?> Tutaj wpisujemy całą treść dokumentu, który chcemy zabezpieczyć. Możemy wewnątrz tej treści umieści odnośnik umożliwiający wylogowanie się internauty, na przykład taki: <a href=<?=$plik_skryptu?>?strona=wyloguj>Wyloguj</a>. <br> Bez żadnych przeszkód możemy również przenieść się na inną tajną stronę, juz bez konieczności logowania, na przykład na <a href="strona2.php">tajną stronę numer 2</a>. <? } else { naglowek("Uzytkownik nie jest zalogowany!"); pokaz_okno_log("Aby oglądać tę stronę musisz być zalogowany!"); stopka(); } } elseif($strona == "sprawdz") { if($HTTP_POST_VARS["login"] == "admin" && $HTTP_POST_VARS["haslo"] == "tajne") { $_SESSION['jest_adminem'] = "tak"; naglowek("Login i hasło poprawne!"); echo "<p>Zalogowanie zakończone sukcesem.<br>"; echo "Można już otworzyć <a href=\"{$plik_skryptu}\">tajną podstronę</a></p>"; stopka(); } else { $_SESSION['jest_adminem'] = "nie"; naglowek("Błąd logowania"); pokaz_okno_log("Zalogowanie się nie powiodło. Spróbuj jeszcze raz."); stopka(); } } elseif($strona == "wyloguj") { $_SESSION['jest_adminem'] = "nie"; naglowek("Wylogowanie"); echo "<p>Nastąpiło wylogowanie. <a href=\"{$plik_skryptu}\">Przejdź na stronę główną</a></p>"; stopka(); } ?> To był "strona.php" teraz będzie "uprawnienia.php":<?php $Uzytkownik[] = "superadmin|haslo|3"; $Uzytkownik[] = "admin|haslo|2"; $Uzytkownik[] = "MarCynks|XX|1"; $Uzytkownik[] = "Ala|ala|4"; $Uzytkownik[] = "uzytkownik|haslo|4"; ?>Wie ktoś może, gdzie jest błąd, i jak go usunąć??? Hmm :blink: Na przyszłość wrzucaj takie długie skrypty do codebox a nie code:P O ile się nie myle to w tym pierwszym skrypcie zmień odwołania index.php na strona.php ;) Bo nie podałeś jak się nazywa ten pierwszy skrypt, więc przypuszczam, że inaczej niz index.php <_< :) Użytkownik virus_jc edytował ten post 06 listopad 2005, 12:44 Podaj więcej szczegółow, czy się nie wyswietla, nie loguje. Wstaw np. echo"Tutaj nastepuje sprawdzenie uzytkownika", zeby zobaczyc co konkretnie się dzieje. Pierwszy kod to "index.php", napisałem to pod nim. Szczegóły: W przeglądarce wpisuje: moja strona.friko.pl/index.php i pisze w IE, że niby "gotowe" ale nie jest gotowe, bo NIC się nie wyświetla. A powinno wyświetlić formularz logowania (pola login hasło i przycisk "submit". A przed chwilą się wyświetlało (jak mniej rzeczy zmieniłem), więc nie jest to wina napewno ograniczeń friko.pl (ma Safe Mode czy coś takiego ;)). Aha i o co chodzi z tym CodeBoxem, bo jestem nowy na tym forum... Codebox? zamiast kod zamykać w code zamykaj w codebox Codebox? zamiast kod zamykać w code zamykaj w codebox Zrób to zobaczysz... Jeżeli pytasz się, jak to wpisać, to ja ci niestety nie pomogę, bo jak wpiszę, to mi interpretuje. Zrób to zobaczysz... Jeżeli pytasz się, jak to wpisać, to ja ci niestety nie pomogę, bo jak wpiszę, to mi interpretuje. Brawo, teraz edytuj pierwszy post i zmień code na codebox A forum nie obsługuje htmla dla bezpieczeństwa. No i czym to się różni? Tym, że jak dam code to pisze "kod" po polsku, a jak dam codebox to pisze po Angielsku "code". Edytuj pierwszy post to zobaczysz... Użytkownik dodek edytował ten post 06 listopad 2005, 15:03 Z tego co widze masz tutaj błąd: Brakuje ci znaków \ function pokaz_okno_log() { echo "<p>"; echo "<form name=\"logowanie\" action=\"index.php\" method=\"post\">"; echo "Login: <input type=\"text\" name=\"login\"><br>"; echo "Hasło: <input type=\"password\" name=\"haslo\"><br>"; echo "<input type=\"hidden\" name=\"strona\" value=\"sprawdz\">"; echo "<input type=\"submit\" value=\"Zaloguj\">"; echo "</p>"; } Użytkownik ursus6 edytował ten post 06 listopad 2005, 15:07 Z tego co widze masz tutaj błąd: Brakuje ci znaków \ function pokaz_okno_log() { echo "<p>"; echo "<form name=\"logowanie\" action=\"index.php\" method=\"post\">"; echo "Login: <input type=\"text\" name=\"login\"><br>"; echo "Hasło: <input type=\"password\" name=\"haslo\"><br>"; echo "<input type=\"hidden\" name=\"strona\" value=\"sprawdz\">"; echo "<input type=\"submi\t" value=\"Zaloguj\">"; echo "</p>"; } Daj zamiast elseif funckje switch jest bardziej przejrzysta. Bardzo prawdopodobne że pomyliłeś ilość klamer. Brawo, teraz edytuj pierwszy post i zmień code na codebox A forum nie obsługuje htmla dla bezpieczeństwa. Edytuj pierwszy post to zobaczysz... Z tego co widze masz tutaj błąd: Brakuje ci znaków \ function pokaz_okno_log() { echo "<p>"; echo "<form name=\"logowanie\" action=\"index.php\" method=\"post\">"; echo "Login: <input type=\"text\" name=\"login\"><br>"; echo "Hasło: <input type=\"password\" name=\"haslo\"><br>"; echo "<input type=\"hidden\" name=\"strona\" value=\"sprawdz\">"; echo "<input type=\"submit\" value=\"Zaloguj\">"; echo "</p>"; } W PHP nie ma różnicy, jaka przeglądarka - serwer i tak to samo wyśle. W PHP nie ma różnicy, jaka przeglądarka - serwer i tak to samo wyśle. |
|||
Sitedesign by AltusUmbrae. |