Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλημερα σε ολους,

 

εχω φτιαξει μια φορμα που ο χρηστης μπορει να κανει register με username και password.Χρησιμοποιω sha256 encryption και η κρυπτογραφηση γινεται ετσι

>$pass = hash("sha256", $_POST['password']);

.

Καταχωρειται σωστα στην βαση,οτ εχω τσεκαρει.

οταν παω να κανω ενα δοκιμαστικο Log in Με στοιχεια που εχω καταχωρησει,μου βγαζει παντα σφαλμα,οτι εισαγω λανθασμενα στοιχεια.

το login.php αρχειο μου ειναι αυτο:

><?php
session_start();
mysql_connect('localhost', 'root', '')
or die ("Error establishing database connection".mysql_error());
mysql_select_db('dbname')
or die ("Error establishing a database connection ".mysql_error());
$pass = hash("sha256", $_POST['password']);
if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST["username"]."' and password=$pass"))==1){
session_register("username");
header("location:index.php");
}
else {
echo 'Wrong username or password!';
}
?>

μηπως υποψιαζεστε/βλεπετε τι μπορει να πηγαινει λαθος?

 

ευχαριστω εκ των προτερων:)

Επεξ/σία από koslibpro
  • Απαντ. 38
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσ.

Αν και δεν ξερω PHP, μήπως το $pass πρέπει να ναι εκτός των "" για να παρει την τιμή του;

>if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST["username"]."' and password=".$pass))==1)

Δημοσ.

Το pass δεν ειναι σε αυτακια.

 

Χρησιμοποιησε την sprinf

 

>$user = "userName";
$pass = "userPass";
$query = "SELECT * FROM users WHERE username='{$user}' and password='{$pass}'";
//ή καλυτερα
$query = sprintf("SELECT * FROM users WHERE username='%' and password='%'",
mysql_real_escape_string($user),
mysql_real_escape_string($pass));

 

Δημοσ.

Το pass δεν ειναι σε αυτακια.

 

Χρησιμοποιησε την sprinf

 

>$user = "userName";
$pass = "userPass";
$query = "SELECT * FROM users WHERE username='{$user}' and password='{$pass}'";
//ή καλυτερα
$query = sprintf("SELECT * FROM users WHERE username='%' and password='%'",
mysql_real_escape_string($user),
mysql_real_escape_string($pass));

 

νομιζω οτι δεν καταλαβα ακριβως πως να το κανω.

δηλαδη ο κωδικας θα ειναι καπως ετσι,σωστα?

>
<?php
session_start();
mysql_connect('localhost', 'root', '')
or die ("Error establishing database connection".mysql_error());
mysql_select_db('dbname')
or die ("Error establishing a database connection ".mysql_error());
$pass = hash("sha256", $_POST['password']);

$query = sprintf("SELECT * FROM users WHERE username='%' and  password='%'", mysql_real_escape_string($user),  mysql_real_escape_string($pass));
if($query){
session_register("username");
header("location:index.php");
}
else {
echo 'Wrong username or password!';
}
?>

 

edit:ναι τελικα ετσι θα ειναι:)το δοκιμασα και μου λειτουργει μια χαρα:)

 

ευχαριστω πολυ παιδια:)

Δημοσ.

νομιζω οτι δεν καταλαβα ακριβως πως να το κανω.

δηλαδη ο κωδικας θα ειναι καπως ετσι,σωστα?

>
<?php
session_start();
mysql_connect('localhost', 'root', '')
or die ("Error establishing database connection".mysql_error());
mysql_select_db('dbname')
or die ("Error establishing a database connection ".mysql_error());
$pass = hash("sha256", $_POST['password']);

$query = sprintf("SELECT * FROM users WHERE username='%' and  password='%'", mysql_real_escape_string($user),  mysql_real_escape_string($pass));
-----------------------

$res = mysql_query($query) ;
if($res)
{
mpla mpla me ta res
--------------------
session_register("username");
header("location:index.php");
}
else {
echo 'Wrong username or password!';
}
?>

 

edit ξεχασα. στην sprintf βαλε μετα το % ενα s δηλαδη %s

Δημοσ.

και στο username και στο password ετσι?δεν την κατεχω την sprintf και τωρα αρχισα να την ψαχνω,που μου το προτινες εσυ..

Δημοσ.

και στο username και στο password ετσι?δεν την κατεχω την sprintf και τωρα αρχισα να την ψαχνω,που μου το προτινες εσυ..

 

Η mysql_query παιρνει ενα query το οποιο στελενει στην βαση για να παραει καποια αποτελεσματα.

 

το query ειναι ενα string

 

η sprintf φτιαχνει/ενωνει ενα string

πχ sprinf("Dieythynsh:%s Arithmos:%d", "agias triadas", 10) αυτο θα σου επιστρεψει "Dieythynsh:agias triadas Arithmos:10"

 

η mysql_real_escape_string ειναι για ασφαλεια

 

πχ αν δωσει ο χρηστης ενα ονομα σα My'Name θα το κανει My\'Name (δες στο google για php sql injection)

Δημοσ.

Αυτό που πρότεινε ο bnvdarklord γιατί δεν δουλεύει;

 

Δεν είμαι php'άς αλλά το ...

 

>
$query = sprintf("SELECT * FROM users WHERE username='%s' and password='%s'",
       mysql_real_escape_string($user),
       mysql_real_escape_string($pass));

δεν είναι ισοδύναμο με ...

 

>
$query =	"SELECT * FROM users WHERE username='"
	. mysql_real_escape_string($user)
	. "' and password='"
	. mysql_real_escape_string($pass)
	. "'";

?

Δημοσ.

Εχει νοημα να γινεται escape και το pass? Αφού γινεται hashed πρώτα.

 

 

Αυτό που πρότεινε ο bnvdarklord γιατί δεν δουλεύει;

 

Ξεχασα να βαλω αυτάκια στο pass

Δημοσ.

...

Ξεχασα να βαλω αυτάκια στο pass

Ανεξάρτητα από τα αυτάκια, περισσότερο ρωτάω για να μάθω αν υπάρχει κάποιου είδους διαφορά μεταξύ sprintf() και . (concatenation operator).

Δημοσ.

Δοκίμασε πάντως κάποια στιγμή αργότερα να δεις και το mysqli αντικείμενο και τι είναι τα prepared statements.

εχεις καποια Links αξιολογα υποψην???

Δημοσ.

Ανεξάρτητα από τα αυτάκια, περισσότερο ρωτάω για να μάθω αν υπάρχει κάποιου είδους διαφορά μεταξύ sprintf() και . (concatenation operator).

 

Ποιο σου φαινεται καλυτερο;

 

>$q1 = "isnert into foo values('". mysql_real_escape_string($var1) . "','"
							. mysql_real_escape_string($var2) . "','"
							. mysql_real_escape_string($var3) . "','"
							. mysql_real_escape_string($var4) . "','"
							. mysql_real_escape_string($var5) . "','"
							. mysql_real_escape_string($var6) . "')";
							
$q2 = sprintf("inser into foo values('%s','%s','%s','%s','%s','%s')",
							mysql_real_escape_string($var1),
							mysql_real_escape_string($var2),
							mysql_real_escape_string($var3),
							mysql_real_escape_string($var4),
							mysql_real_escape_string($var5),
							mysql_real_escape_string($var6),

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...