Как я могу передать два параметра скрипту из цикла php foreach?

У меня есть цикл php foreach, работающий с записями в базе данных. foreach добавляет новую строку таблицы, показывающую контакты в базе данных, например. имя, адрес и т. д. Я использую ссылку href для запуска сценария ajax/jquery, который добавит эту запись в таблицу списка экипажа. Сценарий находится в цикле foreach, поэтому у меня есть доступ к данным для отправки.

Моя проблема в том, что первая строка работает нормально, а остальные записи не запускают скрипт. Я думаю, это может быть потому, что скрипт не может запускаться с тем же идентификатором? поэтому я добавил идентификатор контактов в файл href.

<a id = "addCrewLink'.$contact->person_id.'" href = "/pages/voyages/crewlists/add.php?item='.$contact->person_id.'&type=crew" class = "btn btn-sm btn-outline-primary">crew</a>

Это не сработало. Я думаю, что мне нужно переместить скрипт из цикла foreach как потому, что он находится над таблицей, которую я хочу обновить, так и потому, что, вероятно, это плохая практика иметь таблицу, полную скриптов!

Можно по ссылке передать параметры и потом одним скриптом ссылку подцепить???

$(document).ready(function() {
    $("#addCrewLink<?php echo $contact->person_id;?>").click(function(e) {
        e.preventDefault();
        var personID = '<?php echo $contact->person_id;?>';
        var voyageID = '<?php echo Input::get('voyage'); ?>';
        var passageID = '<?php echo Input::get('passage'); ?>';
        var role = '<?php echo $contact->role;?>';
        $.ajax({
                type: "POST",
                url: "/pages/voyages/crewlists/add.php",
                dataType: 'json',
                data:{ person: personID, embarkingAs: role, voyage: voyageID, passage: passageID },
                'success': function(data) {
                    if (data['success']) {
                        //refresh the tables
                        $("#crewTable").load(location.href + " #crewTable");
                        //$("#passengerTable").load(location.href + " #passengerTable");
                        //send the user a success message
                        resetToastPosition();
                        $.toast({
                                heading: 'Success',
                                text: 'Waypoint added successfully',
                                textColor: 'white',
                                showHideTransition: 'slide',
                                hideAfter : 7000,
                                icon: 'success',
                                loaderBg: '#f96868',
                                position: 'top-center'
                        })
                    } else {
                        var i;
                        for (i = 0; i < data['message'].length; i++) {
                            //scroll to the top
                            window.scrollTo({ top: 0, behavior: 'smooth' });
                            this.error(this.xhr, data['message'][i]);
                    }
                }
            },
            'error': function(jqXHR, textStatus, errorThrown) {
                //send the user a fail message
                resetToastPosition();
                $.toast({
                  heading: 'Error',
                  text: textStatus,
                  textColor: 'white',
                  showHideTransition: 'slide',
                  hideAfter : 7000,
                  icon: 'error',
                  bgColor: '#f96868',
                  position: 'top-center',
                  loaderBg: '#405189'
                })
            }
        })
    });
});

Большое спасибо за всю помощь!

С уважением

Мэтт

Использование отдельного обработчика кликов для каждой ссылки не имеет особого смысла. Вы должны написать одну функцию, которая работает для всех этих ссылок. Начните с выбора их через класс вместо идентификатора. Отдельные данные, которые вам необходимо отправить в каждом случае, могут быть, например, помещены в настраиваемые атрибуты данных самих ссылок, чтобы ваш обработчик кликов мог прочитать их оттуда.

04FS 18.03.2019 14:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почти готово. Мое предложение состояло бы в том, чтобы внести следующие изменения:

  • Измените якоря, чтобы все они имели класс add-crew-link
  • Добавьте атрибуты данных для нужных данных для каждого якоря.

В итоге что-то вроде:

<a class = "add-crew-link" data-id = "1" href = "..." class = "btn btn-sm btn-outline-primary">crew</a>
<a class = "add-crew-link" data-id = "2" href = "..." class = "btn btn-sm btn-outline-primary">crew</a>
<a class = "add-crew-link" data-id = "3" href = "..." class = "btn btn-sm btn-outline-primary">crew</a>
<a class = "add-crew-link" data-id = "4" href = "..." class = "btn btn-sm btn-outline-primary">crew</a>

Примечание: Добавьте дополнительные атрибуты data- по своему желанию. Например, data-name или data-age, или что-то еще.

  • Измените обработчик кликов, чтобы настроить таргетинг на все якоря add-crew-link:

    $('.add-crew-link').click(function(e) {

  • Возьмите id и другие атрибуты данных, которые вам нужны, в начале функции обработчика кликов:

    var personID = $(this).data('id');

И, конечно же, убедитесь, что функция больше не находится внутри цикла PHP.

Другие вопросы по теме