Вопрос или проблема
У меня есть форма, которая может передавать несколько имен клиентов, которые в свою очередь выбираются из другой таблицы. Я хочу передать как имя, так и идентификатор клиента. Я могу сделать одно или другое, но не могу понять, как сделать и то, и другое. Форма выглядит следующим образом:
<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, вам необходимо внести несколько изменений в существующий код. Прежде всего, мы сосредоточимся на корректной выборке идентификаторов клиентов на основе имени клиента.
Учитываемые аспекты
- Форма: Убедитесь, что форма действительно передает идентификаторы клиентов.
- Выборка данных: Используйте правильный SQL-запрос для выборки идентификаторов клиентов на основе имен.
- Вставка данных: Убедитесь, что вы правильно работаете с полученными данными при вставке в таблицу.
Обновленный код формы
Прежде всего, убедитесь, что у вас в опциях вашего <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 {
// Обработка случая, когда клиент не найден
// Вы можете записать ошибку в логи или вывести сообщение
}
}
}
Разбор логики
-
Форма: Теперь форма передаёт идентификаторы клиентов вместо их имён, что позволяет избежать путаницы и обеспечивает более безопасную и надёжную логику работы с базой данных.
-
Получение данных: Использование
$wpdb->get_row
сprepare
помогает защитить ваш запрос от SQL-инъекций. Здесьuser_id
выбирается из таблицыvo_wp_clients
, и результат проверяется на наличие ошибки. -
Вставка данных: На этапе вставки данные передаются в массиве, где
client_id
– это идентификатор клиента (который был передан из формы), аclient
– это имя клиента, полученное из таблицы.
Заключение
Следуя данным рекомендациям, вы сможете корректно и безопасно сохранять идентификаторы клиентов и их имена в базе данных, улучшая функциональность вашей формы и соответствуя профессиональным стандартам разработки. Обязательно протестируйте код на предмет возможных ошибок и убедитесь, что данные корректно сохраняются.