DatabaseManager.class.php
<?php class DatabaseManager { { $conn = @new mysqli(DB_SERVER, DB_USERNAME, DB_PW, DB_DB); if(mysqli_connect_errno()) { } else return $conn; } { $conn = self::getConnection(); $SQL = $conn->real_escape_string($SQL); $result = $conn->query($SQL); if(!$result) { } else { while(($row = $result->fetch_array(MYSQLI_ASSOC)) !== NULL) { $resultArray[] = $row; } return $resultArray; else return false; } mysqli_close($conn); } } ?>
ModuleLoader.class.php:
<?php class ModuleLoader { { switch($MODULE) { /*///////////*/ case 'login': { } $login = $_POST['login']; DatabaseManager::selectBySQL("SELECT * FROM users WHERE username='$login'"); if($resultArray) { $password = $_POST['password']; if(password_verify($password, $resultArray['password'])) { $_SESSION['online'] = true; $_SESSION['login'] = $login; $result->free_result(); } else { $result->free_result(); $_SESSION['repeat_login'] = '<span style="color: red">Nieprawidłowy login lub hasło!</span>'; } } else { $_SESSION['repeat_login'] = '<span style="color: red">Nieprawidłowy login lub hasło!</span>'; } break; } } } ?>
Problem pojawia się w 18 linii pliku ModuleLoader.class.php z samym zapytaniem. Nie ważne w jaki sposób próbuje tą zmienną włożyć do zapytania uaktywnia się if z 23 linii pliku DatabaseManager.class.php świadczący o złym sformułowaniu zapytania.
Jeżeli to samo zapytanie występuje bez zmiennej, załóżmy:
"SELECT * FROM users WHERE id=1"
To wszystko działa jak powinno (tj. uaktywnia się if z 37 linii (DatabaseManager.class.php) jeżeli wyszukanie nic nie znalazło lub else z 39 linii (DatabaseManager.class.php) jeżeli zapytanie coś wyszukało).
Problem pojawia się właśnie w chwili gdy chce do zapytania włożyć zmienną php. Próbowałem na różne sposoby:
1. "SELECT * FROM users WHERE username='$login'"
2. 'SELECT * FROM users WHERE username="$login"'
3. "SELECT * FROM users WHERE username='".$login."'"
4. 'SELECT * FROM users WHERE username="'$login'"'
5. "SELECT * FROM users WHERE username='{$login}'"
6. 'SELECT * FROM users WHERE username="{$login}"'
7. "SELECT * FROM users WHERE username='.{$login}.'"
8. 'SELECT * FROM users WHERE username=".{$login}."'
9. "SELECT * FROM users WHERE username='%$login%'"
Niestety żaden ze sposób nie przyniósł żadnego lepszego efektu.