Benim ilk oturum açma komut dosyası üzerinde çalışıyorum. Ben bir kitaptan örnekler aşağıdaki edilmiştir, ama ben şaşırıp yerdir. Ben kullanıcı girişi bir e-posta adresi olmak istiyorum, ama ben teslim vurmak istiyorum, ben bu hatayı olacaktı.
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\mysite\index.php on line 19
Komut kitaptan çalışır, hiçbir yazım hataları var, ve Google, ben orijinal sorgu başarısız olursa bu hata verilir bulundu, bu yüzden sorunun ne olduğunu kontrol etmek için bir "mysqli_error" eklemek karar verdi ve ben bu var:
Nah. admin@mysite.comYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@mysite.com AND password = SHA('password')' at line 1
Yani, ben @ işareti erken benim sorgu sona eriyor neredeyse olumlu duyuyorum. Ben dizeleri temizlemek için bir yol olarak süs ve mysql_real_escape_string var, ama bunun yanı sıra ben bir şey var. Ben bir süre için şimdi Googling edilmiş ve bulmak veya @ ("at işareti") veya etrafında işin çeşit için bir istisna yapmak için nasıl anlamaya olamaz.
Bu soru çok uzun veya karmaşık olmak istemiyordu, ama gerekirse ben daha fazla kod sağlayabilir.
Teşekkürler!
Edit: İşte çözüm daraltmak için tam koddur.
if (isset($_POST['submit'])) {
$loginEmail = mysqli_real_escape_string($dbc, trim($_POST['loginEmail']));
$loginPassword = mysqli_real_escape_string($dbc, trim($_POST['loginPassword']));
$query = "SELECT user_id, username FROM user_db WHERE email = $loginEmail AND password = SHA('$loginPassword')";
$loginData = mysqli_query($dbc, $query);
if (mysqli_num_rows($loginData) == 1) {
echo 'You win!';
}
else {
$error = mysqli_error($dbc);
echo 'Nah. ' . $loginEmail . $error;
}
}