![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam napisałem skrypt logowanie oparty na mysql i na sesjach lecz się nie uruchamia(nie wywala błędów). Oto on:
Formularz logowania: Kod <?PHP error_reporting(E_ALL); ini_set('display_errors', 1); session_start(); if(isset($_POST['username']) && isset($_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; $db_connect = new mysqli('localhost' , 'usa' , 'haslo', 'engtest'); if(mysqli_connect_errno()) { echo 'POŁĄCZENIE Z BAZĄ DANYCH NIE POWIODŁO SIE: '.mysqli_connect_error(); exit(); } $zapytanie = 'select * from member' ." where username='$username' " ." and password=sha1('$password')"; $result = $db_connect->query($zapytanie); if($result->num_rows > 0) { $_SESSION['prawid_uzyt'] =$username; } $db_connect->close(); } ?> <HTML> <BODY> <BR><BR><BR><BR><BR><BR><BR><BR><BR> <?php if(isset($_SESSION['prawid_uzyt'])) { echo 'Użytkownik zalogowany jako: '.$_SESSION['prawid_uzyt']; } else { if(isset($username)) { echo 'Zalogowanie niemożliwe'; } else { echo 'Użytkownik niezalogowany '; } } echo '<form method="post" action ="member.php">'; echo '<center><TABLE frame="vsides" width = 216>'; echo '<TR><TD><center>'; echo ' <IMG SRC="img/log.gif" WIDTH="199" HEIGHT="28" BORDER="0" ALT="LOGOWANIE"> '; echo '</center></TD>'; echo '<TABLE frame="vsides" width = 216>'; echo '<TR><TD><B><center>LOGIN:</center> </B></TD>'; echo '<TD><B><center><input type="text" name="username" size = 10></center> </B></TD></TR>'; echo '<TR><TD><B><center>HASŁO:</center> </B></TD>'; echo '<TD><center><INPUT TYPE="password" NAME="password" size = 10></center></TD></TR>'; echo '</center></TABLE></form>'; echo'<INPUT TYPE="submit" value="Loguj">'; ?> </BODY> </HTML> Skrypt sprawdzający sesje: Kod <?php error_reporting(E_ALL); ini_set('display_errors', 1); session_start(); if(isset($_SESSION['prawid_uzyt'])) { header("Location: http://localhost/.../.../admin_pan.html"); } else { header("Location: http://localhost/.../.../logon_root.php"); } ?> Baza: Kod create database engtest; use member; create table member (username varchar(64) not NULL, haslo varchar(64) not null, mail varchar(100) not null, primary key(username) ); insert into member values ('jacek' , sha1('jacek') , 'mail'); Sytuacja wygląda tak ze wpisuje login i hasło i ponownie zostaje przelogowany do formularz logowania. Nie wiem co mam zrobić. Siedziałem nad tym kodem i nie znalazłem żadnego błędu możne macie jakieś sugestie? Bede naprawdę wdzięczny za pomoc. Pozdrawiam. Ten post edytował einstein 29.09.2008, 19:05:05 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 38 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie przeglądałem tego Twojego całego skryptu ale co do tej linijki
zobacz http://pl2.php.net/manual/pl/errorfunc.con....display-errors a dokładnie Cytat Informacja: Although display_errors may be set at runtime (with ini_set()), it won't have any affect if the script has fatal errors. This is because the desired runtime action does not get executed. czyli jeśli w skrypcie masz fatal error to zamierzony efekt(wyświetlanie errorów) nie zadziała, więc lepiej ustawić tą dyrektywę bezpośrednio w pliku konfiguracyjnym. Ten post edytował kaem 29.09.2008, 18:50:38 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 463 Pomógł: 49 Dołączył: 27.12.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Proszę o dodanie odpowiedniego tagu do tematu. Inaczej zostanie on zamknięty.
Pozdrawiam -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
W pliku konfiguracyjnym php.ini mam coś takiego:
Kod ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Error handling and logging; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; error_reporting is a bit-field. Or each number up to get desired error ; reporting level ; E_ALL - All errors and warnings (doesn't include E_STRICT) ; E_ERROR - fatal run-time errors ; E_WARNING - run-time warnings (non-fatal errors) ; E_PARSE - compile-time parse errors ; E_NOTICE - run-time notices (these are warnings which often result ; from a bug in your code, but it's possible that it was ; intentional (e.g., using an uninitialized variable and ; relying on the fact it's automatically initialized to an ; empty string) ; E_STRICT - run-time notices, enable to have PHP suggest changes ; to your code which will ensure the best interoperability ; and forward compatibility of your code ; E_CORE_ERROR - fatal errors that occur during PHP's initial startup ; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's ; initial startup ; E_COMPILE_ERROR - fatal compile-time errors ; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) ; E_USER_ERROR - user-generated error message ; E_USER_WARNING - user-generated warning message ; E_USER_NOTICE - user-generated notice message Wiec wygląda na to że wszystko jest ustawione ok. Co teraz? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 38 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wkleiłeś fragment, który nic nam nie mówi, bo jest tylko opisem możliwych ustawień błędów
Ogólnie ustaw error_reporting na On i displays_errors też na On. U mnie te fragmenty pliku php.ini wyglądają tak: Cytat ... i ;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR ; ; - Show all errors, except coding standards warnings ; error_reporting = E_ALL Cytat ; To output errors to STDERR with CGI/CLI: ;display_errors = "stderr" ; ; Default ; display_errors = On Pamiętaj, że średnik przed wierszem w php.ini oznacza, że ta linijka jest pomijana przez serwer. Jak już będziesz miał tak ustawiony plik konfiguracyjny możesz wywalić ze skryptu . Teraz ewentualne błędy powinny się wyświetlić chyba, że w skrypcie jest jakiś logiczny błąd, ale nie sprawdzałem, bo mam dzisiaj zły dzień hehe. EDIT Offtopic: Mój setny post! ![]() Ten post edytował kaem 29.09.2008, 19:53:57 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdziłem i mam tak samo jak kaem w php.ini.
Wywaliłem także: Kod <?php error_reporting(E_ALL); ini_set('display_errors', 1); ?> Lecz nic to nie pomogło. Już nie wiem co mam robić ![]() Czy jeszcze ktoś ma jakieś pomysły? Wydaje mi się że coś jest nie tak z zapamiętywaniem sesji skoro mnie przelogowuje. Jest gdzieś takie ustawienie w php.ini? P.S. Czy mógłby ktoś przetestować mój skrypt u siebie? Będę naprawdę bardzo wdzięczny bo być możne coś jest nie tak z moim serwerem. Używam xampp'a. Ten post edytował einstein 30.09.2008, 11:41:00 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 5 Dołączył: 29.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Błąd masz w zapytaniu:
Kod $zapytanie = 'select * from member' ." where username='$username' " ." and password=sha1('$password')"; nie możesz wywolac funkcji wewnątrz cudzysłowów, bo wewnątrz cudzysłowów mozesz używać tylko zmiennych. A druga sprawa, że brakuje apostrofów wokol funkcji sha1. Efekt twojego zapytania jest taki, ze zmienna $zapytanie wygląda tak: Kod "select * from member where username='jan' and password=sha1('mojehaslo')"; Widzisz w zapytaniu masz SHA1(...) - a tu powinno być chyba coś innego czyli to co ta funkcja zwraca: Kod select * from member where username='jan' and password='506da6907f960f50cad09ca45512519f91515237' Czemu nie otrzymujesz błędów na ekranie? Ano dlatego, ze takowych nie ma. Bo twoje zapytanie SQL jest poprawne, tyle, ze w bazie nie znajdujesz rekordów spełniających warunki tego zapytania. Powinno być tak: Kod $zapytanie = 'select * from member'
." where username='$username' " ." and password='".sha1('$password')."'"; Ten post edytował rodia 30.09.2008, 12:51:39 -------------------- Strony internetowe http://rodia.eu
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
najszybciej to
itp za warunkami itp wtedy pięknie widzisz przezco przechodzi skrypt ![]() -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
rodia zrobiłem tak jak pisałeś ale niestety ciągle taka sama reakcja. Może jeszcze jakaś propozycja?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 5 Dołączył: 29.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mowisz, ze jak sie logujesz to wyświetla i tak formularz logowania. No oczywiście przecież niezależnie od stanu zalogowania formularz jest zawsze wyświetlany w twoim kodzie, zobacz twoj kod:
Kod <?php if(isset($_SESSION['prawid_uzyt'])) { echo 'Użytkownik zalogowany jako: '.$_SESSION['prawid_uzyt']; } else { if(isset($username)) { echo 'Zalogowanie niemożliwe'; } else { echo 'Użytkownik niezalogowany'; } } // << TEN NAWIAS POWINIEN BYC DALEJ echo '<form method="post" action ="index.php">'; echo '<center><TABLE frame="vsides" width = 216>'; echo '<TR><TD><center>'; echo ' <IMG SRC="img/log.gif" WIDTH="199" HEIGHT="28" BORDER="0" ALT="LOGOWANIE"> '; echo '</center></TD>'; echo '<TABLE frame="vsides" width = 216>'; echo '<TR><TD><B><center>LOGIN:</center> </B></TD>'; echo '<TD><B><center><input type="text" name="username" size = 10></center> </B></TD></TR>'; echo '<TR><TD><B><center>HASŁO:</center> </B></TD>'; echo '<TD><center><INPUT TYPE="password" NAME="password" size = 10></center></TD></TR>'; echo '</center></TABLE></form>'; echo'<INPUT TYPE="submit" value="Loguj">'; // TUTAJ POWINIEN BYC TEN NAWIAS O KTORYM PISALEM WYZEJ ?> Zauważ, że cały fragment wyświetlający formularz nie znajduje sie w klamrach {} poprzedniego warunku IF ani ELSE. W tym kodzie zaznaczylem ktory nawias trzeba przenieść w inne miejsce, żęby było dobrze. Uruchomilem twoj kod u siebie i wprowadzilem tą zmianę o ktorej piszę wyżej i dziala tak, ze jak sie zaloguje to wyswietla sie komunikat "Użytkownik zalogowany jako:...." i formularz sie juz nie wyświetla. Rozumiem, że tak mialo byc Aha, i ponieważ nie chcialo mi sie bazy tworzyć to do testow z twojego kodu wykroilem polaczenie z bazą i zastapilem sobie sprawdzeniem w kodzie php hasla i uzytkownika - pisze o tym zeby bylo wiadomo ze nie badalem poprawnosci kodu odpowiedzialnego za polaczenie z bazą Ten post edytował rodia 30.09.2008, 21:06:03 -------------------- Strony internetowe http://rodia.eu
|
|
|
--einstein-- |
![]()
Post
#11
|
Goście ![]() |
rodia zmieniłem ta klamrę ale dalej to samo więc podejrzewam ze coś nie tak ma z baza danych skoro u Ciebie działa. Czy jest jakaś funkcja która sprawdza czy dane z bazy zostały odczytane?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 5 Dołączył: 29.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
U ciebie wynik zapytania jest w zmiennej $result.
Mozesz sprawdzić czy nie wystapil błąd funkcją is_resource($result) - zwraca true jeżeli w $result jest poprawny wynik i zwraca false jak w wystapil blad podczas pracy z baza. Jeśli chcesz mieć pewność, że cokolwiek z bazy zostanie na pewno odczytane (nieważne czy nazwa użytkownika i haslo sie zgadzają - to pominmy do testow) to zmień zapytanie : $zapytanie = 'select * from member' ." where username='$username' " ." and password=sha1('$password')"; na: $zapytanie = 'select * from member where 1"; Wtedy na 100% wczytają sie wszystkie rekordy a dalszy warunek na pewno zwróci prawdę "$result->num_rows > 0" jeżeli jednak to nie pomoże to znaczy, ze rzeczywiście połączenie z bazą szwankuje. -------------------- Strony internetowe http://rodia.eu
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko sprawdzilem i dalej nic. Gdy używam funkcji is_resource($result) nie otrzymuje zadnego wyniku.
Zmiana mojego zapytania na $zapytanie = 'select * from member where 1"; tez nic nie zmieniła. Wiec coś jest z baza danych. Teraz tylko co?:/ |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 5 Dołączył: 29.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Zamiast twojego kodu do łącznia z bazą wstaw ten:
Kod $db = mysql('localhost' , 'usa' , 'haslo'); if (!$db) die("nie połączono z bazą"); mysql_select_db('engtest', $db); $result = mysql_query($zapytanie, $db); if (!$result) die ("Błędny rezultat zapytania"); if (mysql_num_rows($result)>0) ..........................................i dalej tak jak u ciebie Jak uruchomisz ten kod to w razie niepowodzenia wyświetli ci sie czy problem jest w połączeniu z bazą czy w wyniku zapytania. -------------------- Strony internetowe http://rodia.eu
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
to tak zastąpiłem kod twoim kodem i nie wyświetla mi żadnych błędów. Czyli połączenie z baza jest.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 5 Dołączył: 29.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
podaj mi adres serwera mySql to sprawdze co jest nie teges. chodzi o nazwę ktorą wpisuej się tam gdzie w funkcji mysql_connect jest wpisane "localhost", podaj na gg: 8903696
-------------------- Strony internetowe http://rodia.eu
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Już wszystko działa. Dzięki użytkownikowi rodia który znalazł błędy i je poprawił. Wielkie dzięki i pozdrawiam.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 4.07.2025 - 16:43 |