@ramazan22

Рефакторинг кода и исправление багов?

Необходимо провести рефакторинг, исправить баги, указать уязвимиости и продокументировать в стиле PHPDoc.

Пока вижу, что подключение к базе идет в цикле (что, понятно, неверно) и закрывается соединение с базой перед ретурном. Мне кажется, надо после (не прав?).

function load_users_data($user_ids) {
    $user_ids = explode(',', $user_ids);
    foreach ($user_ids as $user_id) {
        $db = mysqli_connect("localhost", "root", "123123", "database");
        $sql = mysqli_query($db, "SELECT * FROM users WHERE id=$user_id");
        while($obj = $sql->fetch_object()){
            $data[$user_id] = $obj->name;
        }
        mysqli_close($db);
    }
    return $data;
}
// Как правило, в $_GET['user_ids'] должна приходить строка
// с номерами пользователей через запятую, например: 1,2,17,48
$data = load_users_data($_GET['user_ids']);
foreach ($data as $user_id=>$name) {
    echo "<a href=\"/show_user.php?id=$user_id\">$name</a>";
}
  • Вопрос задан
  • 265 просмотров
Решения вопроса 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
function load_users_data(Array $user_ids) 
{
    $data = [];
    
    $user_ids = array_filter($user_ids, function($id) { 
        return is_numeric($id); 
    });
    
    if ($db = mysqli_connect("localhost", "root", "123123", "database")) {
        $sql = "SELECT * FROM `users` WHERE id IN (" . implode(',', $user_ids) . ")";
        $query = mysqli_query($db, $sql);
    
        while($obj = $query->fetch_object()) {
            $data[$obj->id] = $obj->name;
        }

        mysqli_close($db);
    } else {
        throw new Exception('Ошибка соединения с базой данных.');
    }
    return $data;
}

$data = load_users_data(explode(',', $_GET['user_ids']));
foreach ($data as $user_id=>$name) {
    echo "<a href=\"/show_user.php?id=$user_id\">$name</a>";
}

В самом первом приближении лучше сделать вот так
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 09:39
20000 руб./за проект
24 апр. 2024, в 09:32
25000 руб./за проект
24 апр. 2024, в 09:27
13000 руб./за проект