@4sadly

Как сделать, чтобы кнопка работала с определенным объектом?

Вывожу список пользователей и хочу, чтобы на каждом была кнопка, которая получала его id и выполняла какие-либо действия в бд (удалить пользователя например)
  • Вопрос задан
  • 95 просмотров
Решения вопроса 2
mahmudchon
@mahmudchon
<button type="submit" id="<?= $user['id'] ?>">Удалить</button>

Хочу заметить, что если ответ не решает Ваш вопрос, то не спешите считать ответ не верным. Быть может вопрос лишен необходимых подробностей. Спасибо.
Ответ написан
irishmann
@irishmann
Научись пользоваться дебаггером
Простейший пример.
some_page.php - страница на которой выводим список пользователей
<?php
    //некий массив пользователей
    $users_list = [
        [
            'id' => 1,
            'login' => 'user_1',
            'last_visit_date' => '27.12.2019 14:31:15',
            'active' => true,
        ],
        [
            'id' => 2,
            'login' => 'user_2',
            'last_visit_date' => '27.12.2019 14:31:15',
            'active' => false,
        ],
        [
            'id' => 3,
            'login' => 'user_3',
            'last_visit_date' => '27.12.2019 14:31:15',
            'active' => false,
        ],
        [
            'id' => 4,
            'login' => 'user_4',
            'last_visit_date' => '27.12.2019 14:31:15',
            'active' => true,
        ],
        [
            'id' => 5,
            'login' => 'user_5',
            'last_visit_date' => '27.12.2019 14:31:15',
            'active' => false,
        ],
        [
            'id' => 6,
            'login' => 'user_6',
            'last_visit_date' => '27.12.2019 14:31:15',
            'active' => true,
        ],
        [
            'id' => 7,
            'login' => 'user_7',
            'last_visit_date' => '27.12.2019 14:31:15',
            'active' => true,
        ],
    ];
?>
<html>
    <head>
        <style>
            table {
                border: 0; 
                border-collapse: collapse; 
                padding:0
            }
            th, td {
                border: 1px solid #000;
                margin: 0;
                padding: 10px;
            }
            th {
                background-color: #ddd
            }
        </style>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <th>id</th>
                    <th>login</th>
                    <th>last_visit_date</th>
                    <th>active</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                <?php
                    foreach($users_list as $user){
                        echo '<tr>',
                            '<td>', $user['id'], '</td>',
                            '<td>', $user['login'], '</td>',
                            '<td>', $user['last_visit_date'], '</td>',
                            '<td>', $user['active'] ? 'active' : 'banned', '</td>',
                            '<td><button class="delete_user" data-userid="', $user['id'],'">Удалить</button></td>',
                        '</tr>';
                    }
                ?>
            </tbody>
        </table>
        <script type="text/JavaScript">
            
            Array.from(document.querySelectorAll('.delete_user'), function(el){
                el.onclick = function(){
                    let xhr = new XMLHttpRequest();
                    let json = JSON.stringify();
                    xhr.open('POST', 'delete_user.php', true)
                    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                    xhr.responseType = 'json';
                    xhr.onreadystatechange = function(response) {
                        if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
                            
                            alert(xhr.response['msg'])
                            if(xhr.response['status'] === 'success'){
                                el.closest('tr').remove();
                            }
                        };
                    }
                    xhr.send('userid='+this.dataset.userid);
                }
            })
            
        </script>
    </body>
</html>

delete_user.php - страница, на которую первая делает AJAX-запрос на удаление пользователя

<?php

    // Принимаем идентификатор пользователя
    // проверяем, админ вызвал удаление или нет 
    //(крч. проверяем право на удаление пользователей)
    // чтобы не левый чел всех не вынес
    try{
        $userid = (int)$_POST['userid'];
        $can_delete = 0; // якобы мы проверили, и можно удалять
        
        if(!$can_delete){
            throw new Exception('Вы не имеете права удалять других пользователей!!!');
        }
        /*
         * Куча доп. проверок после которых мы уверены что удалять мы
         * Отправляем запрос на удаление, смотрим есть ли ошибки, если все хорошо шлем статус 'success' 
         */
        
        echo json_encode(['status' => 'success', 'msg' => 'Пользователь №' . $userid . ' успешно удален!']);
        
    }
    catch(Exception $ex){
        /* попадаем сюда 
         * если возникла ошибка
         * или случилось исключение
         * шлем статус 'error' и текст ошибки
         */
        echo json_encode(['status' => 'error', 'msg' => $ex->getMessage()]);
         
    }

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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