eror log in
#1
Posted 30 October 2012 - 17:11
Am creat si eu acest cod si bun ok , introduc datele si dau log in si zice date invalide, desi in baza de date exista acel utilizator si parola / Am sters server, pass si databse, username. ..
asta e codu, unde am gresit, ce nu e in regula ? <?php $server=""; $database=""; $username=""; $pass="";; // conectarea la serverul MySQL $connect = mysql_connect($server,$username,$pass) or die( mysql_error() ); // selecteaza baza de date test $db = mysql_select_db($database,$connect) or die( mysql_error() ); // verifica daca exista date transmise if (isset($_POST['nume']) && isset($_POST['parola'])) { // preia datele din formular $nume = $_POST['nume']; $parola = md5($_POST['parola']); // formeaza si executa query-ul de select din baza de date $query = "SELECT * FROM `membri` WHERE `nume` = '".$nume."' AND `parola` = '".$parola."'"; $result = mysql_query($query) or die ( "Error : ". mysql_error() ); // verifica daca interogarea MySQL a gasit date valide if ($result || mysql_num_rows($result) < 1) { // daca nu, afiseaza un mesaj de eroare echo "Datele introduse sunt incorecte<br> Incearca din nou"; } else { // salveaza username-ul si parola in sesiune $_SESSION['nume'] = $nume; $_SESSION['parola'] = $parola; // afiseaza un mesaj de succes echo "Autentificarea a fost efectuata cu succes."; } } ?> <form action="" method="post" enctype="multipart/form-data"> Utilizator: <br> <input type="text" name="nume" id="nume" /> <br> Parola: <br> <input type="password" name="parola" id="parola" /> <br><input type="submit" name="logare_btn" value="Intra" /></form>
Edited by OriginalCopy, 30 October 2012 - 18:06.
|
#2
Posted 30 October 2012 - 17:42
Primul lucru
if ($result || mysql_num_rows($result) < 1) {Linia asta verifica 2 lucruri. Daca query a rulat cu succes sau daca numaru total de rezultate intors din query e mai mic decat 1. Tu pe scurt zici daca query e fals sau adevarat, adica daca gasesti rezultat sau nu, afisezi daca incorecte. Ar trebuii sa arate cam asa if($rezult){ if(mysql_num_rows($rezult) > 0){ echo 'corect'; $_SESSION['nume'] = $nume; $_SESSION['parola'] = $parola; }else{ echo'incorect'; } }Bine nu e exclus sa am vreo mica eroare prin ce am scris. N-am mai folosit functiile mysql din php cam de multa vreme . PS:la query nu ar strica si un LIMIT 1, ca sa nu stresezi aiurea mysql-ul. PPS: pune codul intre code tag (bbcode) si aria incepatori. Sigur o sa apara un moderator "sa te ia la rost" . Edited by danutz0501, 30 October 2012 - 17:51. |
#3
Posted 30 October 2012 - 18:03
danutz0501, on 30 octombrie 2012 - 17:42, said:
PPS: pune codul intre code tag (bbcode) si aria incepatori. Sigur o sa apara un moderator "sa te ia la rost" . Nu arăt aceeaşi înţelegere faţă de ăştia care fac varză peste tot pe unde merg, deşi cunosc organigrama forumului. Nu suntem în junglă. Fac diferenţă între bătaia de joc a acestora la adresa forumului, şi necunoaşterea membrilor cu sub 10-20-30 postări care doresc totuşi să contribuie la bunăstarea forumului. @OP: postează întrebările de nivel începător pe subaria începătorilor. Detalii în regulamentul ariei şi în căsuţa "Atenţie" din capul ariei. Şi foloseşte bbcode-ul CODE când postezi cod, îţi cresc şansele de a primi ajutor (oamenii în general nu sunt dispuşi să citească cod greu de citit, deci e în interesul tău să-l faci uşor de citit). Ţi-am mutat topicul, să nu se mai repete. Edited by OriginalCopy, 30 October 2012 - 18:05. |
#4
Posted 30 October 2012 - 18:32
Implementarea aleasa de tine e destul de aiurea, complicata si ineficienta. Eu mai curand as folosi functia COUNT():
$nume = mysql_real_escape_string($_POST['nume']); $parola = md5($_POST['parola']); $sql = "SELECT COUNT(*) FROM membri WHERE nume='$nume' AND parola='$parola'"; $result = mysql_query($sql) or die("SQL error"); list($ok) = mysql_fetch_array($result); if($ok) { // salveaza username-ul si parola in sesiune $_SESSION['nume'] = $nume; $_SESSION['parola'] = $parola; // afiseaza un mesaj de succes echo "Autentificarea a fost efectuata cu succes."; } else { echo "Datele introduse sunt incorecte<br>Incearca din nou"; } Doua remarci legate de securitate: 1) NICIODATA nu se folosesc in secvente SQL valori ne-escapate! Intotdeauna se foloseste mysql_real_escape_string(). Citeste mai multe despre SQL injection. 2) Nu este o practica foarte buna sa-i afisezi utilizatorului erori SQL, pentru ca informatiile acelea pot fi folosite ca sa-ti "sparga" site-ul. Erorile SQL le poti trimite in log cu functia error_log(). Edited by same75, 30 October 2012 - 18:36. |
#5
Posted 30 October 2012 - 18:45
Funcţiile mysql_*() sunt expirate de cel puţin un an, extensia mysqli există din 2004, de la PHP 5.0.0. Adică de 8 ani.
La ce naiba recomandaţi funcţiile mysql_*() nu ştiu. Funcţiile mysql_*() vor începe să fie deprecated, şi într-un final vor fi eliminate complet. PDO sau MySQLi. Nu mai recomandaţi bălării. |
#6
Posted 30 October 2012 - 18:50
Ca o mica completare, daca tot ai dati detalii extra. Totdeauna cand lucrezi cu inregistrare useri, autentificare etc, sa folosesti functia trim(), asupra parametrilor primiti, o sa te scape de unele probleme cu spatiul alb si de o durere de cap cu null byte atac.
|
#7
Posted 30 October 2012 - 21:24
OriginalCopy, on 30 octombrie 2012 - 18:45, said:
Funcţiile mysql_*() sunt expirate de cel puţin un an, extensia mysqli există din 2004, de la PHP 5.0.0. Adică de 8 ani. La ce naiba recomandaţi funcţiile mysql_*() nu ştiu. Funcţiile mysql_*() vor începe să fie deprecated, şi într-un final vor fi eliminate complet. PDO sau MySQLi. Nu mai recomandaţi bălării. Daca el a inceput cu mysql_*() am mers si noi pe aceeasi linie |
#8
Posted 30 October 2012 - 21:51
#9
Posted 31 October 2012 - 08:49
danutz0501, on 30 octombrie 2012 - 17:42, said:
Primul lucru if ($result || mysql_num_rows($result) < 1) {Linia asta verifica 2 lucruri. Daca query a rulat cu succes sau daca numaru total de rezultate intors din query e mai mic decat 1. Tu pe scurt zici daca query e fals sau adevarat, adica daca gasesti rezultat sau nu, afisezi daca incorecte. Ar trebuii sa arate cam asa if($rezult){ if(mysql_num_rows($rezult) > 0){ echo 'corect'; $_SESSION['nume'] = $nume; $_SESSION['parola'] = $parola; }else{ echo'incorect'; } }Bine nu e exclus sa am vreo mica eroare prin ce am scris. N-am mai folosit functiile mysql din php cam de multa vreme . PS:la query nu ar strica si un LIMIT 1, ca sa nu stresezi aiurea mysql-ul. PPS: pune codul intre code tag (bbcode) si aria incepatori. Sigur o sa apara un moderator "sa te ia la rost" . Notice: Undefined variable: rezult in /home/a5485229/public_html/logare.php on line 27 Daca aveti voi un alt cod de autentificare mai bun , mai recent sunt dispus sa il accept same75, on 30 octombrie 2012 - 18:32, said:
Implementarea aleasa de tine e destul de aiurea, complicata si ineficienta. Eu mai curand as folosi functia COUNT(): $nume = mysql_real_escape_string($_POST['nume']); $parola = md5($_POST['parola']); $sql = "SELECT COUNT(*) FROM membri WHERE nume='$nume' AND parola='$parola'"; $result = mysql_query($sql) or die("SQL error"); list($ok) = mysql_fetch_array($result); if($ok) { // salveaza username-ul si parola in sesiune $_SESSION['nume'] = $nume; $_SESSION['parola'] = $parola; // afiseaza un mesaj de succes echo "Autentificarea a fost efectuata cu succes."; } else { echo "Datele introduse sunt incorecte<br>Incearca din nou"; } Doua remarci legate de securitate: 1) NICIODATA nu se folosesc in secvente SQL valori ne-escapate! Intotdeauna se foloseste mysql_real_escape_string(). Citeste mai multe despre SQL injection. 2) Nu este o practica foarte buna sa-i afisezi utilizatorului erori SQL, pentru ca informatiile acelea pot fi folosite ca sa-ti "sparga" site-ul. Erorile SQL le poti trimite in log cu functia error_log(). Ceea ce miai dat tu nu functioneaza |
#10
Posted 31 October 2012 - 10:33
pana la urma cum fac ?
Am codu asta , dau log in nu da eroare nu nimic, dar nici nu ma logheaza $server = ""; $database = ""; $username = ""; $pass = ""; // conectarea la serverul MySQL $connect = mysql_connect($server,$username,$pass) or die( mysql_error() ); // selecteaza baza de date test $db = mysql_select_db($database,$connect) or die( mysql_error() ); // verifica daca exista date transmise if (isset($_POST['login_nume']) != "" && isset($_POST['login_parola']) != '') { // preia datele din formular $nume = $_POST['login_nume']; $parola = md5($_POST['login_parola']); // formeaza si executa query-ul de select din baza de date $query = "SELECT * FROM `membri` WHERE `nume` = '".$nume."' AND `Password` = '".$parola."'"; $result = mysql_query($query) or die ( "Error : ". mysql_error() ); // verifica daca interogarea MySQL a gasit date valide if($rezult){ if(mysql_num_rows($rezult) > 0){ echo 'corect'; $_SESSION['nume'] = $nume; $_SESSION['parola'] = $parola; }else{ echo'incorect'; } } } ?> Edited by mitza2, 31 October 2012 - 10:36. |
|
#11
Posted 31 October 2012 - 11:35
Ceva de genu ar trebuii sa arate un sistem de log in
<?php $host = 'localhost'; $user = 'root'; $pass = ''; $db = 'membri'; $dsn = 'mysql:host='.$host.';dbname='.$db.';charset=utf8'; $dbh = new PDO($dsn, $user, $pass); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $salt = '!kQm*fF3pXe1Kbm%9'; $nume = (!empty($_POST['nume'])) ? htmlentities(trim(strip_tags($_POST['nume'])),ENT_QUOTES,'utf-8') : null ; $parola = (!empty($_POST['parola'])) ? hash('sha256', $salt.$_POST['parola']) : null ; if(isset($_POST['submit'])){ if(empty($nume) || empty($parola)){ $errors[] = 'Toate campurile sant necesare'; } if(empty($errors)){ $prep = $dbh->prepare('SELECT * FROM membri WHERE nume = :nume AND parola = :parola LIMIT 1'); $prep->bindParam(':nume', $nume, PDO::PARAM_STR, 32); $prep->bindParam(':parola',$parola, PDO::PARAM_STR); if($prep->execute()){ if($prep->rowCount() > 0){ $_SESSION['nume'] = $nume; $_SESSION['parola'] = $parola; echo 'logat'; }else{ echo 'Combinatie nume/parola incorecta.'; } } }else{ foreach($errors as $error){ echo '<p>'.$error.'</p>'; } die(); } }else{ ?> <!doctype html> <html lang="ro"> <head> <meta charset="utf-8" /> </head> <body> <form action="logIn.php" method="post"> <p>Nume : <input type="text" name="nume"/></p> <p>Parola : <input type="password" name="parola" /></p> <input type="submit" name="submit" value="Trimite"/> </form> </body> </html> <?php } ?>100% sigur nu e, mari verificari de securitate nu are. Dar ca idee asa arata. E scris in graba asa ca nu urlati la mine pt eventuale greseli Ar fi ok, sa-ti faci un sistem de validari, lungime minima maxima, un cod capcha, hash integorari baza de date in functii separate etc Asta e doar un sistem de log in intr-o singura pagina. Se poate imbunatatii mult pana ajungi la un sistem minimalist pt log in. Asta e doar o idee. Edited by danutz0501, 31 October 2012 - 11:46. |
#12
Posted 31 October 2012 - 11:45
imi pare rau dar nu functioneaza ( dau sa trimita datele si nu da nici-o eroare, nu nimic, pur si simplu da refresh la pagina (
danutz0501, on 31 octombrie 2012 - 11:35, said:
Ceva de genu ar trebuii sa arate un sistem de log in <?php $host = 'localhost'; $user = 'root'; $pass = ''; $db = 'membri'; $dsn = 'mysql:host='.$host.';dbname='.$db.';charset=utf8'; $dbh = new PDO($dsn, $user, $pass); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $salt = '!kQm*fF3pXe1Kbm%9'; $nume = (!empty($_POST['nume'])) ? htmlentities(trim(strip_tags($_POST['nume'])),ENT_QUOTES,'utf-8') : null ; $parola = (!empty($_POST['parola'])) ? hash('sha256', $salt.$_POST['parola']) : null ; if(isset($_POST['submit'])){ if(empty($nume) || empty($parola)){ $errors[] = 'Toate campurile sant necesare'; } if(empty($errors)){ $prep = $dbh->prepare('SELECT * FROM membri WHERE nume = :nume AND parola = :parola LIMIT 1'); $prep->bindParam(':nume', $nume, PDO::PARAM_STR, 32); $prep->bindParam(':parola',$parola, PDO::PARAM_STR); if($prep->execute()){ if($prep->rowCount() > 0){ $_SESSION['nume'] = $nume; $_SESSION['parola'] = $parola; echo 'logat'; }else{ echo 'Combinatie nume/parola incorecta.'; } } }else{ foreach($errors as $error){ echo '<p>'.$error.'</p>'; echo $nume.$parola; } die(); } }else{ ?> <!doctype html> <html lang="ro"> <head> <meta charset="utf-8" /> </head> <body> <form action="logIn.php" method="post"> <p>Nume : <input type="text" name="nume"/></p> <p>Parola : <input type="password" name="parola" /></p> <input type="submit" name="submit" value="Trimite"/> </form> </body> </html> <?php } ?>100% sigur nu e, mari verificari de securitate nu are. Dar ca idee asa arata. E scris in graba asa ca nu urlati la mine pt eventuale greseli Ar fi ok, sa-ti faci un sistem de validari, lungime minima maxima, un cod capcha, hash integorari baza de date in functii separate etc Asta e doar un sistem de log in intr-o singura pagina. Se poate imbunatatii mult pana ajungi la un sistem minimalist pt log in. Asta e doar o idee. |
#13
Posted 31 October 2012 - 11:52
Sper ca ai salvat codul intr-un fisier php pe care l-ai numit logIn.php. Ai schimbat numele la host user parola si baza de date pt conexiunea cu serverul mysql?
Daca nu sti sa faci modificarile astea mici, cam te depaseste subiectul de log in. Si cred ca ar cam trebuii sa studiezi mai intens php. |
#14
Posted 31 October 2012 - 11:58
normal ca am schimbat datele alea ca nus loca )
dar degeaba nu merge danutz0501, on 31 octombrie 2012 - 11:52, said:
Sper ca ai salvat codul intr-un fisier php pe care l-ai numit logIn.php. Ai schimbat numele la host user parola si baza de date pt conexiunea cu serverul mysql? Daca nu sti sa faci modificarile astea mici, cam te depaseste subiectul de log in. Si cred ca ar cam trebuii sa studiezi mai intens php. |
#15
Posted 03 November 2012 - 20:04
Am rezolvat problema
erau doua probleme 1. din baza de date la campul parola 2. din cod. ma ajutat un prieten de pe un forum si acum merge la perfectie |
|
#16
Posted 09 November 2012 - 16:18
am si eu aceeasi problema, daca te rog poate imi zici exact unde si ce modificari ai facut.
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users