php bir giriş formu için çalışıyor

2 Cevap php

Burada üzerinde çalışıyorum kodu:

         login.php:

               <?php
         $con = mysql_connect("localhost","root","");
          mysql_select_db("koro",$con);

           $result= "SELECT * FROM users WHERE                    
          UNAME='".mysql_real_escape_string($_POST['Uneym'])."'"; 
           echo $result; 
             $num=mysql_num_rows($result);
                       echo $num;
                  for($i=1;$i<=$num; $i++){
            while($row=mysql_fetch_array($result))
         {
           $user=$row['UNAME']; 
           $pass=$row['PW'];
           }
           }


           if($username == $user && $password ==$pass)
       {
            echo "<script>alert('Login Successful!')</script>";
           }
            else if($password!= $pass ||$username != $user )
             {
            echo("Please Enter Correct Username and Password ...");
           ?>

loginform.php:

      <html>
   <form action="login.php" method="post">

         Username:<input type="text" name="Uneym" value="" /><br/>
               Password:<input type="password" name="Pass" value="" /><br/>

         <br/>
           <input type="submit" name="Submit" value="" />

           </form>
</head>
          <body>
       </body>
          </html>

Benim gibi bir acemi için basit bir kod var mı? :)

2 Cevap

Eğer bir öğretim egzersiz olarak bunu yapıyor (eğer bir hata varsa tekrar deneyebilirsiniz, böylece, tek bir sayfa olarak tüm yapabileceği halde), hayır bunu ve çalıştığından emin olmak için hiç kolay bir yolu yoktur.

Gerçekçi, bu çok basit. Sen, şifreleri karma bir tuz kullanmak, iyi parolalar zorlamak, maksimum oturum açma girişimleri saymak var, ve bir oturumda herhangi bir kullanıcı bilgi depolamak gerekir. Ama bütün bu daha sonra gelebilir ....

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.