1) ilk hata size DBMS sorgu göndermek asla olmasıdır - kod gibi görünmelidir:
$dbh=mysql_connect(...);
mysql_select_db(...,$dbh); // note see below
$result=mysql_query(....$dbh);
while ($row=mysql_fetch_assoc($result)) {
...
}
2) Bu sorgudan satırları alır kod etrafında 2 döngüler (loop için bir ve bir süre döngü) var - sadece bir tane olmalıdır. Yani sorgu 3 satır döndürürse, 9 kez etrafında aslında döngü:
1) for loop iteration 1
2) while loop iteration 1 fetches row 1, writes results
3) while loop iteration 2 fetches row 2, writes results
4) while loop iteration 3 fetches row 3, writes results
5) while loop fails on subsequent iteration
6) for loop iteration 2
7) while loop fails on subsequent iteration
8) for loop iteration 3
9) while loop fails on subsequent iteration
3) skaler değişkenler Mysql_Fetch_Assoc tarafından döndürülen değerler (yani te her zaman sonuç üzerine yazma atamak - $ kadar kullanıcı ve $ geçmek her zaman son sıradan döndürülen değerler içerir.
4) Onun iyi uygulama bir döngü içinde erken çıkış kriterleri kurmak - gereksiz yürütülmesine önleme ek olarak, bu da yukarıda anlatılan 3 Çözmesi, örneğin olur
$valid=false;
while($row=mysql_fetch_array($result))
{
if (($username==$row['UNAME']) && ($password==$row['PW'])) {
$valid=true;
break;
}
}
if ($valid) {....
4) sonraki sorun username daha önce $ _POST ['Uneym'] olarak aynı olması gerektiğini söyledi $ username uyuyorsa neden kontrol olmasıdır.
5) Bir sonraki sorun register_globals etkin olan bu kodu yazdım gibi görünüyor olmasıdır.
6) Bir sonraki sorun gereksiz veritabanından veri getiriliyor olmasıdır - sadece) sonra sadece 1 veya sıfır satır alırsınız (ve hatta sonuç kümesi yineleme gerekmez parolası bir süzgeç eklemek:
$user=mysql_real_escape_string($_POST['Uneym'], $dbh);
$pass=mysql_real_escape_string($_POST['password'], $dbh);
$result=mysql_query("SELECT * FROM users WHERE UNAME='$user' AND PW='$pass'",$dbh);
$valid=mysql_num_rows($result);
ve hala daha var:
7)
if($username == $user && $password ==$pass)
{
echo "alert('Login Successful!')";
}
else if($password!= $pass ||$username != $user )
{
echo("Please Enter Correct Username and Password ...");
?>
Bu ayrıştırmak değil - bir eşsiz var '{' else sonra
8) else deyiminde koşul gereksiz - bu fıkra ve eğer tanımı gereği başarısız olursa kod sadece hiç else bloğu içine gidecek,
($ Username == $ user && $ sifre == $ parola) ===! ($ Password = $ pas |! |! $ Username = $ user)
Genel olarak daha iyi bir fikir bir tablo DML deyimi ile yaşamaktadır veritabanı durumunu exlpicitly için - 9) Birden fazla mysql veritabanları ile çalışıyorsanız () hayatı çok karmaşık yapabilirsiniz mysql_select_db kullanarak.
C.