Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Logowanie
jinchuriki
post 25.04.2009, 14:02:20
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


Zrobiłem sobie prosty skrypt logowania:
Kod
<?php
session_start();
if(isSet($_POST['zalogowany'])){
header("Location: jakiś tam link");
exit();
}

else if(isSet($_POST['nazwa']) && isSet($_POST['haslo'])){
if($_POST['nazwa'] == 'user1' && $_POST['haslo'] == 'pass1'){
$_SESSION['zalogowany'] = 'user1';
header("Location: jakiś tam link");
exit();
}
}
?>
<form method="POST" action="loguj.php">
Podaj nazwę i hasło<br />
Użytkownik:
<input type="text" name="nazwa"><br />
Hasło:
<input type="password" name="haslo"><br />
<input type="submit" value="Wejdź">
</form>


I teraz chcę to połączyć z JS, po wpisaniu poprawnego hasła i loginu, powinna rozsunąć się treść prawidłowa. JS nie znam, kod na rozwijanie znalazłem u was:
Kod
<script type="text/javascript">
function showHidden(obj){
obj = document.getElementById(obj);
obj.style.display == 'none' ? obj.style.display = '' : obj.style.display = 'none';
}
</script>

Kod
<table border="0">
<tr><td><a onclick="showHidden('hidden2');" href="javascript:void(0);">Click me!</a></td></tr>
<tr id="hidden2" style="display:none;"><td>treść</td></tr>
</table>


A teraz jak zrobić, żeby po wpisaniu danych rozwinęła się treść? smile.gif

I teraz druga sprawa: mianowicie dlaczego pola input od razu pokazują to co trzeba wpisać? blink.gif


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 14:20:02
Post #2





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


Jezeli chcesz zabezpieczyc pewne dane przed widokiem to nie jest to wg mnie najlepszy sposob, ja proponowałbym uzycie ajaxa. W twoim przypadku mozna podejzec "ukryta tresc" wchodzac w zrodlo.

Co do zapamietywania hasel to prawdopodobnie przegladarka zapamietuje dane.


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 14:27:04
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


Hmm, tylko że ja danych nie wpisywałem nawet.... Od razu wczytuje się tak jak ma być. A jak można inaczej niż Ajaxem to zrobić, bo ja w tym temacie ni hu hu...


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 14:38:09
Post #4





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


Jezeli to ma byc po wpisaniu tak jak napisales, a nie po wcisnieciu submita to musisz monitorowac caly czas dane ktore wchodza w inputy (event onChange). Sposob fajny jesli masz 1 konto do logowania. W tym momencie wklepujesz sobie gdzies zapisane loginy i hasla (oczywiscie w md5) i w JS porównujesz czy pasuje z tym co masz.
Mozna jeszcze wysylac ajaxem zapytanie do bazy co kazda zmiane ale to jest nawal informacji i mozna przeciazyc serwer.

Proponuje ci zrobic to po nacisnieciu submita, ajaxem wyslac wtedy zapytanie do bazy i sciagnac tresc jesli jest taki user z takim loginem.
Pozniej innerHTML i wsadzasz sciagnieta tresc do diva/td.

Mialem podobny problem u siebie na localu - przegladarka zapamietala mi dla jednej strony login i haslo a na innej stronie je wklepywala. Pomogla mi zmiana nazw inputow w formie.


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 14:41:28
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


Heh, to ma być tylko jedna nazwa usera i hasło tak jak podałem to wyżej, bo będzie do tego miała dostęp tylko osoba powołana. winksmiley.jpg


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 14:54:15
Post #6





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


Na poczatku funkcja(e) w JS:
  1. function getById(item) return document.getElementById(item);
  2. function checkLogin(obj){
  3. if(md5(getById('name').value) == getById('hName').value && md5(getById('pass').value) == getById('hPass').value){
  4. getById(obj).style.display = '';
  5. } else getById(obj).style.display = 'none';
  6. }


Pozniej deczko przerobiony formularz:
  1. <form method="POST" action="loguj.php">
  2. Podaj nazwę i hasło<br />
  3. Użytkownik:
  4. <input type="text" name="nazwa" id="name" onChange="checkLogin('hidden2')"><input type="hidden" id="hName" value="%nazwa usera w md5%"><br />
  5. Hasło:
  6. <input type="password" name="haslo" id="pass" onChange="checkLogin('hidden2')"><input type="hidden" id="hPass" value="%haslo usera w md5%"><br />
  7. <input type="submit" value="Wejdź">
  8. </form>


Mam nadzieje ze sie nie walnalem bo pisalem na zywca. %nazwa usera w md5% i %haslo usera w md5% wklep sobie w php uzywajac md5()

Ten post edytował v1t4n 25.04.2009, 14:57:50


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 15:06:34
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


Możesz objaśnić jak to ma działać, bo nie wiem jaki ma być efekt...


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 15:21:53
Post #8





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


1. Wstawiasz sobie tresc w tej tabeli ktora podales w pierwszym poscie.
2. W php wypluwasz haslo i nazwe usera zakodowane w md5 i zapisujesz w polach ukrytych hName i hPass.
3. Na pola ktore utworzyles nalozylem event onChange ktory odwoluje sie do funkcji checkLogin()
4. Funkcja checkLogin sprawdza czy md5 wpisanych hasel jest taki sam jak hasla ktore wyciagnales w pkt 2 - jesli tak to zmienia ustawia tr hidden2 na widoczny

Cala babranina w md5 jest potrzebna zeby uniknac kradzieży hasla. Powinien tez byc jakis interval zeby zblokowac boty.


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 15:33:30
Post #9





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


No to powiem, żen ie działa. sad.gif


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 16:26:51
Post #10





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


Przepraszam, zapomnialem ze md5 nie ma standardowo w JS. Mozesz go sciagnac tutaj: http://pajhome.org.uk/crypt/md5/2.2/md5.js
Przy okazji zmienilem troszke tamten uklad (sprawdza co 50ms bo onChange sie dziwnie zachowuje). Musisz dodac onLoad="checkLogin()" do body.

JS:
  1. function getById(item){ return document.getElementById(item) };
  2. function checkLogin(){
  3. if(hex_md5(getById('name').value) == getById('hName').value && hex_md5(getById('pass').value) == getById('hPass').value){
  4. getById('hidden2').style.display = '';
  5. } else {
  6. getById('hidden2').style.display = 'none';
  7. setTimeout("checkLogin();", 50);
  8. }
  9. }


HTML:
  1. <form method="POST" action="loguj.php">
  2. Podaj nazwę i hasło<br />
  3. Użytkownik:
  4. <input type="text" name="nazwa" id="name">
  5. <input type="hidden" id="hName" value="%nazwa usera w md5%"><br />
  6. Hasło:
  7. <input type="password" name="haslo" id="pass">
  8. <input type="hidden" id="hPass" value="%haslo usera w md5%"><br />
  9. <input type="submit" value="Wejdź">
  10. </form>
  11. <div id="hidden2" style="display:none;">Lorem Ipsum</div>
  12. </body>
  13. </html>


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 16:46:45
Post #11





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


Na samym początku wyskakuje taki błąd, ale da się logować:
  1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\edytuj.php:133) in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\edytuj.php on line 395


Gdy się zaloguję wyskakuje następny błąd:
  1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\edytuj.php:133) in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\edytuj.php on line 395


Wiem, że to przez limiter, ale co teraz zrobić.


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 16:48:58
Post #12





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


Prozaiczny blad: printujesz jakies dane przed wysłaniem sesji - session_start() musi znajdowac sie na poczatku, najlepiej w pierwszej linii smile.gif


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 17:04:41
Post #13





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


print używam dwa razy w treści, która ma się rozwinąć. Wcześniej nie...

Tutaj musi być gdzieś błąd:
  1. <?php session_start();
  2. if(isSet($_POST['zalogowany'])){
  3. header("Location: edytuj.php");
  4. exit();
  5. }
  6.  
  7. else if(isSet($_POST['nazwa']) && isSet($_POST['haslo'])){
  8. if($_POST['nazwa'] == 'user1' && $_POST['haslo'] == 'pass1'){
  9. $_SESSION['zalogowany'] = 'user1';
  10. header("Location: edytuj.php");
  11. exit();
  12. }
  13. }
  14. ?>



Pisze, że pierwszy błąd pojawia się w linijce, w której jest: session_start();, a drugi w linijce w której jest: exit();, może ktoś zna problem?

Ten post edytował jinchuriki 25.04.2009, 17:02:05


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 17:06:17
Post #14





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


Masz jakies tagi html przed "<?php ... ?>"?


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 17:09:44
Post #15





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


Dzięki, były tagi html. Teraz nie pokazują się błędy, teraz po wpisaniu poprawnego loginu i hasła strona się restartuje i nic więcej. ;/


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 17:11:25
Post #16





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


Daj caly kod, konkretnie i szczegółowo opisz problem. Teraz to ja sie mogę tylko domyślać.


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 17:15:28
Post #17





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


  1. <?php session_start();
  2. if(isSet($_POST['zalogowany'])){
  3. header("Location: edytuj.php");
  4. exit();
  5. }
  6.  
  7. else if(isSet($_POST['nazwa']) && isSet($_POST['haslo'])){
  8. if($_POST['nazwa'] == 'user' && $_POST['haslo'] == 'pass'){
  9. $_SESSION['zalogowany'] = 'user';
  10. header("Location: edytuj.php");
  11. exit();
  12. }
  13. }
  14. ?>
  15.  
  16.  
  17. </head>
  18. <script src="code.js" type="text/javascript"></script>
  19.  
  20. <body onLoad="checkLogin()">
  21.  
  22.  
  23.  
  24. <script type="text/javascript">
  25. function showHidden(obj){
  26. obj = document.getElementById(obj);
  27. obj.style.display == 'none' ? obj.style.display = '' : obj.style.display = 'none';
  28. }
  29.  
  30. <script type="text/javascript">
  31. function getById(item){ return document.getElementById(item) };
  32. function checkLogin(){
  33. if(hex_md5(getById('name').value) == getById('hName').value && hex_md5(getById('pass').value) == getById('hPass').value){
  34. getById('hidden2').style.display = '';
  35. } else {
  36. getById('hidden2').style.display = 'none';
  37. setTimeout("checkLogin();", 50);
  38. }
  39. }
  40. <form method="POST" action="edytuj.php">
  41. Podaj nazwę i hasło<br />
  42. Użytkownik:
  43. <input type="text" name="nazwa" id="name">
  44. <input type="hidden" id="hName" value="%nazwa usera w md5%"><br />
  45. Hasło:
  46. <input type="password" name="haslo" id="pass">
  47. <input type="hidden" id="hPass" value="%haslo usera w md5%"><br />
  48. <input type="submit" value="Wejdź">
  49. </form>
  50. <div id="hidden2" style="display:none;"><center>
  51. skrypt w php
  52. </center></div>
  53. </body>
  54. </html>


Ten post edytował jinchuriki 25.04.2009, 17:16:45


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 17:29:44
Post #18





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


A czy ten plik to edytuj.php?
Gdzie masz pole w formularzu o nazwie zalogowany? To chyba powinno byc $_SESSION ktore deklarujesz 7 linijek niżej.


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
jinchuriki
post 25.04.2009, 17:47:27
Post #19





Grupa: Zarejestrowani
Postów: 87
Pomógł: 6
Dołączył: 30.11.2008

Ostrzeżenie: (0%)
-----


To pole nie ma być w formularzu, to sprawdza czy user już wcześniej się zalogował. smile.gif
Tak, to jest plik edytuj.php.


--------------------
zmoderowano
Go to the top of the page
+Quote Post
v1t4n
post 25.04.2009, 18:16:00
Post #20





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

Ostrzeżenie: (0%)
-----


Nie rozumiem tutaj twojej logiki. Po co headerem wywoływać plik w którym już jesteś? Daje ci to tylko taki efekt, że tracisz wszystkie $_POST'y ktore przyszły z formularza. Jesli nawet ktos zalogowany przyjdzie (chociaz bede sie upieral ze tam powinno być $_SESSION zamiast $_POST w 2 linii) to i tak jak wejdzie na tą strone to trafi w martwą pętlę. Jeśli nie jest jeszcze zalogowany sprawdzi mu login i haslo, nada sesyjnej zalogowany jego login i znowu przeladuje nie dostajac zadnych $_POST'ów. Jedyne co teraz możesz zrobić to wsadzić tam niżej kod w php wykonujący się po ifie na $_SESSION['zalogowany'].

Opisz konkretniej co chcesz osiągnąc, bo wydaje mi sie, że idziesz całkiem w złą stronę.


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:37