Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]błąd w logowaniu
Forum PHP.pl > Forum > Przedszkole
Silny
Mam taki kodzik
  1. <?
  2.  
  3. // Sekcja logowania
  4. $login=$_POST[&#8216;login’];
  5. if($login) {
  6. $login=$_POST[&#8216;login’];
  7. $md5_haslo=md5($_POST[&#8216;haslo’]);
  8.  
  9. $database = 'xxx';
  10. include("db.php");
  11. mysql_select_db($database);
  12. $rezultat=mysql_query("select * FROM uzytkownicy WHERE login=’$login’ AND haslo=’$md5_haslo’");
  13. if(@mysql_num_rows($rezultat)){
  14. header("location:main.php");
  15. }else {
  16. $message="Nieprawidłowa nazwa użytkownika lub hasło";
  17. }
  18. }
  19. ?>


i taki formularz

  1.  
  2. <title>Dokument</title>
  3. </head>
  4. <body>
  5. <? echo $message; ?>
  6. <form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
  7. <tr>
  8. <td>Użytkownik: </td>
  9. <td><input name="login" type="text" id="login" /></td>
  10. </tr>
  11. <tr>
  12. <td>Hasło: </td>
  13. <td><input name="haslo" type="password" id="haslo" /></td>
  14. </tr>
  15. </table>
  16. <input name="login" type="submit" id="login" value="login" />
  17. </form>
  18. </body>
  19. </html>


Ale zamiast logować, to odświeża mi stronę... co może być nie tak questionmark.gif
tomekpl
No a co ma robić?
jak masz:
header("location:main.php");

i pewnie logujesz się na pliku main,php

Zrób sobie funkcje czy_zalogowany i jej użyj


ps:

  1.  
  2.  
  3. // Sekcja logowania
  4.  
  5. if(isset($_POST['login?])) {
  6.  
  7.  


dodaj isset($_POST['login?]) zamiast tego $login
Silny
Zrobiłem tak, i teraz cały czas mam, że nieprawidłowa nazwa uzytkownika -.-

  1. <?
  2.  
  3. // Sekcja logowania
  4. if(isset($_POST['login'])) {
  5. $login=$_POST[&#8216;login’];
  6. $md5_haslo=md5($_POST[&#8216;haslo’]);
  7. // Koduje hasło funkcją md5().
  8.  
  9. $database = 'xxxx';
  10. include("db.php");
  11. mysql_select_db($database);
  12. $rezultat=mysql_query("select * FROM uzytkownicy WHERE login=’$login’ AND haslo=’$md5_haslo’");
  13. if(@mysql_num_rows($rezultat)){
  14. session_register("login");
  15. }else {
  16. $message="Nieprawidłowa nazwa użytkownika lub hasło";
  17. }
  18. }
  19. ?>
blahy
witam. na wstepie chcialem zaznaczyc ze dopiero co zarejestrowalem sie na forum i nie jestem super wymiataczem winksmiley.jpg

co do Twojego skryptu. Po takim wycinku ciezko powiedzic co dokladnie ma robic ale poprawilem to co wyslales.

ponizej poprawiony kod (komentarze angielskie z tym co poprawilem), dodatkowo pod kodem wyjasnienia

po pierwsze zalozylem ze formularz i kod sa w tym samym pliku (akcja php_self)
  1. <?php
  2.  
  3. // Sekcja logowania
  4. if(isset($_POST['login'])) { //first check if(isset($_POST['submit']))
  5. $login=$_POST['login']; //different quotes signs
  6. $md5_haslo=$_POST['haslo'];
  7. // Koduje hasło funkcją md5().
  8.  
  9. include("mysql_connect.php");
  10.  
  11. $rezultat=mysql_query("select * FROM uzytkownicy WHERE login='$login' AND haslo='$md5_haslo'"); //wrong quotes resulting in wrong sql syntax
  12.  
  13. if(mysql_num_rows($rezultat)){ //why mute errors when you want to debug?
  14. $_SESSION["login"] = $login; //use this instead of session_register
  15. $message="zalogowany jako $login";
  16. } else {
  17. $message="Nieprawidłowa nazwa użytkownika lub hasło";
  18. }
  19. }
  20. ?>
  21.  
  22. <html> <!--html begin tag -->
  23. <head>
  24. <title>Dokument</title>
  25. </head>
  26. <body>
  27. <?php echo $message; ?>
  28. <form id="form1" name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <!--php opening tag & $_SERVER['PHP_SELF']-->
  29. <table>
  30. <tr>
  31. <td>Użytkownik: </td>
  32. <td><input name="login" type="text" id="login" /></td>
  33. </tr>
  34. <tr>
  35. <td>Hasło: </td>
  36. <td><input name="haslo" type="password" id="haslo" /></td>
  37. </tr>
  38. </table>
  39. <input name="submit" type="submit" id="submit" value="log in" /> <!-- submit and input for login have the same name: login. in result $_POST['login'] => 'login' -->
  40. </form>
  41. </body>
  42. </html>


polaczenie z baza zeby byl komplet do testowania:
  1. <?php
  2. $dbUser='xxx';
  3. $dbPassword='xxx';
  4. $dbHost='localhost';
  5. $dbName='silny';
  6.  
  7. $dbc=mysql_connect($dbHost,$dbUser,$dbPassword) or die('unable to connect: '.mysql_error());
  8.  
  9. mysql_select_db($dbName) or die('unable to select database: '.mysql_error());
  10. ?>


a teraz komentarze co do skryptu:
1. warto zawsze przed analiza pol sprawdzic czy wogole zostal przeslany formularz za pomoca if(isset($_POST['submit']))
2. w pewnym momencie zaczales uzywac ’ zamiast ' - uzywasz jakiegos edytora? w nim od razu mozna wylapac takie bledy
3. otwierajacy tag php powinien wygladac tak <?php. <? moze dzialac, ale nie wszedzie
4. md5 wywalilem zeby sobie ulatwic sprawe
6. cale laczenie z baza i wybor lepiej wrzucic osobno - chyba ze zalezalo Ci na tym zeby bylo tak jak miales
7. jak nie wiesz co jest nie tak w skrypcie, debugujesz go to nie tlum bledow za pomoca @, szczegolnie jesli nie oblugujesz ich w bardziej wyrafinowany sposob
8. olales otwierajacy znacznik html
9. nie trzymasz sie jednego formatowania kodu - ciezej znalezc bledy
10. $_SERVER['PHP_SELF'] zamiast $PHP_SELF
11. tu byl prawdziwy blad: te same nazwy dla pola login i dla przycisku wyslij - login. przez to zmienna $login miala wartosc 'login'. nic dziwngo ze nie znalazl takiego uzytkownika
12. blad w zapytaniu do bazy danych. zawsze warto w myadminie wkleic, zastapic zmienne poprawnymi danymi i sprawdzic czy zapytanie jest poprawne
13. za pomoca print_r($_SESSION), print_r($_POST), echo $login mozna bardzo latwo wylapac takie bledy

to co uwazasz za wazne wez pod uwage, reszte olej. pozdrawiam smile.gif
Silny
dobra dymać ten kod winksmiley.jpg
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.