Выберите запрос, который использует несколько ссылок.

Вопрос или проблема

У меня есть форма, которая может передавать несколько имен клиентов, которые в свою очередь выбираются из другой таблицы. Я хочу передать как имя, так и идентификатор клиента. Я могу сделать одно или другое, но не могу понять, как сделать и то, и другое. Форма выглядит следующим образом:

<form name="new_project" class="" method="post" action="<?php bloginfo('url');?>/new-project" onsubmit="return validate();">
<p><label>Название проекта:: </label> <input type="text" class="" name="project" id="project" /></p>
<p><label>Ссылка на проект:: </label> <input type="text" class="" name="reference" id="reference" /></p>

<p><label>Назначить пользователей::</label><select id="client" name="client[]"  multiple="multiple">
                            <option  class="multiple" value="selected">Назначить пользователя на проект</option>  
<option value="<?php echo $client ->user_name;?>"><?php echo $client ->user_name; ?></option>

<p><input type="submit" name="submit_form" value="..:: Сохранить проект ::.."></p>

Я думаю, что способ сделать это – добавить запрос для выбора идентификаторов из таблицы ‘клиентов’, но не могу найти способ это сделать. Любые ответы, которые я видел, касаются не WP таблиц. Итак, вот что я думал – но это не работает. (фрагмент кода для отправки)

if(isset($_POST['client']))
{$clients = ($_POST['client'] );    
}

 foreach ($clients as $client_id) {

 $users=$wpdb->get_results( " SELECT * FROM vo_wp_clients where  user_name="$client_id"");
 foreach($users as $user){
    
    $id=$user->user_id; 
}
$wpdb->insert(
    'vo_wp_assigned_projects',
    array(
        'client_id'=>'$id',
        'client'  => $client_id,
        'project' => $ref,
        'name' => $projs,
    )
);

}
Вставка работает без элемента ‘client_id’. Что я пропустил.

Ответ или решение

Чтобы правильно реализовать функциональность сохранения как имени клиента, так и его идентификатора в базе данных WordPress, вам необходимо внести несколько изменений в существующий код. Прежде всего, мы сосредоточимся на корректной выборке идентификаторов клиентов на основе имени клиента.

Учитываемые аспекты

  1. Форма: Убедитесь, что форма действительно передает идентификаторы клиентов.
  2. Выборка данных: Используйте правильный SQL-запрос для выборки идентификаторов клиентов на основе имен.
  3. Вставка данных: Убедитесь, что вы правильно работаете с полученными данными при вставке в таблицу.

Обновленный код формы

Прежде всего, убедитесь, что у вас в опциях вашего <select> передаются идентификаторы клиентов в качестве значений. Это значит, что вместо $client->user_name вам нужно использовать идентификатор пользователя. Вот так:

<option value="<?php echo $client->user_id; ?>"><?php echo $client->user_name; ?></option>

Обновленный код обработки формы

Теперь давайте обновим код PHP, который обрабатывает данные формы:

if(isset($_POST['client'])){
    global $wpdb; // Не забудьте указать глобальный объект $wpdb
    $clients = $_POST['client'];

    foreach ($clients as $client_id) {
        // Получаем полную информацию о клиенте по его ID
        $user = $wpdb->get_row($wpdb->prepare("SELECT * FROM vo_wp_clients WHERE user_id = %d", $client_id));

        if ($user) {
            $name = $user->user_name; // Имя клиента
            // Вставка в таблицу vo_wp_assigned_projects
            $wpdb->insert(
                'vo_wp_assigned_projects',
                array(
                    'client_id' => $client_id, // ID клиента
                    'client'    => $name,       // Имя клиента
                    'project'   => $reference,   // Здесь должно быть имя проекта
                    'name'      => $project_name, // Название проекта
                )
            );
        } else {
            // Обработка случая, когда клиент не найден
            // Вы можете записать ошибку в логи или вывести сообщение
        }
    }
}

Разбор логики

  1. Форма: Теперь форма передаёт идентификаторы клиентов вместо их имён, что позволяет избежать путаницы и обеспечивает более безопасную и надёжную логику работы с базой данных.

  2. Получение данных: Использование $wpdb->get_row с prepare помогает защитить ваш запрос от SQL-инъекций. Здесь user_id выбирается из таблицы vo_wp_clients, и результат проверяется на наличие ошибки.

  3. Вставка данных: На этапе вставки данные передаются в массиве, где client_id – это идентификатор клиента (который был передан из формы), а client – это имя клиента, полученное из таблицы.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...