![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Na wstępie poinformuję, że jestem tutaj nowy i niestety nie jestem zaawansowanym w programowaniu php. Nie jestem natomiast też całkiem zielony ![]() Do rzeczy: Mam skrypt systemu rejestracji, w którym chciałbym aby zapisywane hasło w db(MySQL) było hash'owane przez md5 a później podczas logowania hash wpisanego hasła porównywany był z tym wcześniej zapisanym w db. - chyba wiadomo o co chodzi? Wygląda to tak: join.php - dopisujący do bazy użytkowników: Kod <?php error_reporting(E_ALL); include_once("func.php"); session_register("login"); session_register("password"); session_register("loggedIn"); $messages=array(); $dbhost="localhost"; $dbuser="xxx"; $dbpass="xxx"; $dbname="xxx"; connectToDB(); checkLoggedIn("no"); if(isset($_POST["submit"])){ field_validator("Login", $_POST["login"], "alphanumeric", 4, 15); field_validator("Hasło", $_POST["password"], "string", 4, 15); field_validator("Powtórzenie hasła", $_POST["password2"], "string", 4, 15); if(strcmp($_POST["password"], $_POST["password2"])) { $messages[]="Powtórzone hasła nie pasują"; } $query="SELECT login FROM users WHERE login='".$_POST["login"]."'"; $result=mysql_query($query, $link) or die("MySQL query $query failed. Error if any: ".mysql_error()); if( ($row=mysql_fetch_array($result)) ){ $messages[]="Login ID \"".$_POST["login"]."\" already exists. Try another."; } if(empty($messages)) { newUser($_POST["login"], $_POST["password"]); cleanMemberSession($_POST["login"], $_POST["password"]); header("Location: members.php?".session_name()."=".session_id()); } } ?> <html> <head> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2"> <META HTTP-EQUIV="Reply-to" CONTENT="t.rosciszewski@gmail.com"> <META HTTP-EQUIV="Content-Language" CONTENT="pl"> <META NAME="Author" CONTENT="Tomasz Rościszewski"> <style type="text/css"> body{font-family: Arial, Helvetica; font-size: 10pt} h1{font-size: 12pt} </style> </head> <body> <?php if(!empty($messages)){ displayErrors($messages); } ?> <form action="<?=$_SERVER["PHP_SELF"]?>" method="POST"> <TABLE BORDER="0"> <TR> <TD>Login: </td> <td> <input type="text" name="login" value="<?php print isset($_POST["login"]) ? $_POST["login"] : "";?>" maxlength="15"> </td> </tr> <tr> <td>Password: </td> <td> <input type="password" name="password" value="" maxlength="15"> </td> </tr> <tr> <td>Confirm password: </td> <td> <input type="password" name="password2" value="" maxlength="15"> </td> </tr> <tr> <td> </td> <td> <input name="submit" type="submit" value="Submit"> </td> </tr> </table> </form> </body> </html> login.php - logujący: Kod <?php error_reporting(E_ALL); include_once("func.php"); session_register("login"); session_register("password"); session_register("loggedIn"); $messages=array(); $dbhost="localhost"; $dbuser="xxx"; $dbpass="xxx"; $dbname="xxx"; connectToDB(); checkLoggedIn("no"); if(isset($_POST["submit"])) { field_validator("Login", $_POST["login"], "alphanumeric", 4, 15); field_validator("Hasło", $_POST["password"], "string", 4, 15); if($messages){ doIndex(); exit; } if( !($row = checkPass($_POST["login"], $_POST["password"])) ) { $messages[]="Incorrect login/password, try again"; } if($messages){ doIndex(); exit; } cleanMemberSession($row["login"], $row["password"]); header("Location: members.php?".session_name()."=".session_id()); } else { doIndex(); } function doIndex() { global $messages; global $title; ?> <html> <head> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2"> <META HTTP-EQUIV="Content-Language" CONTENT="pl"> <style type="text/css"> body{font-family: Arial, Helvetica; font-size: 10pt} h1{font-size: 12pt} </style> </head> <body> <h1><?=$title?></h1> <?php if($messages) { displayErrors($messages); } ?> <form action="<?=$_SERVER["PHP_SELF"]?>" method="POST"> <table> <tr> <td>Login:</td> <td><input type="text" name="login" value="<?php print isset($_POST["login"]) ? $_POST["login"] : "";?>" maxlength="15"></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="password" value="" maxlength="15"></td> </tr> <tr> <td> </td> <td><input name="submit" type="submit" value="Submit"></td> </tr> </table> </form> </body> </html> <?php } ?> oraz func.php includowany w poprzednich: Kod <?php function connectToDB() { global $link, $dbhost, $dbuser, $dbpass, $dbname; ($link = mysql_pconnect("$dbhost", "$dbuser", "$dbpass")) || die("Couldn't connect to MySQL"); mysql_select_db("$dbname", $link) || die("Nie mogę otworzyć bazy danych. Błędy: ".mysql_error() ); } function newUser($login, $password) { global $link; $query="INSERT INTO users (login, password) VALUES('$login', '$password')"; $result=mysql_query($query, $link) or die("Błędy podczas zapisywania danych w bazie: ".mysql_error()); return true; } function displayErrors($messages) { print("<b><font color=orange>Wystąpiły następujące problemy:</FONT></b>\n<ul>\n"); foreach($messages as $msg){ print("<li><font color=orange>$msg</Font></li>\n"); } print("</ul>\n"); } function checkLoggedIn($status){ switch($status){ case "yes": if(!isset($_SESSION["loggedIn"])){ header("Location: login.php"); exit; } break; case "no": if(isset($_SESSION["loggedIn"]) && $_SESSION["loggedIn"] === true ){ header("Location: members.php?".session_name()."=".session_id()); } break; } return true; } function checkPass($login, $password) { global $link; $query="SELECT login, password FROM users WHERE login='$login' and password='$password'"; $result=mysql_query($query, $link) or die("checkPass fatal error: ".mysql_error()); if(mysql_num_rows($result)==1) { $row=mysql_fetch_array($result); return $row; } return false; } function cleanMemberSession($login, $password) { $_SESSION["login"]=$login; $_SESSION["password"]=$password; $_SESSION["loggedIn"]=true; } function flushMemberSession() { unset($_SESSION["login"]); unset($_SESSION["password"]); unset($_SESSION["loggedIn"]); session_destroy(); return true; } function field_validator($field_descr, $field_data, $field_type, $min_length="", $max_length="", $field_required=1) { global $messages; if(!$field_data && !$field_required){ return; } $field_ok=false; $email_regexp="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|"; $email_regexp.="(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; $data_types=array( "email"=>$email_regexp, "digit"=>"^[0-9]$", "number"=>"^[0-9]+$", "alpha"=>"^[a-zA-Z]+$", "alpha_space"=>"^[a-zA-Z ]+$", "alphanumeric"=>"^[a-zA-Z0-9]+$", "alphanumeric_space"=>"^[a-zA-Z0-9 ]+$", "string"=>"" ); if ($field_required && empty($field_data)) { $messages[] = "$field_descr jest polem wymaganym."; return; } if ($field_type == "string") { $field_ok = true; } else { $field_ok = ereg($data_types[$field_type], $field_data); } if (!$field_ok) { $messages[] = "Wpisz poprawnie pole $field_descr."; return; } if ($field_ok && ($min_length > 0)) { if (strlen($field_data) < $min_length) { $messages[] = "$field_descr jest nieprawidłowe, musi posiadać minimum $min_length litery."; return; } } if ($field_ok && ($max_length > 0)) { if (strlen($field_data) > $max_length) { $messages[] = "$field_descr jest nieprawidłowe, musi posiadać nie więcej niż $max_length liter."; return; } } } ?> Ma ktoś pomysł? Ten post edytował Tomaszu 22.02.2009, 21:03:10 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
W pliku func.php zamien na to
oraz
Ten post edytował kefirek 22.02.2009, 21:05:41 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 286 Pomógł: 34 Dołączył: 4.09.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
A na przyszłość nie zapomni o poprawnym BBCode ;D
-------------------- Serwer : Acer Aspire 5050 : AMD Turion X2 2x1.9 MHz : 2x2 GB Dual : 250GB + 500 GB USB Warsztat : Apache v2.2 : PHP v5.2 : MySQL v5.0 : phpMyAdmin v3.4 : phpDesigner v7 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
A na przyszłość nie zapomni o poprawnym BBCode ;D będę się starał. ![]() dodałem to co polecilił kefirek i : - zapisuje w bazie danych hasło przez md5 - przy logowaniu nie porównuje prawidłowo hasła. Nie da się zalogować. :/ Ten post edytował Tomaszu 22.02.2009, 21:41:18 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 31 Dołączył: 26.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
niestety nie pomogło...
Ten post edytował Tomaszu 22.02.2009, 21:40:07 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat przy logowaniu nie porównuje prawidłowo hasła. Nie da się zalogować. Spróbuj sam zidentyfikować błąd. Sprawdź których ifów warunki powinny być spełnione, na przykład ten:
Nie powinien być a prawdopodobnie jest. Jeżeli tak to sprawdź dlaczego funkcja checkPass nie zwraca rekordu. Czy jest błąd w zapytaniu SQL, sprawdź surowe dane w bazie - czy są takie jak oczekujesz. A może nie chodzi o to miejsce, zidentyfikuj je. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie powinien być a prawdopodobnie jest. Jeżeli tak to sprawdź dlaczego funkcja checkPass nie zwraca rekordu. Czy jest błąd w zapytaniu SQL, sprawdź surowe dane w bazie - czy są takie jak oczekujesz. A może nie chodzi o to miejsce, zidentyfikuj je. no nie mam pomysłu ale wydaje mi się że szwankuje sama funkcja checkPass...
Ten post edytował Tomaszu 22.02.2009, 22:19:43 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ok. Więc postaw echo przed $query, obejrzyj jaką formę ostatecznie przyjmuje zapytanie.
Czy zwraca w ogóle jakieś rekordy, czy występuje jakiś błąd składni sql. Czy w bazie jest rekord, który powinien zostać zwrócony. Wklej do phpmyadmina zapytanie i sprawdź czy w ten sposób otrzymujesz jakieś wyniki z bazy. Diagnozuj, diagnozuj ![]() |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Posiedziałem nad tym troszkę i powód nie działanie się odnalazł...
Porównałem md5 u mnie i w zewnętrznym generatorze. Sprawa była prosta:
![]() Ucinało mi md5 po 15tym znaku. Tak utworzyłem tabelę i zapomniałem o tym. Za moje utrudnianie przepraszam i dziękuję Panowie. Acha, i dla tych którzy chcieliby tego użyć: Nie potrzebne też jest w pliku login.php:
natomiast samo:
password jest hashowane już w samej funkcji checkPass. Ten post edytował Tomaszu 5.03.2009, 19:27:59 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 04:06 |