Bir kullanıcı benim MySQL veritabanı karşı varsa Çok basit, nasıl kontrol edebilirim?

2 Cevap php

İşte ne var ama hiçbir şey ekrana çıktı. : \

<html>
<head>
</head>
<body>
<? 
mysql_connect(localhost, "sergio", "123");
@mysql_select_db("multas") or die( "Unable to select database");

$query="SELECT * FROM usuario";
$result=mysql_query($query);

$num=mysql_numrows($result);
$i=0;

$username=GET["u"];
$password=GET["p"];

while ($i < $num) {

$dbusername=mysql_result($result,$i,"username");
$dbpassword=mysql_result($result,$i,"password");

if(($username == $dbusername) && ($password == $dbpassword)){
echo "si";
}

$i++;
}

?>
</body>
</html>

Ben tüm kullanıcılar yinelenmesi ve kullanıcı için bir eşleşme olup olmadığını görüyorum && şifre.

Herhangi bir rehberlik?

2 Cevap

Doğrudan bir WHERE filtre kullanarak veritabanını sorgulamak gerekir. Senin durumunda, gibi bir şey yapabileceğini

$user = mysql_real_escape_string($_GET["u"])
$pass = mysql_real_escape_string($_GET["p"])

sonra bu gibi sorgu:

$query = "SELECT * FROM usario WHERE username = '$user' AND password = '$pass'"

Bu şekilde, aslında uygulamanın tüm kullanıcıları üzerinde döngü gerekmez. Büyük olasılıkla daha fazla, MySQL çok daha verimli bu işlemi yapabilirsiniz. Sonuç kümesi boş ise, o kullanıcı adı veya şifre veritabanında yok. Sonuç kümesi bir kayıt varsa, bu sorguda adı ve parola ile eşleşen kayıt dönecektir.

get PHP değişkenleri sadece GET değil, global $ _GET değişkeni aslında olduğunu unutmayın. Mysql_real_escape_string için çağrı SQL enjeksiyon saldırıları önlemek için gereklidir.

TÜM kullanıcılar almak ve daha sonra bir kullanıcı adı-şifre başlığın karşı teker teker karşılaştırmak istemiyorum, ben inanıyorum.

Bu deneyin:

$query= "SELECT id FROM usuario 
         WHERE LOWER(username) = LOWER('" . mysql_real_escape_string($_GET["u"]) . "'
         AND
         password = '" . mysql_real_escape_string($_GET["p"]) ."';";

O zaman

$result=mysql_query($query) or die (mysql_error());
if(mysql_numrows($result) > 0) echo 'si';

Ve işte bu.

Şimdi, kod hata $username=GET["u"]; $username=$_GET["u"]; olmalıdır buraya dayanır. Ayrıca, güvenlik nedenlerinden dolayı yerine GET bir kullanıcı adı ve şifre çukur POST geçmek isteyebilirsiniz.