PHP giriş dönüş değerleri

5 Cevap
  function procLogin($username,$password){

     $query = "SELECT *
                      FROM members
                      WHERE login = '".mysql_escape_string($username)."'
                      AND passwd = '".mysql_escape_string($password)."'";
        $result = mysql_query($query);


    	//$values = array();
        while($row = mysql_fetch_array($result)) 
        {
    			return 'gg';
                return(array($row['member_id']));
        }



}

Userlevel alanını .... ne de bir şey elde etmek mümkün değil ....

5 Cevap

return (array ($ row ['member_id']));

Yanlış Tipler - bu olmalıdır:

($ row ['member_id']) return;

Böyle karşılığında dizi tanımlamak gerekmez.

Muhtemelen istediğiniz işlevi sütun adı yerine bir sayısal dizin olarak tuşları ile değerleri döndürür olarak çalışmak için çok güzel mysql_fetch_array - aynı zamanda bir sayısal endeksi olarak döner mysql_fetch_array () kullanın.

İşte birkaç düzenli ups ile tekrar bulunuyor:

function procLogin($username,$password){
    $query = "SELECT *
    	 FROM members
    	 WHERE login = '".mysql_escape_string($username)."'
    	 AND passwd = '".mysql_escape_string($password)."'";
    $result = mysql_query($query);

    $row = mysql_fetch_assoc($result); 

    if ($row['member_id'] > 0)
    {
    	return ($row['member_id']);
    }
    else
    {
    	return false;
    }
}

Emin olun bir soru, ama bir sorun return bu süre döngü içinde ing konum olduğunu tam olarak ne:

while($row = mysql_fetch_array($result)) 
{
  return 'gg';
  return(array($row['member_id']));
}

Aslında, twice döngü içinde dönüyoruz ... öylesine bir şey SQL sorgusu ile yanlış giderse sürece procLogin() işlevi her zaman, "gg" bir değer dönecektir.

Karışıklığı yaratır ve beklenmeyen sonuçlara yol açabilir genel olarak, herhangi bir döngü içinde return ifadeleri kaçınmalısınız.

Ben tüm dizi yerine sadece member_id dönmek istiyorum ki, userlevel hakkında açıklamalara dayanarak düşünüyorum? İşte yukarıda Meep3D cevabı için hafif bir düzenleme bulunuyor:

function procLogin($username,$password){
    $query = "SELECT *
         FROM members
         WHERE login = '".mysql_escape_string($username)."'
         AND passwd = '".mysql_escape_string($password)."'";
    $result = mysql_query($query);

    $row = mysql_fetch_assoc($result); 

    if (mysql_num_rows($result) > 0)
    {
        $row = mysql_fetch_assoc($result); 
        return $row;
    }
    else
    {
        return false;
    }
}

Bu userlevel arıyorsanız, muhtemelen bunu gibi bir şey erişmek mümkün olmalıdır, tüm tablo sütunlarının bir dizi döndürmesi gerekir:

$loginInfo = procLogin("theband","password1");
//if ($loginInfo) or something similar here
$level = $loginInfo['userlevel'];

Yani bir şey geri alıyorsanız? Demek ki, aslında while döngüsü içine gidiyor?

Birşey yanlış giderse mysql_query çağrı görmek için düz sonra bir mysql_error () işlev çağrısı kullanmak istiyorum.

Belki, örneğin, yapılan hiçbir bağlantısı yoktu.

Eğer hala sorunlarınız? Eğer öyleyse gibi bir şey deneyin:

echo $query;

Eğer sorgu tanımladıktan sonra, o veritabanından herhangi bir geçerli döner olup olmadığını kontrol etmek için phpmyadmin yapıştırın + anlaşıldı.

Bundan sonra yerleştirerek deneyin:

if (mysql_error())
{
    trigger_error ("MySQL Error: ". mysql_error(), E_USER_ERROR);
}

Eğer mysql_query diyoruz hemen sonra. Sana ne yanlış gitti ayrıntılarını veren biri varsa, bu bir hata tetiklemesi gerekir.