Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cumparare AC Gree [Buget maxim 30...

Ce e aratarea asta ?

Probleme timonerie schimbator sau...

Numar strada gresit in contractul...
 Centrala Ariston Cares Premium 24...

La multi ani @Klasse!

La multi ani @shmecherul!

pareri ipad 6-2018- flip
 Cum au aparut supermarketurile in...

Campanii mincinoase Carrefour

Tv toshiba defect

touchscreen navigatie stricat
 bonsai - de unde?

Resetare Bonus Malus

Unitatea optica DVD-rw absenta pe...

Problema configurare Wireguard
 

eror log in

- - - - -
  • Please log in to reply
15 replies to this topic

#1
mitza2

mitza2

    Junior Member

  • Grup: Members
  • Posts: 29
  • Înscris: 10.10.2011
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.
CODE


#2
danutz0501

danutz0501

    Member

  • Grup: Members
  • Posts: 437
  • Înscris: 22.04.2008
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 Posted Image.
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postdanutz0501, 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" .
Greşit. Prin regulament, şi prin bunul simţ, sunt obligat (şi mă autooblig) să fiu înţelegător şi să vin în sprijinul membrilor noi ai forumului.

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
same75

same75

    Active Member

  • Grup: Members
  • Posts: 1,213
  • Înscris: 28.01.2007
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
danutz0501

danutz0501

    Member

  • Grup: Members
  • Posts: 437
  • Înscris: 22.04.2008
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
same75

same75

    Active Member

  • Grup: Members
  • Posts: 1,213
  • Înscris: 28.01.2007

View PostOriginalCopy, 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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postsame75, on 30 octombrie 2012 - 21:24, said:


Daca el a inceput cu mysql_*() am mers si noi pe aceeasi linie Posted Image

Pe logica asta, n-o să ieşim niciodată din rahat, şi cei care nu sunt la curent decid direcţia tuturor. Regândeşte-ţi strategia aşa încât să nu stea în calea progresului :)

#9
mitza2

mitza2

    Junior Member

  • Grup: Members
  • Posts: 29
  • Înscris: 10.10.2011

View Postdanutz0501, 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 Posted Image.
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" .
am incercat ceea ce ai zis tu dar uite eroarea dupa ce scriu datele de log in si dau intra
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 :D

View Postsame75, 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
mitza2

mitza2

    Junior Member

  • Grup: Members
  • Posts: 29
  • Înscris: 10.10.2011
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
danutz0501

danutz0501

    Member

  • Grup: Members
  • Posts: 437
  • Înscris: 22.04.2008
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 Posted Image
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
mitza2

mitza2

    Junior Member

  • Grup: Members
  • Posts: 29
  • Înscris: 10.10.2011
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 :((

View Postdanutz0501, 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 Posted Image
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
danutz0501

danutz0501

    Member

  • Grup: Members
  • Posts: 437
  • Înscris: 22.04.2008
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
mitza2

mitza2

    Junior Member

  • Grup: Members
  • Posts: 29
  • Înscris: 10.10.2011
normal ca am schimbat datele alea ca nus loca :))
dar degeaba nu merge :(

View Postdanutz0501, 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
mitza2

mitza2

    Junior Member

  • Grup: Members
  • Posts: 29
  • Înscris: 10.10.2011
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 perfectiePosted Image Posted Image Posted Image Posted Image Posted Image Posted Image Posted Image Posted Image Posted Image Posted Image

#16
redcobra

redcobra

    New Member

  • Grup: Members
  • Posts: 22
  • Înscris: 12.07.2008
am si eu aceeasi problema, daca te rog poate imi zici exact unde si ce modificari ai facut.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate