Ben bir kullanıcı kayıt varsa testleri bu PHP işlevi hakkında geri bildirim alabilir miyim?

4 Cevap php

Ben sadece işlevleri yazma yerine inline şeyi yazmaya başlıyorum. Bu yeniden kullanılabilir bir fonksiyonu genelde yazılır ne var mı?

function test_user($user) {
$conn = get_db_conn();
$res = mysql_query("SELECT * FROM users WHERE uid = $user");
$row = mysql_fetch_assoc($res);
if (count($row) == 1) {
return true;
}
else {
    return false;
}
}

Birisi açtığında, ben onların UID var. Ben zaten DB olmadığını görmek istiyorum. Temel mantık olarak kullanılan olacak neler

Akışının "varsa, görüntüleme tercihlerini! Varsa, görüntü kayıt kutusu" tür. Açıkçası o kodun geri kalanı nasıl kullanıldığını bağlıdır, ama bu çalışma ilan edecek ve herhangi bir tuzaklar düşmüş? Teşekkürler!

4 Cevap

Bu deneyin:

$conn = get_db_conn(); # should reuse a connection if it exists

# Have MySQL count the rows, instead of fetching a list (also prevent injection)
$res = mysql_query(sprintf("SELECT COUNT(*) FROM users WHERE uid=%d", $user));

# if the query fails
if (!$res) return false;

# explode the result
list($count) = mysql_fetch_row($res);
return ($count === '1');

Düşünceler:

  • Sen dönüş sahte kullanıcı zaten yok demektir, çünkü başarısız bir sorgunun daha iyi yol tutuşu isteyeceksiniz.

  • Saymak için veritabanını kullanın, daha hızlı olacak.

  • I uid sprintf deyimi bir tamsayı olduğunu varsayarak yaşıyorum. Bu artık kullanıcı girişi için güvenlidir.

  • Eğer gibi görünen bir ise deyimi varsa if (something) { true } else { false } bunu daraltmak gerekir sadece return something.

HTH

Evet, reuseable olduğunu. Sen PHP kod kendisi dışında SQL hareket düşünebilirsiniz.

Mutlaka optimizasyonu için soran değil de, kullanıcının ekran tercihleri ​​için sorgulama düşünebilirsiniz (ben DB saklanan varsayalım) ve boş geri gelirse, kayıt kutusunu görüntüler. Sen veritabanına bir gezi tasarruf edeceğiz ve trafiğe bağlı olarak, bu büyük olabilir. Bu uygulama tutmaya karar verirseniz, ben sadece SELECT veritabanından bir sütun seçerek öneririm. Sürece veri hakkında umurumda değil gibi, her sütun almak için hiçbir sebep yok.

Öncelikle, çağırmanız gerekir

$user = mysql_real_escape_string($user);

bir SQL enjeksiyon hata kodunuzda var çünkü, manual bkz. İkinci olarak, size sorgu için değiştirerek mantığı kolaylaştırabilirsiniz:

SELECT COUNT(1) FROM user WHERE uid = $user;

hangi sadece $row tek bir dönüş değeri değerlendirmek sağlar. Son bir şey, aşağı php temelleri var bir kere, bir php çerçevede bakarak düşünün. Onlar size sorun neden olabilir ve iyi kod yazmak yapmaz, ama onlar muhtemelen size bir sürü iş kazandıracak.

Ayrıca,

if (condition) {
    return true;
}
else {
    return false;
}

yazılabilir edilebilir:

return condition;

Hangi :) yazarak ve okuyarak biraz kaydeder