Задать вопрос
@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>";
}
  • Вопрос задан
  • 267 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 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>";
}

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

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

Похожие вопросы